jfs-components 0.0.21 → 0.0.25

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 (174) hide show
  1. package/lib/commonjs/assets/fonts/JioType Var.ttf +0 -0
  2. package/lib/commonjs/components/Accordion/Accordion.js +1 -1
  3. package/lib/commonjs/components/Accordion/Accordion.js.map +1 -1
  4. package/lib/commonjs/components/ActionFooter/ActionFooter.js +2 -2
  5. package/lib/commonjs/components/ActionFooter/ActionFooter.js.map +1 -1
  6. package/lib/commonjs/components/AppBar/AppBar.js +2 -2
  7. package/lib/commonjs/components/AppBar/AppBar.js.map +1 -1
  8. package/lib/commonjs/components/Avatar/Avatar.js +2 -2
  9. package/lib/commonjs/components/Avatar/Avatar.js.map +1 -1
  10. package/lib/commonjs/components/Badge/Badge.js +1 -1
  11. package/lib/commonjs/components/Badge/Badge.js.map +1 -1
  12. package/lib/commonjs/components/BottomNav/BottomNav.js +2 -2
  13. package/lib/commonjs/components/BottomNav/BottomNav.js.map +1 -1
  14. package/lib/commonjs/components/BottomNavItem/BottomNavItem.js +2 -2
  15. package/lib/commonjs/components/BottomNavItem/BottomNavItem.js.map +1 -1
  16. package/lib/commonjs/components/Button/Button.js +1 -1
  17. package/lib/commonjs/components/Button/Button.js.map +1 -1
  18. package/lib/commonjs/components/Carousel/Carousel.js +341 -0
  19. package/lib/commonjs/components/Carousel/Carousel.js.map +1 -0
  20. package/lib/commonjs/components/Carousel/Carousel.mdx +154 -0
  21. package/lib/commonjs/components/Disclaimer/Disclaimer.js +1 -1
  22. package/lib/commonjs/components/Disclaimer/Disclaimer.js.map +1 -1
  23. package/lib/commonjs/components/Divider/Divider.js +2 -2
  24. package/lib/commonjs/components/Divider/Divider.js.map +1 -1
  25. package/lib/commonjs/components/Drawer/Drawer.js +10 -3
  26. package/lib/commonjs/components/Drawer/Drawer.js.map +1 -1
  27. package/lib/commonjs/components/FilterBar/FilterBar.js +2 -2
  28. package/lib/commonjs/components/FilterBar/FilterBar.js.map +1 -1
  29. package/lib/commonjs/components/IconButton/IconButton.js +2 -2
  30. package/lib/commonjs/components/IconButton/IconButton.js.map +1 -1
  31. package/lib/commonjs/components/IconCapsule/IconCapsule.js +2 -2
  32. package/lib/commonjs/components/IconCapsule/IconCapsule.js.map +1 -1
  33. package/lib/commonjs/components/LazyList/LazyList.js +2 -2
  34. package/lib/commonjs/components/LazyList/LazyList.js.map +1 -1
  35. package/lib/commonjs/components/ListGroup/ListGroup.js +1 -1
  36. package/lib/commonjs/components/ListGroup/ListGroup.js.map +1 -1
  37. package/lib/commonjs/components/ListItem/ListItem.js +5 -5
  38. package/lib/commonjs/components/ListItem/ListItem.js.map +1 -1
  39. package/lib/commonjs/components/MerchantProfile/MerchantProfile.js +1 -1
  40. package/lib/commonjs/components/MerchantProfile/MerchantProfile.js.map +1 -1
  41. package/lib/commonjs/components/MoneyValue/MoneyValue.js +1 -1
  42. package/lib/commonjs/components/MoneyValue/MoneyValue.js.map +1 -1
  43. package/lib/commonjs/components/NavArrow/NavArrow.js +1 -1
  44. package/lib/commonjs/components/NavArrow/NavArrow.js.map +1 -1
  45. package/lib/commonjs/components/PageTitle/PageTitle.js +1 -1
  46. package/lib/commonjs/components/PageTitle/PageTitle.js.map +1 -1
  47. package/lib/commonjs/components/RadioButton/RadioButton.js +194 -0
  48. package/lib/commonjs/components/RadioButton/RadioButton.js.map +1 -0
  49. package/lib/commonjs/components/RadioButton/RadioButton.mdx +92 -0
  50. package/lib/commonjs/components/Section/Section.js +4 -4
  51. package/lib/commonjs/components/Section/Section.js.map +1 -1
  52. package/lib/commonjs/components/TextInput/TextInput.js +1 -1
  53. package/lib/commonjs/components/TextInput/TextInput.js.map +1 -1
  54. package/lib/commonjs/components/TransactionDetails/TransactionDetails.js +2 -2
  55. package/lib/commonjs/components/TransactionDetails/TransactionDetails.js.map +1 -1
  56. package/lib/commonjs/components/UpiHandle/UpiHandle.js +4 -2
  57. package/lib/commonjs/components/UpiHandle/UpiHandle.js.map +1 -1
  58. package/lib/commonjs/components/index.js +7 -0
  59. package/lib/commonjs/components/index.js.map +1 -1
  60. package/lib/commonjs/design-tokens/figma-variables-resolver.js +9 -3
  61. package/lib/commonjs/design-tokens/figma-variables-resolver.js.map +2 -1
  62. package/lib/commonjs/icons/registry.js +1 -1
  63. package/lib/module/assets/fonts/JioType Var.ttf +0 -0
  64. package/lib/module/components/Accordion/Accordion.js +1 -1
  65. package/lib/module/components/Accordion/Accordion.js.map +1 -1
  66. package/lib/module/components/ActionFooter/ActionFooter.js +2 -2
  67. package/lib/module/components/ActionFooter/ActionFooter.js.map +1 -1
  68. package/lib/module/components/AppBar/AppBar.js +2 -2
  69. package/lib/module/components/AppBar/AppBar.js.map +1 -1
  70. package/lib/module/components/Avatar/Avatar.js +2 -2
  71. package/lib/module/components/Avatar/Avatar.js.map +1 -1
  72. package/lib/module/components/Badge/Badge.js +1 -1
  73. package/lib/module/components/Badge/Badge.js.map +1 -1
  74. package/lib/module/components/BottomNav/BottomNav.js +2 -2
  75. package/lib/module/components/BottomNav/BottomNav.js.map +1 -1
  76. package/lib/module/components/BottomNavItem/BottomNavItem.js +2 -2
  77. package/lib/module/components/BottomNavItem/BottomNavItem.js.map +1 -1
  78. package/lib/module/components/Button/Button.js +1 -1
  79. package/lib/module/components/Button/Button.js.map +1 -1
  80. package/lib/module/components/Carousel/Carousel.js +333 -0
  81. package/lib/module/components/Carousel/Carousel.js.map +1 -0
  82. package/lib/module/components/Carousel/Carousel.mdx +154 -0
  83. package/lib/module/components/Disclaimer/Disclaimer.js +1 -1
  84. package/lib/module/components/Disclaimer/Disclaimer.js.map +1 -1
  85. package/lib/module/components/Divider/Divider.js +2 -2
  86. package/lib/module/components/Divider/Divider.js.map +1 -1
  87. package/lib/module/components/Drawer/Drawer.js +11 -4
  88. package/lib/module/components/Drawer/Drawer.js.map +1 -1
  89. package/lib/module/components/FilterBar/FilterBar.js +2 -2
  90. package/lib/module/components/FilterBar/FilterBar.js.map +1 -1
  91. package/lib/module/components/IconButton/IconButton.js +2 -2
  92. package/lib/module/components/IconButton/IconButton.js.map +1 -1
  93. package/lib/module/components/IconCapsule/IconCapsule.js +2 -2
  94. package/lib/module/components/IconCapsule/IconCapsule.js.map +1 -1
  95. package/lib/module/components/LazyList/LazyList.js +2 -2
  96. package/lib/module/components/LazyList/LazyList.js.map +1 -1
  97. package/lib/module/components/ListGroup/ListGroup.js +1 -1
  98. package/lib/module/components/ListGroup/ListGroup.js.map +1 -1
  99. package/lib/module/components/ListItem/ListItem.js +5 -5
  100. package/lib/module/components/ListItem/ListItem.js.map +1 -1
  101. package/lib/module/components/MerchantProfile/MerchantProfile.js +1 -1
  102. package/lib/module/components/MerchantProfile/MerchantProfile.js.map +1 -1
  103. package/lib/module/components/MoneyValue/MoneyValue.js +1 -1
  104. package/lib/module/components/MoneyValue/MoneyValue.js.map +1 -1
  105. package/lib/module/components/NavArrow/NavArrow.js +1 -1
  106. package/lib/module/components/NavArrow/NavArrow.js.map +1 -1
  107. package/lib/module/components/PageTitle/PageTitle.js +1 -1
  108. package/lib/module/components/PageTitle/PageTitle.js.map +1 -1
  109. package/lib/module/components/RadioButton/RadioButton.js +188 -0
  110. package/lib/module/components/RadioButton/RadioButton.js.map +1 -0
  111. package/lib/module/components/RadioButton/RadioButton.mdx +92 -0
  112. package/lib/module/components/Section/Section.js +4 -4
  113. package/lib/module/components/Section/Section.js.map +1 -1
  114. package/lib/module/components/TextInput/TextInput.js +1 -1
  115. package/lib/module/components/TextInput/TextInput.js.map +1 -1
  116. package/lib/module/components/TransactionDetails/TransactionDetails.js +2 -2
  117. package/lib/module/components/TransactionDetails/TransactionDetails.js.map +1 -1
  118. package/lib/module/components/UpiHandle/UpiHandle.js +4 -2
  119. package/lib/module/components/UpiHandle/UpiHandle.js.map +1 -1
  120. package/lib/module/components/index.js +1 -0
  121. package/lib/module/components/index.js.map +1 -1
  122. package/lib/module/design-tokens/figma-variables-resolver.js +2 -2
  123. package/lib/module/design-tokens/figma-variables-resolver.js.map +1 -2
  124. package/lib/module/icons/registry.js +1 -1
  125. package/lib/typescript/components/ActionFooter/ActionFooter.d.ts.map +1 -1
  126. package/lib/typescript/components/BottomNav/BottomNav.d.ts.map +1 -1
  127. package/lib/typescript/components/Carousel/Carousel.d.ts +48 -0
  128. package/lib/typescript/components/Carousel/Carousel.d.ts.map +1 -0
  129. package/lib/typescript/components/Drawer/Drawer.d.ts.map +1 -1
  130. package/lib/typescript/components/IconButton/IconButton.d.ts +1 -1
  131. package/lib/typescript/components/IconCapsule/IconCapsule.d.ts +1 -1
  132. package/lib/typescript/components/LazyList/LazyList.d.ts.map +1 -1
  133. package/lib/typescript/components/RadioButton/RadioButton.d.ts +30 -0
  134. package/lib/typescript/components/RadioButton/RadioButton.d.ts.map +1 -0
  135. package/lib/typescript/components/Section/Section.d.ts.map +1 -1
  136. package/lib/typescript/components/UpiHandle/UpiHandle.d.ts +4 -2
  137. package/lib/typescript/components/UpiHandle/UpiHandle.d.ts.map +1 -1
  138. package/lib/typescript/components/index.d.ts +1 -0
  139. package/lib/typescript/components/index.d.ts.map +1 -1
  140. package/lib/typescript/icons/registry.d.ts +1 -1
  141. package/package.json +2 -2
  142. package/src/assets/fonts/JioType Var.ttf +0 -0
  143. package/src/components/.token-metadata.json +72 -0
  144. package/src/components/Accordion/Accordion.tsx +1 -1
  145. package/src/components/ActionFooter/ActionFooter.tsx +2 -2
  146. package/src/components/AppBar/AppBar.tsx +2 -2
  147. package/src/components/Avatar/Avatar.tsx +2 -2
  148. package/src/components/Badge/Badge.tsx +1 -1
  149. package/src/components/BottomNav/BottomNav.tsx +2 -2
  150. package/src/components/BottomNavItem/BottomNavItem.tsx +2 -2
  151. package/src/components/Button/Button.tsx +1 -1
  152. package/src/components/Carousel/Carousel.mdx +154 -0
  153. package/src/components/Carousel/Carousel.tsx +472 -0
  154. package/src/components/Disclaimer/Disclaimer.tsx +1 -1
  155. package/src/components/Divider/Divider.tsx +2 -2
  156. package/src/components/Drawer/Drawer.tsx +11 -3
  157. package/src/components/FilterBar/FilterBar.tsx +2 -2
  158. package/src/components/IconButton/IconButton.tsx +2 -2
  159. package/src/components/IconCapsule/IconCapsule.tsx +2 -2
  160. package/src/components/LazyList/LazyList.tsx +2 -2
  161. package/src/components/ListGroup/ListGroup.tsx +1 -1
  162. package/src/components/ListItem/ListItem.tsx +5 -5
  163. package/src/components/MerchantProfile/MerchantProfile.tsx +1 -1
  164. package/src/components/MoneyValue/MoneyValue.tsx +1 -1
  165. package/src/components/NavArrow/NavArrow.tsx +1 -1
  166. package/src/components/PageTitle/PageTitle.tsx +1 -1
  167. package/src/components/RadioButton/RadioButton.mdx +92 -0
  168. package/src/components/RadioButton/RadioButton.tsx +226 -0
  169. package/src/components/Section/Section.tsx +4 -4
  170. package/src/components/TextInput/TextInput.tsx +1 -1
  171. package/src/components/TransactionDetails/TransactionDetails.tsx +2 -2
  172. package/src/components/UpiHandle/UpiHandle.tsx +6 -3
  173. package/src/components/index.ts +1 -0
  174. package/src/icons/registry.ts +1 -1
