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.
- package/lib/commonjs/assets/fonts/JioType Var.ttf +0 -0
- package/lib/commonjs/components/Accordion/Accordion.js +1 -1
- package/lib/commonjs/components/Accordion/Accordion.js.map +1 -1
- package/lib/commonjs/components/ActionFooter/ActionFooter.js +2 -2
- package/lib/commonjs/components/ActionFooter/ActionFooter.js.map +1 -1
- package/lib/commonjs/components/AppBar/AppBar.js +2 -2
- package/lib/commonjs/components/AppBar/AppBar.js.map +1 -1
- package/lib/commonjs/components/Avatar/Avatar.js +2 -2
- package/lib/commonjs/components/Avatar/Avatar.js.map +1 -1
- package/lib/commonjs/components/Badge/Badge.js +1 -1
- package/lib/commonjs/components/Badge/Badge.js.map +1 -1
- package/lib/commonjs/components/BottomNav/BottomNav.js +2 -2
- package/lib/commonjs/components/BottomNav/BottomNav.js.map +1 -1
- package/lib/commonjs/components/BottomNavItem/BottomNavItem.js +2 -2
- package/lib/commonjs/components/BottomNavItem/BottomNavItem.js.map +1 -1
- package/lib/commonjs/components/Button/Button.js +1 -1
- package/lib/commonjs/components/Button/Button.js.map +1 -1
- package/lib/commonjs/components/Carousel/Carousel.js +341 -0
- package/lib/commonjs/components/Carousel/Carousel.js.map +1 -0
- package/lib/commonjs/components/Carousel/Carousel.mdx +154 -0
- package/lib/commonjs/components/Disclaimer/Disclaimer.js +1 -1
- package/lib/commonjs/components/Disclaimer/Disclaimer.js.map +1 -1
- package/lib/commonjs/components/Divider/Divider.js +2 -2
- package/lib/commonjs/components/Divider/Divider.js.map +1 -1
- package/lib/commonjs/components/Drawer/Drawer.js +10 -3
- package/lib/commonjs/components/Drawer/Drawer.js.map +1 -1
- package/lib/commonjs/components/FilterBar/FilterBar.js +2 -2
- package/lib/commonjs/components/FilterBar/FilterBar.js.map +1 -1
- package/lib/commonjs/components/IconButton/IconButton.js +2 -2
- package/lib/commonjs/components/IconButton/IconButton.js.map +1 -1
- package/lib/commonjs/components/IconCapsule/IconCapsule.js +2 -2
- package/lib/commonjs/components/IconCapsule/IconCapsule.js.map +1 -1
- package/lib/commonjs/components/LazyList/LazyList.js +2 -2
- package/lib/commonjs/components/LazyList/LazyList.js.map +1 -1
- package/lib/commonjs/components/ListGroup/ListGroup.js +1 -1
- package/lib/commonjs/components/ListGroup/ListGroup.js.map +1 -1
- package/lib/commonjs/components/ListItem/ListItem.js +5 -5
- package/lib/commonjs/components/ListItem/ListItem.js.map +1 -1
- package/lib/commonjs/components/MerchantProfile/MerchantProfile.js +1 -1
- package/lib/commonjs/components/MerchantProfile/MerchantProfile.js.map +1 -1
- package/lib/commonjs/components/MoneyValue/MoneyValue.js +1 -1
- package/lib/commonjs/components/MoneyValue/MoneyValue.js.map +1 -1
- package/lib/commonjs/components/NavArrow/NavArrow.js +1 -1
- package/lib/commonjs/components/NavArrow/NavArrow.js.map +1 -1
- package/lib/commonjs/components/PageTitle/PageTitle.js +1 -1
- package/lib/commonjs/components/PageTitle/PageTitle.js.map +1 -1
- package/lib/commonjs/components/RadioButton/RadioButton.js +194 -0
- package/lib/commonjs/components/RadioButton/RadioButton.js.map +1 -0
- package/lib/commonjs/components/RadioButton/RadioButton.mdx +92 -0
- package/lib/commonjs/components/Section/Section.js +4 -4
- package/lib/commonjs/components/Section/Section.js.map +1 -1
- package/lib/commonjs/components/TextInput/TextInput.js +1 -1
- package/lib/commonjs/components/TextInput/TextInput.js.map +1 -1
- package/lib/commonjs/components/TransactionDetails/TransactionDetails.js +2 -2
- package/lib/commonjs/components/TransactionDetails/TransactionDetails.js.map +1 -1
- package/lib/commonjs/components/UpiHandle/UpiHandle.js +4 -2
- package/lib/commonjs/components/UpiHandle/UpiHandle.js.map +1 -1
- package/lib/commonjs/components/index.js +7 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/design-tokens/figma-variables-resolver.js +9 -3
- package/lib/commonjs/design-tokens/figma-variables-resolver.js.map +2 -1
- package/lib/commonjs/icons/registry.js +1 -1
- package/lib/module/assets/fonts/JioType Var.ttf +0 -0
- package/lib/module/components/Accordion/Accordion.js +1 -1
- package/lib/module/components/Accordion/Accordion.js.map +1 -1
- package/lib/module/components/ActionFooter/ActionFooter.js +2 -2
- package/lib/module/components/ActionFooter/ActionFooter.js.map +1 -1
- package/lib/module/components/AppBar/AppBar.js +2 -2
- package/lib/module/components/AppBar/AppBar.js.map +1 -1
- package/lib/module/components/Avatar/Avatar.js +2 -2
- package/lib/module/components/Avatar/Avatar.js.map +1 -1
- package/lib/module/components/Badge/Badge.js +1 -1
- package/lib/module/components/Badge/Badge.js.map +1 -1
- package/lib/module/components/BottomNav/BottomNav.js +2 -2
- package/lib/module/components/BottomNav/BottomNav.js.map +1 -1
- package/lib/module/components/BottomNavItem/BottomNavItem.js +2 -2
- package/lib/module/components/BottomNavItem/BottomNavItem.js.map +1 -1
- package/lib/module/components/Button/Button.js +1 -1
- package/lib/module/components/Button/Button.js.map +1 -1
- package/lib/module/components/Carousel/Carousel.js +333 -0
- package/lib/module/components/Carousel/Carousel.js.map +1 -0
- package/lib/module/components/Carousel/Carousel.mdx +154 -0
- package/lib/module/components/Disclaimer/Disclaimer.js +1 -1
- package/lib/module/components/Disclaimer/Disclaimer.js.map +1 -1
- package/lib/module/components/Divider/Divider.js +2 -2
- package/lib/module/components/Divider/Divider.js.map +1 -1
- package/lib/module/components/Drawer/Drawer.js +11 -4
- package/lib/module/components/Drawer/Drawer.js.map +1 -1
- package/lib/module/components/FilterBar/FilterBar.js +2 -2
- package/lib/module/components/FilterBar/FilterBar.js.map +1 -1
- package/lib/module/components/IconButton/IconButton.js +2 -2
- package/lib/module/components/IconButton/IconButton.js.map +1 -1
- package/lib/module/components/IconCapsule/IconCapsule.js +2 -2
- package/lib/module/components/IconCapsule/IconCapsule.js.map +1 -1
- package/lib/module/components/LazyList/LazyList.js +2 -2
- package/lib/module/components/LazyList/LazyList.js.map +1 -1
- package/lib/module/components/ListGroup/ListGroup.js +1 -1
- package/lib/module/components/ListGroup/ListGroup.js.map +1 -1
- package/lib/module/components/ListItem/ListItem.js +5 -5
- package/lib/module/components/ListItem/ListItem.js.map +1 -1
- package/lib/module/components/MerchantProfile/MerchantProfile.js +1 -1
- package/lib/module/components/MerchantProfile/MerchantProfile.js.map +1 -1
- package/lib/module/components/MoneyValue/MoneyValue.js +1 -1
- package/lib/module/components/MoneyValue/MoneyValue.js.map +1 -1
- package/lib/module/components/NavArrow/NavArrow.js +1 -1
- package/lib/module/components/NavArrow/NavArrow.js.map +1 -1
- package/lib/module/components/PageTitle/PageTitle.js +1 -1
- package/lib/module/components/PageTitle/PageTitle.js.map +1 -1
- package/lib/module/components/RadioButton/RadioButton.js +188 -0
- package/lib/module/components/RadioButton/RadioButton.js.map +1 -0
- package/lib/module/components/RadioButton/RadioButton.mdx +92 -0
- package/lib/module/components/Section/Section.js +4 -4
- package/lib/module/components/Section/Section.js.map +1 -1
- package/lib/module/components/TextInput/TextInput.js +1 -1
- package/lib/module/components/TextInput/TextInput.js.map +1 -1
- package/lib/module/components/TransactionDetails/TransactionDetails.js +2 -2
- package/lib/module/components/TransactionDetails/TransactionDetails.js.map +1 -1
- package/lib/module/components/UpiHandle/UpiHandle.js +4 -2
- package/lib/module/components/UpiHandle/UpiHandle.js.map +1 -1
- package/lib/module/components/index.js +1 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/design-tokens/figma-variables-resolver.js +2 -2
- package/lib/module/design-tokens/figma-variables-resolver.js.map +1 -2
- package/lib/module/icons/registry.js +1 -1
- package/lib/typescript/components/ActionFooter/ActionFooter.d.ts.map +1 -1
- package/lib/typescript/components/BottomNav/BottomNav.d.ts.map +1 -1
- package/lib/typescript/components/Carousel/Carousel.d.ts +48 -0
- package/lib/typescript/components/Carousel/Carousel.d.ts.map +1 -0
- package/lib/typescript/components/Drawer/Drawer.d.ts.map +1 -1
- package/lib/typescript/components/IconButton/IconButton.d.ts +1 -1
- package/lib/typescript/components/IconCapsule/IconCapsule.d.ts +1 -1
- package/lib/typescript/components/LazyList/LazyList.d.ts.map +1 -1
- package/lib/typescript/components/RadioButton/RadioButton.d.ts +30 -0
- package/lib/typescript/components/RadioButton/RadioButton.d.ts.map +1 -0
- package/lib/typescript/components/Section/Section.d.ts.map +1 -1
- package/lib/typescript/components/UpiHandle/UpiHandle.d.ts +4 -2
- package/lib/typescript/components/UpiHandle/UpiHandle.d.ts.map +1 -1
- package/lib/typescript/components/index.d.ts +1 -0
- package/lib/typescript/components/index.d.ts.map +1 -1
- package/lib/typescript/icons/registry.d.ts +1 -1
- package/package.json +2 -2
- package/src/assets/fonts/JioType Var.ttf +0 -0
- package/src/components/.token-metadata.json +72 -0
- package/src/components/Accordion/Accordion.tsx +1 -1
- package/src/components/ActionFooter/ActionFooter.tsx +2 -2
- package/src/components/AppBar/AppBar.tsx +2 -2
- package/src/components/Avatar/Avatar.tsx +2 -2
- package/src/components/Badge/Badge.tsx +1 -1
- package/src/components/BottomNav/BottomNav.tsx +2 -2
- package/src/components/BottomNavItem/BottomNavItem.tsx +2 -2
- package/src/components/Button/Button.tsx +1 -1
- package/src/components/Carousel/Carousel.mdx +154 -0
- package/src/components/Carousel/Carousel.tsx +472 -0
- package/src/components/Disclaimer/Disclaimer.tsx +1 -1
- package/src/components/Divider/Divider.tsx +2 -2
- package/src/components/Drawer/Drawer.tsx +11 -3
- package/src/components/FilterBar/FilterBar.tsx +2 -2
- package/src/components/IconButton/IconButton.tsx +2 -2
- package/src/components/IconCapsule/IconCapsule.tsx +2 -2
- package/src/components/LazyList/LazyList.tsx +2 -2
- package/src/components/ListGroup/ListGroup.tsx +1 -1
- package/src/components/ListItem/ListItem.tsx +5 -5
- package/src/components/MerchantProfile/MerchantProfile.tsx +1 -1
- package/src/components/MoneyValue/MoneyValue.tsx +1 -1
- package/src/components/NavArrow/NavArrow.tsx +1 -1
- package/src/components/PageTitle/PageTitle.tsx +1 -1
- package/src/components/RadioButton/RadioButton.mdx +92 -0
- package/src/components/RadioButton/RadioButton.tsx +226 -0
- package/src/components/Section/Section.tsx +4 -4
- package/src/components/TextInput/TextInput.tsx +1 -1
- package/src/components/TransactionDetails/TransactionDetails.tsx +2 -2
- package/src/components/UpiHandle/UpiHandle.tsx +6 -3
- package/src/components/index.ts +1 -0
- 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:
|
|
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,
|
|
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 =
|
|
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:
|
|
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,
|
|
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:
|
|
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
|
-
|
|
270
|
-
alwaysBounceVertical:
|
|
276
|
+
animatedProps: animatedScrollProps,
|
|
277
|
+
alwaysBounceVertical: false,
|
|
271
278
|
overScrollMode: "always",
|
|
272
279
|
onScroll: useAnimatedScrollHandler(event => {
|
|
273
280
|
scrollY.value = event.contentOffset.y;
|