@@ -0,0 +1,333 @@
1
+ "use strict";
2
+
3
+ import React, { createContext, useContext, useRef, useState, useEffect, useCallback, useMemo } from 'react';
4
+ import { View, ScrollView, Animated, Pressable } from 'react-native';
5
+ import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
6
+
7
+ // ---------------------------------------------------------------------------
8
+ // Context
9
+ // ---------------------------------------------------------------------------
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ const CarouselContext = /*#__PURE__*/createContext({
12
+ modes: {},
13
+ activeIndex: 0,
14
+ totalItems: 0,
15
+ goTo: () => {},
16
+ goNext: () => {},
17
+ goPrev: () => {}
18
+ });
19
+
20
+ // ---------------------------------------------------------------------------
21
+ // Types
22
+ // ---------------------------------------------------------------------------
23
+
24
+ // ---------------------------------------------------------------------------
25
+ // Carousel
26
+ // ---------------------------------------------------------------------------
27
+
28
+ export function Carousel({
29
+ children,
30
+ modes = {},
31
+ autoPlay = false,
32
+ autoPlayInterval = 4000,
33
+ showPagination = true,
34
+ loop = true,
35
+ gap: gapProp,
36
+ itemWidth: itemWidthProp,
37
+ peekOffset: peekOffsetProp,
38
+ onIndexChange,
39
+ style
40
+ }) {
41
+ // ---- Token resolution ----
42
+ const tokenGap = parseFloat(getVariableByName('carousel/gap', modes) || '12');
43
+ const gap = gapProp ?? tokenGap;
44
+ const tokenPeekOffset = parseFloat(getVariableByName('carousel/peekOffset', modes) || '0');
45
+ const peekOffset = peekOffsetProp ?? tokenPeekOffset;
46
+ const containerPaddingH = parseFloat(getVariableByName('carousel/padding/horizontal', modes) || '0');
47
+ const containerPaddingV = parseFloat(getVariableByName('carousel/padding/vertical', modes) || '0');
48
+ const paginationGap = parseFloat(getVariableByName('carousel/pagination/gap', modes) || '12');
49
+
50
+ // ---- Refs & state ----
51
+ const scrollRef = useRef(null);
52
+ const [activeIndex, setActiveIndex] = useState(0);
53
+ const [containerWidth, setContainerWidth] = useState(0);
54
+ const autoPlayTimer = useRef(null);
55
+ const userInteracting = useRef(false);
56
+
57
+ // Flatten children so we can count items
58
+ const items = useMemo(() => React.Children.toArray(children).filter(React.isValidElement), [children]);
59
+ const totalItems = items.length;
60
+
61
+ // Effective item width: provided prop, or full container width minus peek offsets
62
+ const effectiveItemWidth = useMemo(() => {
63
+ if (itemWidthProp != null) return itemWidthProp;
64
+ if (containerWidth === 0) return 0;
65
+ // Full-width minus peekOffset on each side
66
+ return containerWidth - peekOffset * 2 - containerPaddingH * 2;
67
+ }, [itemWidthProp, containerWidth, peekOffset, containerPaddingH]);
68
+
69
+ // Snap interval = item width + gap
70
+ const snapInterval = effectiveItemWidth + gap;
71
+
72
+ // ---- Navigation helpers ----
73
+ const scrollToIndex = useCallback((index, animated = true) => {
74
+ if (totalItems === 0 || snapInterval === 0) return;
75
+ let targetIndex = index;
76
+ if (loop) {
77
+ targetIndex = (index % totalItems + totalItems) % totalItems;
78
+ } else {
79
+ targetIndex = Math.max(0, Math.min(index, totalItems - 1));
80
+ }
81
+ scrollRef.current?.scrollTo({
82
+ x: targetIndex * snapInterval,
83
+ animated
84
+ });
85
+ setActiveIndex(targetIndex);
86
+ onIndexChange?.(targetIndex);
87
+ }, [totalItems, snapInterval, loop, onIndexChange]);
88
+ const goTo = useCallback(index => scrollToIndex(index), [scrollToIndex]);
89
+ const goNext = useCallback(() => scrollToIndex(activeIndex + 1), [scrollToIndex, activeIndex]);
90
+ const goPrev = useCallback(() => scrollToIndex(activeIndex - 1), [scrollToIndex, activeIndex]);
91
+
92
+ // ---- Scroll event handler ----
93
+ const handleScroll = useCallback(event => {
94
+ if (snapInterval === 0) return;
95
+ const offsetX = event.nativeEvent.contentOffset.x;
96
+ const newIndex = Math.round(offsetX / snapInterval);
97
+ const clampedIndex = Math.max(0, Math.min(newIndex, totalItems - 1));
98
+ if (clampedIndex !== activeIndex) {
99
+ setActiveIndex(clampedIndex);
100
+ onIndexChange?.(clampedIndex);
101
+ }
102
+ }, [snapInterval, totalItems, activeIndex, onIndexChange]);
103
+
104
+ // ---- Auto-play ----
105
+ const clearAutoPlay = useCallback(() => {
106
+ if (autoPlayTimer.current != null) {
107
+ clearInterval(autoPlayTimer.current);
108
+ autoPlayTimer.current = null;
109
+ }
110
+ }, []);
111
+ const startAutoPlay = useCallback(() => {
112
+ if (!autoPlay || totalItems <= 1) return;
113
+ clearAutoPlay();
114
+ autoPlayTimer.current = setInterval(() => {
115
+ if (!userInteracting.current) {
116
+ setActiveIndex(prev => {
117
+ const next = loop ? (prev + 1) % totalItems : Math.min(prev + 1, totalItems - 1);
118
+ scrollRef.current?.scrollTo({
119
+ x: next * snapInterval,
120
+ animated: true
121
+ });
122
+ onIndexChange?.(next);
123
+ return next;
124
+ });
125
+ }
126
+ }, autoPlayInterval);
127
+ }, [autoPlay, totalItems, loop, snapInterval, autoPlayInterval, clearAutoPlay, onIndexChange]);
128
+ useEffect(() => {
129
+ startAutoPlay();
130
+ return clearAutoPlay;
131
+ }, [startAutoPlay, clearAutoPlay]);
132
+ const handleScrollBeginDrag = useCallback(() => {
133
+ userInteracting.current = true;
134
+ }, []);
135
+ const handleScrollEndDrag = useCallback(() => {
136
+ userInteracting.current = false;
137
+ // Reset autoplay timer after interaction
138
+ if (autoPlay) startAutoPlay();
139
+ }, [autoPlay, startAutoPlay]);
140
+
141
+ // ---- Layout ----
142
+ const handleLayout = useCallback(e => {
143
+ setContainerWidth(e.nativeEvent.layout.width);
144
+ }, []);
145
+
146
+ // ---- Context value ----
147
+ const contextValue = useMemo(() => ({
148
+ modes,
149
+ activeIndex,
150
+ totalItems,
151
+ goTo,
152
+ goNext,
153
+ goPrev
154
+ }), [modes, activeIndex, totalItems, goTo, goNext, goPrev]);
155
+
156
+ // ---- Render ----
157
+ const outerStyle = {
158
+ paddingVertical: containerPaddingV
159
+ };
160
+ const contentContainerStyle = {
161
+ paddingHorizontal: peekOffset + containerPaddingH,
162
+ gap,
163
+ // Align items to the start so snap works correctly
164
+ alignItems: 'flex-start'
165
+ };
166
+ return /*#__PURE__*/_jsx(CarouselContext.Provider, {
167
+ value: contextValue,
168
+ children: /*#__PURE__*/_jsxs(View, {
169
+ style: [outerStyle, style],
170
+ onLayout: handleLayout,
171
+ children: [/*#__PURE__*/_jsx(ScrollView, {
172
+ ref: scrollRef,
173
+ horizontal: true,
174
+ pagingEnabled: false,
175
+ showsHorizontalScrollIndicator: false,
176
+ decelerationRate: "fast",
177
+ snapToInterval: snapInterval > 0 ? snapInterval : undefined,
178
+ snapToAlignment: "start",
179
+ contentContainerStyle: contentContainerStyle,
180
+ onScroll: handleScroll,
181
+ scrollEventThrottle: 16,
182
+ onScrollBeginDrag: handleScrollBeginDrag,
183
+ onScrollEndDrag: handleScrollEndDrag,
184
+ children: items.map((child, index) => {
185
+ const itemStyle = {
186
+ width: effectiveItemWidth > 0 ? effectiveItemWidth : undefined
187
+ };
188
+
189
+ // Pass modes down to children
190
+ const childWithModes = /*#__PURE__*/React.isValidElement(child) ? /*#__PURE__*/React.cloneElement(child, {
191
+ modes: {
192
+ ...(child.props?.modes || {}),
193
+ ...modes
194
+ },
195
+ style: [itemStyle, child.props?.style]
196
+ }) : child;
197
+ return /*#__PURE__*/_jsx(View, {
198
+ style: itemStyle,
199
+ children: childWithModes
200
+ }, index);
201
+ })
202
+ }), showPagination && totalItems > 1 && /*#__PURE__*/_jsx(Pagination, {
203
+ modes: modes,
204
+ style: {
205
+ marginTop: paginationGap
206
+ }
207
+ })]
208
+ })
209
+ });
210
+ }
211
+
212
+ // ---------------------------------------------------------------------------
213
+ // Carousel.Item
214
+ // ---------------------------------------------------------------------------
215
+
216
+ /**
217
+ * Optional wrapper for carousel items. Not strictly required — any
218
+ * React node works as a direct child of `<Carousel>`.
219
+ */
220
+ export function Item({
221
+ children,
222
+ modes: _modes,
223
+ style
224
+ }) {
225
+ return /*#__PURE__*/_jsx(View, {
226
+ style: style,
227
+ children: children
228
+ });
229
+ }
230
+
231
+ // ---------------------------------------------------------------------------
232
+ // Carousel.Pagination
233
+ // ---------------------------------------------------------------------------
234
+
235
+ export function Pagination({
236
+ modes: propModes,
237
+ style
238
+ }) {
239
+ const {
240
+ modes: ctxModes,
241
+ activeIndex,
242
+ totalItems,
243
+ goTo
244
+ } = useContext(CarouselContext);
245
+ const modes = propModes || ctxModes || {};
246
+
247
+ // Token resolution for dots
248
+ const dotSize = parseFloat(getVariableByName('carousel/pagination/dotSize', modes) || '8');
249
+ const dotActiveWidth = parseFloat(getVariableByName('carousel/pagination/dotActiveWidth', modes) || '24');
250
+ const dotGap = parseFloat(getVariableByName('carousel/pagination/dotGap', modes) || '8');
251
+ const dotColor = getVariableByName('carousel/pagination/dotColor', modes) || 'rgba(255,255,255,0.35)';
252
+ const dotActiveColor = getVariableByName('carousel/pagination/dotActiveColor', modes) || '#ffffff';
253
+ const dotRadius = parseFloat(getVariableByName('carousel/pagination/dotRadius', modes) || '4');
254
+ const containerStyle = {
255
+ flexDirection: 'row',
256
+ justifyContent: 'center',
257
+ alignItems: 'center',
258
+ gap: dotGap
259
+ };
260
+ return /*#__PURE__*/_jsx(View, {
261
+ style: [containerStyle, style],
262
+ accessibilityRole: "tablist",
263
+ accessibilityLabel: undefined,
264
+ children: Array.from({
265
+ length: totalItems
266
+ }).map((_, i) => {
267
+ const isActive = i === activeIndex;
268
+ return /*#__PURE__*/_jsx(Pressable, {
269
+ onPress: () => goTo(i),
270
+ accessibilityRole: "tab",
271
+ accessibilityState: {
272
+ selected: isActive
273
+ },
274
+ accessibilityLabel: undefined,
275
+ children: /*#__PURE__*/_jsx(AnimatedDot, {
276
+ isActive: isActive,
277
+ size: dotSize,
278
+ activeWidth: dotActiveWidth,
279
+ radius: dotRadius,
280
+ color: dotColor,
281
+ activeColor: dotActiveColor
282
+ })
283
+ }, i);
284
+ })
285
+ });
286
+ }
287
+
288
+ // ---------------------------------------------------------------------------
289
+ // AnimatedDot (internal)
290
+ // ---------------------------------------------------------------------------
291
+
292
+ function AnimatedDot({
293
+ isActive,
294
+ size,
295
+ activeWidth,
296
+ radius,
297
+ color,
298
+ activeColor
299
+ }) {
300
+ const animValue = useRef(new Animated.Value(isActive ? 1 : 0)).current;
301
+ useEffect(() => {
302
+ Animated.timing(animValue, {
303
+ toValue: isActive ? 1 : 0,
304
+ duration: 250,
305
+ useNativeDriver: false
306
+ }).start();
307
+ }, [isActive, animValue]);
308
+ const width = animValue.interpolate({
309
+ inputRange: [0, 1],
310
+ outputRange: [size, activeWidth]
311
+ });
312
+ const backgroundColor = animValue.interpolate({
313
+ inputRange: [0, 1],
314
+ outputRange: [color, activeColor]
315
+ });
316
+ return /*#__PURE__*/_jsx(Animated.View, {
317
+ style: {
318
+ width,
319
+ height: size,
320
+ borderRadius: radius,
321
+ backgroundColor
322
+ }
323
+ });
324
+ }
325
+
326
+ // ---------------------------------------------------------------------------
327
+ // Attach sub-components
328
+ // ---------------------------------------------------------------------------
329
+
330
+ Carousel.Item = Item;
331
+ Carousel.Pagination = Pagination;
332
+ export default Carousel;
333
+ //# sourceMappingURL=Carousel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createContext","useContext","useRef","useState","useEffect","useCallback","useMemo","View","ScrollView","Animated","Pressable","getVariableByName","jsx","_jsx","jsxs","_jsxs","CarouselContext","modes","activeIndex","totalItems","goTo","goNext","goPrev","Carousel","children","autoPlay","autoPlayInterval","showPagination","loop","gap","gapProp","itemWidth","itemWidthProp","peekOffset","peekOffsetProp","onIndexChange","style","tokenGap","parseFloat","tokenPeekOffset","containerPaddingH","containerPaddingV","paginationGap","scrollRef","setActiveIndex","containerWidth","setContainerWidth","autoPlayTimer","userInteracting","items","Children","toArray","filter","isValidElement","length","effectiveItemWidth","snapInterval","scrollToIndex","index","animated","targetIndex","Math","max","min","current","scrollTo","x","handleScroll","event","offsetX","nativeEvent","contentOffset","newIndex","round","clampedIndex","clearAutoPlay","clearInterval","startAutoPlay","setInterval","prev","next","handleScrollBeginDrag","handleScrollEndDrag","handleLayout","e","layout","width","contextValue","outerStyle","paddingVertical","contentContainerStyle","paddingHorizontal","alignItems","Provider","value","onLayout","ref","horizontal","pagingEnabled","showsHorizontalScrollIndicator","decelerationRate","snapToInterval","undefined","snapToAlignment","onScroll","scrollEventThrottle","onScrollBeginDrag","onScrollEndDrag","map","child","itemStyle","childWithModes","cloneElement","props","Pagination","marginTop","Item","_modes","propModes","ctxModes","dotSize","dotActiveWidth","dotGap","dotColor","dotActiveColor","dotRadius","containerStyle","flexDirection","justifyContent","accessibilityRole","accessibilityLabel","Array","from","_","i","isActive","onPress","accessibilityState","selected","AnimatedDot","size","activeWidth","radius","color","activeColor","animValue","Value","timing","toValue","duration","useNativeDriver","start","interpolate","inputRange","outputRange","backgroundColor","height","borderRadius"],"sourceRoot":"../../../../src","sources":["components/Carousel/Carousel.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,154 @@
1
+ import { Meta, Story, Canvas, Controls } from '@storybook/blocks';
2
+ import * as CarouselStories from './Carousel.stories';
3
+ import Carousel from './Carousel';
4
+ import { AnatomySection, UsageConstraintsSection } from '../docs/DocSections';
5
+ import { View, Image, Text } from 'react-native';
6
+
7
+ <Meta of={CarouselStories} />
8
+
9
+ ## Available Collections and Modes
10
+
11
+ This component does not use any design token collections with multiple modes.
12
+ ## Usage
13
+
14
+ <Canvas>
15
+ <Story of={CarouselStories.Default} />
16
+ </Canvas>
17
+
18
+ ### Example Usage
19
+
20
+ ```tsx
21
+ import { Image, View } from 'react-native';
22
+ import Carousel from './components/Carousel/Carousel';
23
+ import MediaCard from './components/MediaCard/MediaCard';
24
+ import Avatar from './components/Avatar/Avatar';
25
+ import Button from './components/Button/Button';
26
+
27
+ function MyCarousel() {
28
+ const modes = {
29
+ 'Contrast Context': 'on dark',
30
+ 'Colors Router': 'POC',
31
+ };
32
+
33
+ return (
34
+ <Carousel
35
+ modes={modes}
36
+ autoPlay
37
+ autoPlayInterval={4000}
38
+ showPagination
39
+ loop
40
+ >
41
+ <Carousel.Item>
42
+ <MediaCard
43
+ modes={modes}
44
+ media={
45
+ <Image
46
+ source={{ uri: 'https://picsum.photos/400/400' }}
47
+ style={{ width: '100%', height: '100%' }}
48
+ resizeMode="cover"
49
+ />
50
+ }
51
+ >
52
+ <MediaCard.Header>
53
+ <MediaCard.Title>Huge Title</MediaCard.Title>
54
+ </MediaCard.Header>
55
+ <MediaCard.Footer>
56
+ <Avatar
57
+ initials="JS"
58
+ modes={{ 'Avatar / Size': 'S' }}
59
+ />
60
+ <View style={{ flex: 1 }}>
61
+ <MediaCard.FooterTitle>Subscribed</MediaCard.FooterTitle>
62
+ <MediaCard.FooterSubtitle>Active now</MediaCard.FooterSubtitle>
63
+ </View>
64
+ <Button
65
+ label="Open"
66
+ modes={{ 'Button / Size': 'S' }}
67
+ onPress={() => console.log('Open')}
68
+ />
69
+ </MediaCard.Footer>
70
+ </MediaCard>
71
+ </Carousel.Item>
72
+
73
+ <Carousel.Item>
74
+ <MediaCard
75
+ modes={modes}
76
+ media={
77
+ <Image
78
+ source={{ uri: 'https://picsum.photos/seed/two/400/400' }}
79
+ style={{ width: '100%', height: '100%' }}
80
+ resizeMode="cover"
81
+ />
82
+ }
83
+ >
84
+ <MediaCard.Header>
85
+ <MediaCard.Title>Discover</MediaCard.Title>
86
+ </MediaCard.Header>
87
+ <MediaCard.Footer>
88
+ <MediaCard.FooterTitle>Mutual Fund Insights</MediaCard.FooterTitle>
89
+ </MediaCard.Footer>
90
+ </MediaCard>
91
+ </Carousel.Item>
92
+ </Carousel>
93
+ );
94
+ }
95
+ ```
96
+
97
+ ### Peek Cards (adjacent items visible)
98
+
99
+ <Canvas>
100
+ <Story of={CarouselStories.PeekCards} />
101
+ </Canvas>
102
+
103
+ ### Auto-play
104
+
105
+ <Canvas>
106
+ <Story of={CarouselStories.AutoPlay} />
107
+ </Canvas>
108
+
109
+ ### Fixed-width items
110
+
111
+ <Canvas>
112
+ <Story of={CarouselStories.FixedWidth} />
113
+ </Canvas>
114
+
115
+ <AnatomySection>
116
+ <ul>
117
+ <li><strong>Container</strong> — Outer <code>View</code> that measures width and holds the scroll track + pagination.</li>
118
+ <li><strong>ScrollView Track</strong> — Horizontal <code>ScrollView</code> with snap-to-interval behavior and optional CSS scroll-snap on web.</li>
119
+ <li><strong>Carousel.Item</strong> — Optional wrapper for each slide. Any React node works as a direct child.</li>
120
+ <li><strong>Pagination</strong> — Row of animated dots. Active dot widens and changes color. Each dot is pressable to navigate.</li>
121
+ </ul>
122
+ </AnatomySection>
123
+
124
+ <UsageConstraintsSection>
125
+ <ul>
126
+ <li>Each child of <code>Carousel</code> becomes one slide. Use <code>Carousel.Item</code> for semantic clarity.</li>
127
+ <li>When <code>itemWidth</code> is not provided, items expand to fill the container width minus <code>peekOffset</code>.</li>
128
+ <li>Auto-play pauses automatically while the user is dragging.</li>
129
+ <li>The <code>modes</code> prop is forwarded to all children via <code>cloneElement</code>.</li>
130
+ <li>On web, CSS <code>scroll-snap-type</code> is applied for native-feeling snap behavior.</li>
131
+ </ul>
132
+ </UsageConstraintsSection>
133
+
134
+ ## Props
135
+
136
+ <Controls />
137
+
138
+ ## Design Tokens
139
+
140
+ This component uses the following design tokens, resolved through `getVariableByName`:
141
+
142
+ - **`carousel/gap`**
143
+ - **`carousel/padding/horizontal`**
144
+ - **`carousel/padding/vertical`**
145
+ - **`carousel/pagination/dotActiveColor`**
146
+ - **`carousel/pagination/dotActiveWidth`**
147
+ - **`carousel/pagination/dotColor`**
148
+ - **`carousel/pagination/dotGap`**
149
+ - **`carousel/pagination/dotRadius`**
150
+ - **`carousel/pagination/dotSize`**
151
+ - **`carousel/pagination/gap`**
152
+ - **`carousel/peekOffset`**
153
+
154
+ All tokens support mode-based theming through the `modes` prop.
@@ -70,7 +70,7 @@ function Disclaimer({
70
70
  return /*#__PURE__*/_jsx(View, {
71
71
  style: [containerStyle, style],
72
72
  accessibilityRole: "text",
73
- accessibilityLabel: defaultAccessibilityLabel,
73
+ accessibilityLabel: undefined,
74
74
  accessibilityHint: accessibilityHint,
75
75
  ...rest,
76
76
  children: /*#__PURE__*/_jsxs(Text, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","Text","getVariableByName","useTokens","jsxs","_jsxs","jsx","_jsx","Disclaimer","disclaimer","modes","propModes","style","textStyle","accessibilityLabel","accessibilityHint","rest","globalModes","color","fontSize","lineHeight","fontFamily","fontWeightRaw","fontWeight","toString","baseTextStyle","textAlign","containerStyle","alignSelf","alignItems","justifyContent","maxWidth","defaultAccessibilityLabel","accessibilityRole","children","accessibilityElementsHidden","importantForAccessibility"],"sourceRoot":"../../../../src","sources":["components/Disclaimer/Disclaimer.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAwD,cAAc;AACzF,SAASC,iBAAiB,QAAQ,8CAA8C;AAChF,SAASC,SAAS,QAAQ,sCAAsC;AAAA,SAAAC,IAAA,IAAAC,KAAA,EAAAC,GAAA,IAAAC,IAAA;AAWhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,UAAUA,CAAC;EAClBC,UAAU,GAAG,oEAAoE;EACjFC,KAAK,EAAEC,SAAS,GAAG,CAAC,CAAC;EACrBC,KAAK;EACLC,SAAS;EACTC,kBAAkB;EAClBC,iBAAiB;EACjB,GAAGC;AACY,CAAC,EAAE;EAClB,MAAM;IAAEN,KAAK,EAAEO;EAAY,CAAC,GAAGd,SAAS,CAAC,CAAC;EAC1C,MAAMO,KAAK,GAAG;IAAE,GAAGO,WAAW;IAAE,GAAGN;EAAU,CAAC;EAC9C;EACA,MAAMO,KAAK,GAAGhB,iBAAiB,CAAC,kBAAkB,EAAEQ,KAAK,CAAC,IAAI,SAAS;EACvE,MAAMS,QAAQ,GACZjB,iBAAiB,CAAC,2BAA2B,EAAEQ,KAAK,CAAC,IAAI,EAAE;EAC7D,MAAMU,UAAU,GACdlB,iBAAiB,CAAC,6BAA6B,EAAEQ,KAAK,CAAC,IAAI,EAAE;EAC/D,MAAMW,UAAU,GACdnB,iBAAiB,CAAC,6BAA6B,EAAEQ,KAAK,CAAC,IAAI,QAAQ;EACrE,MAAMY,aAAa,GACjBpB,iBAAiB,CAAC,6BAA6B,EAAEQ,KAAK,CAAC,IAAI,GAAG;EAChE,MAAMa,UAAU,GACd,OAAOD,aAAa,KAAK,QAAQ,GAC7BA,aAAa,CAACE,QAAQ,CAAC,CAAC,GACxBF,aAAa;EAEnB,MAAMG,aAAwB,GAAG;IAC/BP,KAAK;IACLC,QAAQ;IACRC,UAAU;IACVC,UAAU;IACVE,UAAU;IACVG,SAAS,EAAE;EACb,CAAC;EAED,MAAMC,cAAyB,GAAG;IAChCC,SAAS,EAAE,QAAQ;IACnBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxB;IACAC,QAAQ,EAAE;EACZ,CAAC;;EAED;EACA,MAAMC,yBAAyB,GAAGlB,kBAAkB,IAAIL,UAAU;EAElE,oBACEF,IAAA,CAACP,IAAI;IACHY,KAAK,EAAE,CAACe,cAAc,EAAEf,KAAK,CAAE;IAC/BqB,iBAAiB,EAAC,MAAM;IACxBnB,kBAAkB,EAAEkB,yBAA0B;IAC9CjB,iBAAiB,EAAEA,iBAAkB;IAAA,GACjCC,IAAI;IAAAkB,QAAA,eAER7B,KAAA,CAACJ,IAAI;MACHW,KAAK,EAAE,CAACa,aAAa,EAAEZ,SAAS,CAAE;MAClCsB,2BAA2B,EAAE,IAAK;MAClCC,yBAAyB,EAAC,IAAI;MAAAF,QAAA,GAE7BzB,UAAU,EACV,IAAI;IAAA,CACD;EAAC,CACH,CAAC;AAEX;AAEA,eAAeD,UAAU","ignoreList":[]}
1
+ {"version":3,"names":["React","View","Text","getVariableByName","useTokens","jsxs","_jsxs","jsx","_jsx","Disclaimer","disclaimer","modes","propModes","style","textStyle","accessibilityLabel","accessibilityHint","rest","globalModes","color","fontSize","lineHeight","fontFamily","fontWeightRaw","fontWeight","toString","baseTextStyle","textAlign","containerStyle","alignSelf","alignItems","justifyContent","maxWidth","defaultAccessibilityLabel","accessibilityRole","undefined","children","accessibilityElementsHidden","importantForAccessibility"],"sourceRoot":"../../../../src","sources":["components/Disclaimer/Disclaimer.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,EAAEC,IAAI,QAAwD,cAAc;AACzF,SAASC,iBAAiB,QAAQ,8CAA8C;AAChF,SAASC,SAAS,QAAQ,sCAAsC;AAAA,SAAAC,IAAA,IAAAC,KAAA,EAAAC,GAAA,IAAAC,IAAA;AAWhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,UAAUA,CAAC;EAClBC,UAAU,GAAG,oEAAoE;EACjFC,KAAK,EAAEC,SAAS,GAAG,CAAC,CAAC;EACrBC,KAAK;EACLC,SAAS;EACTC,kBAAkB;EAClBC,iBAAiB;EACjB,GAAGC;AACY,CAAC,EAAE;EAClB,MAAM;IAAEN,KAAK,EAAEO;EAAY,CAAC,GAAGd,SAAS,CAAC,CAAC;EAC1C,MAAMO,KAAK,GAAG;IAAE,GAAGO,WAAW;IAAE,GAAGN;EAAU,CAAC;EAC9C;EACA,MAAMO,KAAK,GAAGhB,iBAAiB,CAAC,kBAAkB,EAAEQ,KAAK,CAAC,IAAI,SAAS;EACvE,MAAMS,QAAQ,GACZjB,iBAAiB,CAAC,2BAA2B,EAAEQ,KAAK,CAAC,IAAI,EAAE;EAC7D,MAAMU,UAAU,GACdlB,iBAAiB,CAAC,6BAA6B,EAAEQ,KAAK,CAAC,IAAI,EAAE;EAC/D,MAAMW,UAAU,GACdnB,iBAAiB,CAAC,6BAA6B,EAAEQ,KAAK,CAAC,IAAI,QAAQ;EACrE,MAAMY,aAAa,GACjBpB,iBAAiB,CAAC,6BAA6B,EAAEQ,KAAK,CAAC,IAAI,GAAG;EAChE,MAAMa,UAAU,GACd,OAAOD,aAAa,KAAK,QAAQ,GAC7BA,aAAa,CAACE,QAAQ,CAAC,CAAC,GACxBF,aAAa;EAEnB,MAAMG,aAAwB,GAAG;IAC/BP,KAAK;IACLC,QAAQ;IACRC,UAAU;IACVC,UAAU;IACVE,UAAU;IACVG,SAAS,EAAE;EACb,CAAC;EAED,MAAMC,cAAyB,GAAG;IAChCC,SAAS,EAAE,QAAQ;IACnBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxB;IACAC,QAAQ,EAAE;EACZ,CAAC;;EAED;EACA,MAAMC,yBAAyB,GAAGlB,kBAAkB,IAAIL,UAAU;EAElE,oBACEF,IAAA,CAACP,IAAI;IACHY,KAAK,EAAE,CAACe,cAAc,EAAEf,KAAK,CAAE;IAC/BqB,iBAAiB,EAAC,MAAM;IACxBnB,kBAAkB,EAAEoB,SAAU;IAC9BnB,iBAAiB,EAAEA,iBAAkB;IAAA,GACjCC,IAAI;IAAAmB,QAAA,eAER9B,KAAA,CAACJ,IAAI;MACHW,KAAK,EAAE,CAACa,aAAa,EAAEZ,SAAS,CAAE;MAClCuB,2BAA2B,EAAE,IAAK;MAClCC,yBAAyB,EAAC,IAAI;MAAAF,QAAA,GAE7B1B,UAAU,EACV,IAAI;IAAA,CACD;EAAC,CACH,CAAC;AAEX;AAEA,eAAeD,UAAU","ignoreList":[]}
@@ -33,7 +33,7 @@ function Divider({
33
33
  direction = 'horizontal',
34
34
  modes = {},
35
35
  style,
36
- accessibilityLabel = 'Divider'
36
+ accessibilityLabel = undefined
37
37
  }) {
38
38
  // Resolve design tokens
39
39
  const size = getVariableByName('divider/size', modes) ?? 1;
@@ -51,7 +51,7 @@ function Divider({
51
51
  return /*#__PURE__*/_jsx(View, {
52
52
  style: [dividerStyle, style],
53
53
  accessibilityRole: "none",
54
- accessibilityLabel: accessibilityLabel
54
+ accessibilityLabel: undefined
55
55
  });
56
56
  }
57
57
  export default Divider;
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","getVariableByName","jsx","_jsx","Divider","direction","modes","style","accessibilityLabel","size","color","isVertical","dividerStyle","width","backgroundColor","alignSelf","height","accessibilityRole"],"sourceRoot":"../../../../src","sources":["components/Divider/Divider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,IAAI,QAGC,cAAc;AACrB,SAASC,iBAAiB,QAAQ,8CAA8C;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAyBhF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,OAAOA,CAAC;EACfC,SAAS,GAAG,YAAY;EACxBC,KAAK,GAAG,CAAC,CAAC;EACVC,KAAK;EACLC,kBAAkB,GAAG;AACT,CAAC,EAAE;EACf;EACA,MAAMC,IAAI,GAAGR,iBAAiB,CAAC,cAAc,EAAEK,KAAK,CAAC,IAAI,CAAC;EAC1D,MAAMI,KAAK,GAAGT,iBAAiB,CAAC,eAAe,EAAEK,KAAK,CAAC,IAAI,SAAS;EAEpE,MAAMK,UAAU,GAAGN,SAAS,KAAK,UAAU;EAE3C,MAAMO,YAAuB,GAAGD,UAAU,GACtC;IACEE,KAAK,EAAEJ,IAAI;IACXK,eAAe,EAAEJ,KAAK;IACtBK,SAAS,EAAE;EACb,CAAC,GACD;IACEC,MAAM,EAAEP,IAAI;IACZK,eAAe,EAAEJ,KAAK;IACtBK,SAAS,EAAE;EACb,CAAC;EAEL,oBACEZ,IAAA,CAACH,IAAI;IACHO,KAAK,EAAE,CAACK,YAAY,EAAEL,KAAK,CAAE;IAC7BU,iBAAiB,EAAC,MAAM;IACxBT,kBAAkB,EAAEA;EAAmB,CACxC,CAAC;AAEN;AAEA,eAAeJ,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["React","View","getVariableByName","jsx","_jsx","Divider","direction","modes","style","accessibilityLabel","undefined","size","color","isVertical","dividerStyle","width","backgroundColor","alignSelf","height","accessibilityRole"],"sourceRoot":"../../../../src","sources":["components/Divider/Divider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,IAAI,QAGC,cAAc;AACrB,SAASC,iBAAiB,QAAQ,8CAA8C;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAyBhF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,OAAOA,CAAC;EACfC,SAAS,GAAG,YAAY;EACxBC,KAAK,GAAG,CAAC,CAAC;EACVC,KAAK;EACLC,kBAAkB,GAAGC;AACT,CAAC,EAAE;EACf;EACA,MAAMC,IAAI,GAAGT,iBAAiB,CAAC,cAAc,EAAEK,KAAK,CAAC,IAAI,CAAC;EAC1D,MAAMK,KAAK,GAAGV,iBAAiB,CAAC,eAAe,EAAEK,KAAK,CAAC,IAAI,SAAS;EAEpE,MAAMM,UAAU,GAAGP,SAAS,KAAK,UAAU;EAE3C,MAAMQ,YAAuB,GAAGD,UAAU,GACtC;IACEE,KAAK,EAAEJ,IAAI;IACXK,eAAe,EAAEJ,KAAK;IACtBK,SAAS,EAAE;EACb,CAAC,GACD;IACEC,MAAM,EAAEP,IAAI;IACZK,eAAe,EAAEJ,KAAK;IACtBK,SAAS,EAAE;EACb,CAAC;EAEL,oBACEb,IAAA,CAACH,IAAI;IACHO,KAAK,EAAE,CAACM,YAAY,EAAEN,KAAK,CAAE;IAC7BW,iBAAiB,EAAC,MAAM;IACxBV,kBAAkB,EAAEC;EAAU,CAC/B,CAAC;AAEN;AAEA,eAAeL,OAAO","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  import React, { useCallback, useEffect, useState, useRef } from 'react';
4
4
  import { StyleSheet, Text, useWindowDimensions, View } from 'react-native';
5
5
  import { Gesture, GestureDetector, GestureHandlerRootView, ScrollView } from 'react-native-gesture-handler';
6
- import Animated, { runOnJS, useAnimatedScrollHandler, useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
6
+ import Animated, { runOnJS, useAnimatedProps, useAnimatedScrollHandler, useAnimatedStyle, useSharedValue, withSpring } from 'react-native-reanimated';
7
7
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
8
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
9
  const AnimatedScrollView = Animated.createAnimatedComponent(ScrollView);
@@ -78,6 +78,13 @@ function Drawer({
78
78
  const scrollY = useSharedValue(0);
79
79
  const scrollRef = useRef(null);
80
80
 
81
+ // Dynamically disable top bounce so a downward swipe at the top of
82
+ // the content drags the whole drawer instead of rubber-banding the
83
+ // scroll view. Bottom bounce is preserved when the user has scrolled.
84
+ const animatedScrollProps = useAnimatedProps(() => ({
85
+ bounces: scrollY.value > 1
86
+ }));
87
+
81
88
  // We need to know if we are currently dragging the drawer or scrolling the content
82
89
  // to prevent conflict.
83
90
  const isDrawerActive = useSharedValue(false);
@@ -233,7 +240,7 @@ function Drawer({
233
240
  }, sheetStyle, animatedStyle],
234
241
  accessible: true,
235
242
  accessibilityRole: 'dialog',
236
- accessibilityLabel: defaultAccessibilityLabel,
243
+ accessibilityLabel: undefined,
237
244
  accessibilityHint: accessibilityHint || 'Swipe up to expand, swipe down to collapse',
238
245
  children: [/*#__PURE__*/_jsx(View, {
239
246
  style: [styles.handleArea, !title && !header && {
@@ -266,8 +273,8 @@ function Drawer({
266
273
  alignItems: 'stretch'
267
274
  }, contentContainerStyle],
268
275
  showsVerticalScrollIndicator: showsVerticalScrollIndicator,
269
- bounces: true,
270
- alwaysBounceVertical: true,
276
+ animatedProps: animatedScrollProps,
277
+ alwaysBounceVertical: false,
271
278
  overScrollMode: "always",
272
279
  onScroll: useAnimatedScrollHandler(event => {
273
280
  scrollY.value = event.contentOffset.y;