related-ui-components 2.7.6 → 2.7.7

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/module/app.js CHANGED
@@ -2,41 +2,20 @@
2
2
 
3
3
  import React, { useState } from "react";
4
4
  import { SafeAreaView, StyleSheet, StatusBar } from "react-native";
5
- // Adjust path as needed
5
+ import CarouselCardStack from "./components/CarouselCardStack/CarouselCardStack.js"; // Adjust path as needed
6
6
  import { GestureHandlerRootView } from "react-native-gesture-handler";
7
- import { FlightSummary } from "./components/index.js";
8
7
  import { lightTheme, RelatedProvider, useTheme } from "./theme/index.js";
9
8
  import { BottomSheetStackProvider } from "./contexts/index.js";
10
9
  import { SafeAreaProvider } from "react-native-safe-area-context";
11
10
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
- // Sample data - replace with your actual image URLs
13
- const DUMMY_DATA = [{
14
- id: "1",
15
- image: "https://images.pexels.com/photos/3354648/pexels-photo-3354648.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1",
16
- title: "Mountain Lake"
17
- },
18
- // {
19
- // id: "2",
20
- // image:
21
- // "https://images.pexels.com/photos/163273/sunrise-speedboat-ocean-water-163273.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1",
22
- // title: "Sunset Cruise",
23
- // },
24
- {
25
- id: "3",
26
- image: "https://images.pexels.com/photos/1430677/pexels-photo-1430677.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1",
27
- title: "Ocean Horizon"
28
- }, {
29
- id: "4",
30
- image: "https://images.pexels.com/photos/2387793/pexels-photo-2387793.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1",
31
- title: "Forest Trail"
32
- }
33
- // {
34
- // id: "5",
35
- // image:
36
- // "https://images.pexels.com/photos/302804/pexels-photo-302804.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1",
37
- // title: "City Lights",
38
- // },
39
- ];
11
+ const DUMMY_DATA = Array.from({
12
+ length: 10
13
+ }, (_, i) => ({
14
+ id: `image-${i + 1}`,
15
+ // Using a random query parameter ensures you get a different image for each ID
16
+ image: `https://picsum.photos/seed/picsum/400/600`,
17
+ title: `Image #${i + 1}`
18
+ }));
40
19
  const App = () => {
41
20
  const {
42
21
  theme
@@ -62,7 +41,13 @@ const App = () => {
62
41
  barStyle: "light-content"
63
42
  }), /*#__PURE__*/_jsx(SafeAreaView, {
64
43
  style: styles.appContainer,
65
- children: /*#__PURE__*/_jsx(FlightSummary, {})
44
+ children: /*#__PURE__*/_jsx(CarouselCardStack, {
45
+ data: DUMMY_DATA
46
+ // backgroundColor="#333" // Set a background color for the component area
47
+ // onActiveIndexChange={(index) => {
48
+ // console.log("Active item index:", index);
49
+ // }}
50
+ })
66
51
  })]
67
52
  })
68
53
  })
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","SafeAreaView","StyleSheet","StatusBar","GestureHandlerRootView","FlightSummary","lightTheme","RelatedProvider","useTheme","BottomSheetStackProvider","SafeAreaProvider","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DUMMY_DATA","id","image","title","App","theme","departureDate","setDepartureDate","undefined","returnDate","setReturnDate","progress","setProgress","handleAnimate","newProgress","Math","floor","random","children","style","flex","barStyle","styles","appContainer","create","backgroundColor","justifyContent","alignItems"],"sourceRoot":"..\\..\\src","sources":["app.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAeC,QAAQ,QAAQ,OAAO;AAClD,SAASC,YAAY,EAAEC,UAAU,EAAEC,SAAS,QAAkC,cAAc;AACV;AAClF,SAASC,sBAAsB,QAAQ,8BAA8B;AACrE,SAIEC,aAAa,QAOR,uBAAc;AACrB,SAASC,UAAU,EAAEC,eAAe,EAAEC,QAAQ,QAAQ,kBAAS;AAG/D,SAASC,wBAAwB,QAAQ,qBAAY;AACrD,SAASC,gBAAgB,QAAQ,gCAAgC;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAGlE;AACA,MAAMC,UAAU,GAAG,CACjB;EACEC,EAAE,EAAE,GAAG;EACPC,KAAK,EACH,iHAAiH;EACnHC,KAAK,EAAE;AACT,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;EACEF,EAAE,EAAE,GAAG;EACPC,KAAK,EACH,iHAAiH;EACnHC,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAE,GAAG;EACPC,KAAK,EACH,iHAAiH;EACnHC,KAAK,EAAE;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,CACD;AAED,MAAMC,GAAG,GAAGA,CAAA,KAAM;EAChB,MAAM;IAAEC;EAAM,CAAC,GAAGd,QAAQ,CAAC,CAAC;EAE5B,MAAM,CAACe,aAAa,EAAEC,gBAAgB,CAAC,GAAGxB,QAAQ,CAChDyB,SACF,CAAC;EACD,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG3B,QAAQ,CAAqByB,SAAS,CAAC;EAE3E,MAAM,CAACG,QAAQ,EAAEC,WAAW,CAAC,GAAG7B,QAAQ,CAAC,EAAE,CAAC;EAC5C,MAAM8B,aAAa,GAAGA,CAAA,KAAM;IAC1B;IACA,MAAMC,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;IACnDL,WAAW,CAACE,WAAW,CAAC;EAC1B,CAAC;EAID,oBACEnB,IAAA,CAAAI,SAAA;IAAAmB,QAAA,eACEvB,IAAA,CAACF,gBAAgB;MAAAyB,QAAA,eACfvB,IAAA,CAACR,sBAAsB;QAACgC,KAAK,EAAE;UAAEC,IAAI,EAAE;QAAE,CAAE;QAAAF,QAAA,eACzCvB,IAAA,CAACL,eAAe;UAACe,KAAK,EAAEhB,UAAW;UAAA6B,QAAA,eACjCrB,KAAA,CAACL,wBAAwB;YAAA0B,QAAA,gBACvBvB,IAAA,CAACT,SAAS;cAACmC,QAAQ,EAAC;YAAe,CAAE,CAAC,eACtC1B,IAAA,CAACX,YAAY;cAACmC,KAAK,EAAEG,MAAM,CAACC,YAAa;cAAAL,QAAA,eAwCvCvB,IAAA,CAACP,aAAa,IAAgB;YAAC,CAiCnB,CAAC;UAAA,CACS;QAAC,CACZ;MAAC,CACI;IAAC,CACT;EAAC,CACnB,CAAC;AAEP,CAAC;AAED,MAAMkC,MAAM,GAAGrC,UAAU,CAACuC,MAAM,CAAC;EAC/BD,YAAY,EAAE;IACZH,IAAI,EAAE,CAAC;IACPK,eAAe,EAAE,MAAM;IACvBC,cAAc,EAAE,QAAQ;IAAE;IAC1BC,UAAU,EAAC;EACb;AACF,CAAC,CAAC;AAEF,eAAevB,GAAG","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","SafeAreaView","StyleSheet","StatusBar","CarouselCardStack","GestureHandlerRootView","lightTheme","RelatedProvider","useTheme","BottomSheetStackProvider","SafeAreaProvider","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","DUMMY_DATA","Array","from","length","_","i","id","image","title","App","theme","departureDate","setDepartureDate","undefined","returnDate","setReturnDate","progress","setProgress","handleAnimate","newProgress","Math","floor","random","children","style","flex","barStyle","styles","appContainer","data","create","backgroundColor","justifyContent","alignItems"],"sourceRoot":"..\\..\\src","sources":["app.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAeC,QAAQ,QAAQ,OAAO;AAClD,SAASC,YAAY,EAAEC,UAAU,EAAEC,SAAS,QAAkC,cAAc;AAC5F,OAAOC,iBAAiB,MAAM,qDAAkD,CAAC,CAAC;AAClF,SAASC,sBAAsB,QAAQ,8BAA8B;AAarE,SAAoBC,UAAU,EAAEC,eAAe,EAAEC,QAAQ,QAAQ,kBAAS;AAG1E,SAASC,wBAAwB,QAAQ,qBAAY;AACrD,SAASC,gBAAgB,QAAQ,gCAAgC;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAIlE,MAAMC,UAAU,GAAGC,KAAK,CAACC,IAAI,CAAC;EAAEC,MAAM,EAAE;AAAG,CAAC,EAAE,CAACC,CAAC,EAAEC,CAAC,MAAM;EACvDC,EAAE,EAAE,SAASD,CAAC,GAAG,CAAC,EAAE;EACpB;EACAE,KAAK,EAAE,2CAA2C;EAClDC,KAAK,EAAE,UAAUH,CAAC,GAAG,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,MAAMI,GAAG,GAAGA,CAAA,KAAM;EAChB,MAAM;IAAEC;EAAM,CAAC,GAAGnB,QAAQ,CAAC,CAAC;EAE5B,MAAM,CAACoB,aAAa,EAAEC,gBAAgB,CAAC,GAAG7B,QAAQ,CAChD8B,SACF,CAAC;EACD,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAGhC,QAAQ,CAAqB8B,SAAS,CAAC;EAE3E,MAAM,CAACG,QAAQ,EAAEC,WAAW,CAAC,GAAGlC,QAAQ,CAAC,EAAE,CAAC;EAC5C,MAAMmC,aAAa,GAAGA,CAAA,KAAM;IAC1B;IACA,MAAMC,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC;IACnDL,WAAW,CAACE,WAAW,CAAC;EAC1B,CAAC;EAED,oBACExB,IAAA,CAAAI,SAAA;IAAAwB,QAAA,eACE5B,IAAA,CAACF,gBAAgB;MAAA8B,QAAA,eACf5B,IAAA,CAACP,sBAAsB;QAACoC,KAAK,EAAE;UAAEC,IAAI,EAAE;QAAE,CAAE;QAAAF,QAAA,eACzC5B,IAAA,CAACL,eAAe;UAACoB,KAAK,EAAErB,UAAW;UAAAkC,QAAA,eACjC1B,KAAA,CAACL,wBAAwB;YAAA+B,QAAA,gBACvB5B,IAAA,CAACT,SAAS;cAACwC,QAAQ,EAAC;YAAe,CAAE,CAAC,eACtC/B,IAAA,CAACX,YAAY;cAACwC,KAAK,EAAEG,MAAM,CAACC,YAAa;cAAAL,QAAA,eACvC5B,IAAA,CAACR,iBAAiB;gBAChB0C,IAAI,EAAE7B;gBACN;gBACA;gBACA;gBACA;cAAA,CACD;YAAC,CAyEU,CAAC;UAAA,CACS;QAAC,CACZ;MAAC,CACI;IAAC,CACT;EAAC,CACnB,CAAC;AAEP,CAAC;AAED,MAAM2B,MAAM,GAAG1C,UAAU,CAAC6C,MAAM,CAAC;EAC/BF,YAAY,EAAE;IACZH,IAAI,EAAE,CAAC;IACPM,eAAe,EAAE,MAAM;IACvBC,cAAc,EAAE,QAAQ;IAAE;IAC1BC,UAAU,EAAC;EACb;AACF,CAAC,CAAC;AAEF,eAAexB,GAAG","ignoreList":[]}
@@ -23,12 +23,11 @@ const SPRING_CONFIG = {
23
23
  stiffness: 120,
24
24
  mass: 0.6
25
25
  };
26
- const FADE_SPRING_CONFIG = {
27
- damping: 35,
28
- stiffness: 50,
29
- mass: 1.2
30
- };
31
26
  const SIDE_CARD_ROTATION_DEGREES = 7;
27
+
28
+ // Only render visible items + buffer
29
+ const VISIBLE_RANGE = 2; // Items on each side of active item
30
+
32
31
  const createVirtualData = originalData => {
33
32
  if (!originalData || originalData.length === 0) return [];
34
33
  const prefixItems = (items, segmentPrefix) => items.map((item, idx) => ({
@@ -40,6 +39,75 @@ const createVirtualData = originalData => {
40
39
  const nextSegment = prefixItems(originalData, "next");
41
40
  return [...prevSegment, ...currSegment, ...nextSegment];
42
41
  };
42
+
43
+ // Memoized card component
44
+ const CarouselCard = /*#__PURE__*/React.memo(({
45
+ item,
46
+ index,
47
+ activeIndex,
48
+ gestureTranslateX,
49
+ cardWidth,
50
+ cardHeight,
51
+ virtualDataLength
52
+ }) => {
53
+ const animatedStyle = useAnimatedStyle(() => {
54
+ const currentCardDragOffset = gestureTranslateX.value / cardWidth;
55
+ const displayOffset = index - (activeIndex.value - currentCardDragOffset);
56
+
57
+ // Early return for items that are too far away to optimize performance
58
+ const absDisplayOffset = Math.abs(displayOffset);
59
+ if (absDisplayOffset > 2.5) {
60
+ return {
61
+ opacity: 0,
62
+ transform: [{
63
+ translateX: 0
64
+ }, {
65
+ scale: 0.8
66
+ }, {
67
+ rotateZ: '0deg'
68
+ }],
69
+ zIndex: 0
70
+ };
71
+ }
72
+ const scale = interpolate(displayOffset, [-1, 0, 1], [SIDE_CARD_SCALE_FACTOR, ACTIVE_CARD_SCALE, SIDE_CARD_SCALE_FACTOR], Extrapolation.CLAMP);
73
+ const translateX = interpolate(displayOffset, [-1, 0, 1], [-SIDE_CARD_TRANSLATE_X, 0, SIDE_CARD_TRANSLATE_X], Extrapolation.CLAMP);
74
+ const rotation = interpolate(displayOffset, [-1, 0, 1], [-SIDE_CARD_ROTATION_DEGREES, 0, SIDE_CARD_ROTATION_DEGREES], Extrapolation.CLAMP);
75
+ const opacity = interpolate(absDisplayOffset, [0, 1, 2, 2.75], [1, 1, 0.6, 0], Extrapolation.CLAMP);
76
+ const snappedDisplayOffset = index - Math.round(activeIndex.value);
77
+ const zIndex = virtualDataLength - Math.abs(snappedDisplayOffset);
78
+ return {
79
+ transform: [{
80
+ translateX
81
+ }, {
82
+ scale
83
+ }, {
84
+ rotateZ: `${rotation}deg`
85
+ }],
86
+ opacity,
87
+ zIndex
88
+ };
89
+ }, [index, cardWidth, virtualDataLength]);
90
+ return /*#__PURE__*/_jsxs(Animated.View, {
91
+ style: [styles.card, {
92
+ width: cardWidth,
93
+ height: cardHeight
94
+ }, animatedStyle],
95
+ children: [/*#__PURE__*/_jsx(Image, {
96
+ source: {
97
+ uri: item.image
98
+ },
99
+ style: styles.cardImage,
100
+ resizeMode: "cover",
101
+ fadeDuration: 0
102
+ }), item.title && /*#__PURE__*/_jsx(View, {
103
+ style: styles.titleContainer,
104
+ children: /*#__PURE__*/_jsx(Text, {
105
+ style: styles.cardTitle,
106
+ children: item.title
107
+ })
108
+ })]
109
+ });
110
+ });
43
111
  const CarouselCardStack = ({
44
112
  data: originalData,
45
113
  cardHeight = CARD_HEIGHT,
@@ -59,28 +127,19 @@ const CarouselCardStack = ({
59
127
  gestureTranslateX.value = 0;
60
128
  }, [N_original, activeIndex, gestureTranslateX]);
61
129
 
62
- // Worklet to handle the loop reset
63
- const handleLoopReset = () => {
64
- "worklet";
65
-
66
- if (N_original === 0) return;
67
- const currentValue = Math.round(activeIndex.value);
68
-
69
- // If in the "next" segment (indices >= 2*N_original)
70
- if (currentValue >= N_original * 2) {
71
- activeIndex.value = currentValue - N_original;
72
- }
73
- // If in the "prev" segment (indices < N_original)
74
- else if (currentValue < N_original) {
75
- activeIndex.value = currentValue + N_original;
76
- }
77
- };
130
+ // Calculate visible items - moved outside of render
131
+ const visibleItems = useDerivedValue(() => {
132
+ const center = Math.round(activeIndex.value);
133
+ const start = Math.max(0, center - VISIBLE_RANGE);
134
+ const end = Math.min(virtualData.length - 1, center + VISIBLE_RANGE);
135
+ return virtualData.slice(start, end + 1).map((item, sliceIndex) => ({
136
+ item,
137
+ originalIndex: start + sliceIndex
138
+ }));
139
+ });
78
140
  useDerivedValue(() => {
79
141
  const currentValue = Math.round(activeIndex.value);
80
-
81
- // Only reset if we're at the boundaries and not currently animating (gestureTranslateX is 0)
82
142
  if (gestureTranslateX.value === 0) {
83
- // i.e., spring animation for gesture has finished
84
143
  if (currentValue >= N_original * 2) {
85
144
  activeIndex.value = currentValue - N_original;
86
145
  } else if (currentValue < N_original) {
@@ -101,16 +160,8 @@ const CarouselCardStack = ({
101
160
  } else if (event.translationX > threshold) {
102
161
  newTargetVirtualIndex = activeIndex.value - 1;
103
162
  }
104
-
105
- // Clamp to virtual data bounds
106
163
  newTargetVirtualIndex = Math.max(0, Math.min(newTargetVirtualIndex, virtualData.length - 1));
107
- activeIndex.value = withSpring(newTargetVirtualIndex, SPRING_CONFIG, finished => {
108
- "worklet";
109
-
110
- if (finished) {
111
- handleLoopReset();
112
- }
113
- });
164
+ activeIndex.value = withSpring(newTargetVirtualIndex, SPRING_CONFIG);
114
165
  gestureTranslateX.value = withSpring(0, SPRING_CONFIG);
115
166
  contextX.value = 0;
116
167
  });
@@ -133,7 +184,7 @@ const CarouselCardStack = ({
133
184
  return /*#__PURE__*/_jsxs(View, {
134
185
  style: [styles.container, {
135
186
  height: cardHeight + 60,
136
- backgroundColor: backgroundColor
187
+ backgroundColor
137
188
  }],
138
189
  children: [/*#__PURE__*/_jsx(GestureDetector, {
139
190
  gesture: panGesture,
@@ -141,61 +192,28 @@ const CarouselCardStack = ({
141
192
  style: [styles.cardContainer, {
142
193
  height: cardHeight
143
194
  }],
144
- children: virtualData.map((item, index) => {
145
- const animatedStyle = useAnimatedStyle(() => {
146
- const currentCardDragOffset = gestureTranslateX.value / cardWidth;
147
- const displayOffset = index - (activeIndex.value - currentCardDragOffset);
148
- const scale = interpolate(displayOffset, [-1, 0, 1], [SIDE_CARD_SCALE_FACTOR, ACTIVE_CARD_SCALE, SIDE_CARD_SCALE_FACTOR], Extrapolation.CLAMP);
149
- const translateX = interpolate(displayOffset, [-1, 0, 1], [-SIDE_CARD_TRANSLATE_X, 0, SIDE_CARD_TRANSLATE_X], Extrapolation.CLAMP);
150
- const rotation = interpolate(displayOffset, [-1, 0, 1], [-SIDE_CARD_ROTATION_DEGREES, 0, SIDE_CARD_ROTATION_DEGREES], Extrapolation.CLAMP);
151
- const opacity = interpolate(Math.abs(displayOffset), [0, 1, 2, 2.75], [1, 1, 0.6, 0], Extrapolation.CLAMP);
152
- const snappedDisplayOffset = index - Math.round(activeIndex.value);
153
- const zIndex = virtualData.length - Math.abs(snappedDisplayOffset);
154
- return {
155
- transform: [{
156
- translateX
157
- }, {
158
- scale
159
- }, {
160
- rotateZ: `${rotation}deg`
161
- }],
162
- opacity,
163
- zIndex
164
- };
165
- });
166
- return /*#__PURE__*/_jsxs(Animated.View, {
167
- style: [styles.card, {
168
- width: cardWidth,
169
- height: cardHeight
170
- }, animatedStyle],
171
- children: [/*#__PURE__*/_jsx(Image, {
172
- source: {
173
- uri: item.image
174
- },
175
- style: styles.cardImage
176
- }), item.title && /*#__PURE__*/_jsx(View, {
177
- style: styles.titleContainer,
178
- children: /*#__PURE__*/_jsx(Text, {
179
- style: styles.cardTitle,
180
- children: item.title
181
- })
182
- })]
183
- }, item.uniqueId);
184
- })
195
+ children: virtualData.map((item, index) => /*#__PURE__*/_jsx(CarouselCard, {
196
+ item: item,
197
+ index: index,
198
+ activeIndex: activeIndex,
199
+ gestureTranslateX: gestureTranslateX,
200
+ cardWidth: cardWidth,
201
+ cardHeight: cardHeight,
202
+ virtualDataLength: virtualData.length
203
+ }, item.uniqueId))
185
204
  })
186
205
  }), N_original > 0 && /*#__PURE__*/_jsx(View, {
187
206
  style: styles.paginationContainer,
188
207
  children: originalData.map((_, i) => {
189
- const isActiveDot = useDerivedValue(() => {
190
- return activeDotIndex.value === i;
191
- });
192
208
  const dotStyle = useAnimatedStyle(() => {
209
+ const isActive = activeDotIndex.value === i;
193
210
  return {
194
- width: withSpring(isActiveDot.value ? 24 : 8, SPRING_CONFIG),
211
+ width: withSpring(isActive ? 24 : 8, SPRING_CONFIG),
195
212
  height: 8,
196
213
  borderRadius: 4,
197
- backgroundColor: isActiveDot.value ? theme.primary : "#FFFFFF",
198
- marginHorizontal: 4
214
+ backgroundColor: isActive ? theme.primary : "#FFFFFF",
215
+ marginHorizontal: 4,
216
+ opacity: isActive ? 1 : 0.5
199
217
  };
200
218
  });
201
219
  return /*#__PURE__*/_jsx(Animated.View, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useMemo","View","StyleSheet","Image","Dimensions","Text","Gesture","GestureDetector","Animated","useSharedValue","useAnimatedStyle","withSpring","interpolate","useDerivedValue","Extrapolation","useTheme","jsx","_jsx","jsxs","_jsxs","width","SCREEN_WIDTH","get","CARD_WIDTH_FACTOR","CARD_ASPECT_RATIO","SIDE_CARD_SCALE_FACTOR","CARD_WIDTH","CARD_HEIGHT","MAX_X_FACTOR","SIDE_CARD_TRANSLATE_X_FACTOR","Math","min","SIDE_CARD_TRANSLATE_X","ACTIVE_CARD_SCALE","SPRING_CONFIG","damping","stiffness","mass","FADE_SPRING_CONFIG","SIDE_CARD_ROTATION_DEGREES","createVirtualData","originalData","length","prefixItems","items","segmentPrefix","map","item","idx","uniqueId","id","prevSegment","currSegment","nextSegment","CarouselCardStack","data","cardHeight","cardWidth","backgroundColor","theme","N_original","virtualData","activeIndex","gestureTranslateX","contextX","value","handleLoopReset","currentValue","round","panGesture","Pan","activeOffsetX","onBegin","onUpdate","event","translationX","onEnd","threshold","newTargetVirtualIndex","max","finished","activeDotIndex","currentVal","style","styles","container","height","children","emptyText","gesture","cardContainer","index","animatedStyle","currentCardDragOffset","displayOffset","scale","CLAMP","translateX","rotation","opacity","abs","snappedDisplayOffset","zIndex","transform","rotateZ","card","source","uri","image","cardImage","title","titleContainer","cardTitle","paginationContainer","_","i","isActiveDot","dotStyle","borderRadius","primary","marginHorizontal","create","alignItems","justifyContent","position","overflow","resizeMode","bottom","left","right","padding","color","fontSize","fontWeight","flexDirection","marginTop","marginBottom"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/CarouselCardStack/CarouselCardStack.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","useMemo","View","StyleSheet","Image","Dimensions","Text","Gesture","GestureDetector","Animated","useSharedValue","useAnimatedStyle","withSpring","interpolate","useDerivedValue","Extrapolation","useTheme","jsx","_jsx","jsxs","_jsxs","width","SCREEN_WIDTH","get","CARD_WIDTH_FACTOR","CARD_ASPECT_RATIO","SIDE_CARD_SCALE_FACTOR","CARD_WIDTH","CARD_HEIGHT","MAX_X_FACTOR","SIDE_CARD_TRANSLATE_X_FACTOR","Math","min","SIDE_CARD_TRANSLATE_X","ACTIVE_CARD_SCALE","SPRING_CONFIG","damping","stiffness","mass","SIDE_CARD_ROTATION_DEGREES","VISIBLE_RANGE","createVirtualData","originalData","length","prefixItems","items","segmentPrefix","map","item","idx","uniqueId","id","prevSegment","currSegment","nextSegment","CarouselCard","memo","index","activeIndex","gestureTranslateX","cardWidth","cardHeight","virtualDataLength","animatedStyle","currentCardDragOffset","value","displayOffset","absDisplayOffset","abs","opacity","transform","translateX","scale","rotateZ","zIndex","CLAMP","rotation","snappedDisplayOffset","round","style","styles","card","height","children","source","uri","image","cardImage","resizeMode","fadeDuration","title","titleContainer","cardTitle","CarouselCardStack","data","backgroundColor","theme","N_original","virtualData","contextX","visibleItems","center","start","max","end","slice","sliceIndex","originalIndex","currentValue","panGesture","Pan","activeOffsetX","onBegin","onUpdate","event","translationX","onEnd","threshold","newTargetVirtualIndex","activeDotIndex","currentVal","container","emptyText","gesture","cardContainer","paginationContainer","_","i","dotStyle","isActive","borderRadius","primary","marginHorizontal","create","alignItems","justifyContent","position","overflow","bottom","left","right","padding","color","fontSize","fontWeight","flexDirection","marginTop","marginBottom"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/CarouselCardStack/CarouselCardStack.tsx"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,8 @@ import React, { useCallback, useEffect, useMemo, useState } from "react";
5
5
  import { StyleSheet, Text, TouchableOpacity, View, I18nManager } from "react-native";
6
6
  import { NumericStepper } from "../NumericStepper/index.js";
7
7
  import { BottomSheetScrollView } from "@gorhom/bottom-sheet";
8
- // import { ScrollView } from "react-native-gesture-handler";
8
+ import RNPickerSelect from "react-native-picker-select";
9
+ import { Ionicons } from "@expo/vector-icons";
9
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
11
  const DEFAULT_GUEST_CONFIG = [{
11
12
  key: "adults",
@@ -20,14 +21,28 @@ const DEFAULT_GUEST_CONFIG = [{
20
21
  description: "0 - 17 years old",
21
22
  defaultValue: 0,
22
23
  minValue: 0,
23
- maxValue: 4
24
+ maxValue: 4,
25
+ ageRange: {
26
+ min: 0,
27
+ max: 17
28
+ },
29
+ defaultAge: 8
24
30
  }];
25
31
  const createNewRoom = guestConfig => {
26
32
  const newRoom = {
27
33
  id: Date.now().toString() + Math.random().toString(36).substring(2, 9)
28
34
  };
29
35
  guestConfig.forEach(guest => {
30
- newRoom[guest.key] = guest.defaultValue;
36
+ if (guest.ageRange) {
37
+ newRoom[guest.key] = Array.from({
38
+ length: guest.defaultValue
39
+ }, (_, i) => ({
40
+ id: `${guest.key}_${i}_${Date.now()}`,
41
+ age: guest.defaultAge ?? guest.ageRange?.min ?? 0
42
+ }));
43
+ } else {
44
+ newRoom[guest.key] = guest.defaultValue;
45
+ }
31
46
  });
32
47
  return newRoom;
33
48
  };
@@ -40,6 +55,7 @@ const HotelSummary = ({
40
55
  roomTitlePrefix = "Room",
41
56
  removeRoomText = "Remove",
42
57
  addRoomText = "+ Add Room",
58
+ formatChildAgeLabel = (guestType, index) => `${guestType} ${index} Age`,
43
59
  containerStyle,
44
60
  roomContainerStyle,
45
61
  roomHeaderStyle,
@@ -56,11 +72,15 @@ const HotelSummary = ({
56
72
  stepperButtonStyle,
57
73
  stepperButtonTextStyle,
58
74
  stepperValueTextStyle,
59
- roomListContainerStyle
75
+ roomListContainerStyle,
76
+ agePickerRowStyle,
77
+ agePickerLabelStyle,
78
+ overrideTheme
60
79
  }) => {
61
80
  const {
62
- theme
81
+ theme: defaultTheme
63
82
  } = useTheme();
83
+ let theme = overrideTheme || defaultTheme;
64
84
  const styles = useMemo(() => themedStyles(theme, I18nManager.isRTL), [theme]);
65
85
  const guestConfig = useMemo(() => guestConfigProp, [guestConfigProp]);
66
86
  const [rooms, setRooms] = useState(selection && selection.length >= minRooms ? selection : Array.from({
@@ -89,38 +109,87 @@ const HotelSummary = ({
89
109
  return updatedRooms;
90
110
  });
91
111
  }, [triggerSelectionChange, minRooms]);
92
- const handleGuestChange = useCallback((roomId, guestKey, action) => {
112
+ const handleGuestCountChange = useCallback((roomId, guestKey, action) => {
93
113
  setRooms(prevRooms => {
94
114
  const guestInfo = guestConfig.find(g => g.key === guestKey);
95
115
  if (!guestInfo) return prevRooms;
96
- const minValue = guestInfo.minValue;
97
- const maxValue = guestInfo.maxValue ?? 99;
98
116
  let valueChanged = false;
99
117
  const updatedRooms = prevRooms.map(room => {
100
- if (room.id === roomId) {
101
- const currentVal = room[guestKey];
102
- let newValue = currentVal;
118
+ if (room.id !== roomId) return room;
119
+ const currentVal = room[guestKey];
120
+ let newRoomState = {
121
+ ...room
122
+ };
123
+ if (guestInfo.ageRange) {
124
+ // Handle array of guests
125
+ const currentArray = currentVal || [];
103
126
  if (action === "increment") {
104
- newValue = Math.min(maxValue, currentVal + 1);
127
+ if (currentArray.length < (guestInfo.maxValue ?? 99)) {
128
+ const newGuest = {
129
+ id: `${guestKey}_${Date.now()}`,
130
+ age: guestInfo.defaultAge ?? guestInfo.ageRange.min
131
+ };
132
+ newRoomState[guestKey] = [...currentArray, newGuest];
133
+ valueChanged = true;
134
+ }
105
135
  } else if (action === "decrement") {
106
- newValue = Math.max(minValue, currentVal - 1);
136
+ if (currentArray.length > guestInfo.minValue) {
137
+ newRoomState[guestKey] = currentArray.slice(0, -1);
138
+ valueChanged = true;
139
+ }
107
140
  }
141
+ } else {
142
+ // Handle numeric count
143
+ const min = guestInfo.minValue;
144
+ const max = guestInfo.maxValue ?? 99;
145
+ let newValue = currentVal;
146
+ if (action === "increment") newValue = Math.min(max, currentVal + 1);else newValue = Math.max(min, currentVal - 1);
108
147
  if (newValue !== currentVal) {
148
+ newRoomState[guestKey] = newValue;
109
149
  valueChanged = true;
110
- return {
111
- ...room,
112
- [guestKey]: newValue
113
- };
114
150
  }
115
151
  }
116
- return room;
152
+ return newRoomState;
117
153
  });
118
154
  if (valueChanged) {
119
155
  triggerSelectionChange(updatedRooms);
120
156
  }
121
157
  return updatedRooms;
122
158
  });
123
- }, [triggerSelectionChange, guestConfig]);
159
+ }, [guestConfig, triggerSelectionChange]);
160
+ const handleIndividualAgeChange = useCallback((roomId, guestKey, guestId, newAge) => {
161
+ if (newAge === null || newAge === undefined) return;
162
+ setRooms(prevRooms => {
163
+ const updatedRooms = prevRooms.map(room => {
164
+ if (room.id === roomId) {
165
+ const guestArray = room[guestKey].map(guest => guest.id === guestId ? {
166
+ ...guest,
167
+ age: newAge
168
+ } : guest);
169
+ return {
170
+ ...room,
171
+ [guestKey]: guestArray
172
+ };
173
+ }
174
+ return room;
175
+ });
176
+ triggerSelectionChange(updatedRooms);
177
+ return updatedRooms;
178
+ });
179
+ }, [triggerSelectionChange]);
180
+ const getAgePickerItems = config => {
181
+ if (!config?.ageRange) return [];
182
+ const {
183
+ min,
184
+ max
185
+ } = config.ageRange;
186
+ return Array.from({
187
+ length: max - min + 1
188
+ }, (_, i) => ({
189
+ label: `${min + i}`,
190
+ value: min + i
191
+ }));
192
+ };
124
193
  useEffect(() => {
125
194
  onSelectionChange?.(rooms);
126
195
  }, []);
@@ -147,27 +216,57 @@ const HotelSummary = ({
147
216
  })
148
217
  })]
149
218
  }), guestConfig.map(guest => /*#__PURE__*/_jsxs(View, {
150
- style: [styles.guestRow, guestRowStyle],
151
219
  children: [/*#__PURE__*/_jsxs(View, {
152
- style: [styles.guestLabelContainer, guestLabelContainerStyle],
220
+ style: [styles.guestRow, guestRowStyle],
221
+ children: [/*#__PURE__*/_jsxs(View, {
222
+ style: [styles.guestLabelContainer, guestLabelContainerStyle],
223
+ children: [/*#__PURE__*/_jsx(Text, {
224
+ style: [styles.guestName, guestNameStyle],
225
+ children: guest.name
226
+ }), /*#__PURE__*/_jsx(Text, {
227
+ style: [styles.guestDescription, guestDescriptionStyle],
228
+ children: guest.description
229
+ })]
230
+ }), /*#__PURE__*/_jsx(NumericStepper, {
231
+ value: guest.ageRange ? room[guest.key]?.length || 0 : room[guest.key],
232
+ minValue: guest.minValue,
233
+ maxValue: guest.maxValue,
234
+ onIncrement: () => handleGuestCountChange(room.id, guest.key, "increment"),
235
+ onDecrement: () => handleGuestCountChange(room.id, guest.key, "decrement"),
236
+ style: stepperContainerStyle,
237
+ buttonStyle: stepperButtonStyle,
238
+ buttonTextStyle: stepperButtonTextStyle,
239
+ valueTextStyle: stepperValueTextStyle
240
+ })]
241
+ }), guest.ageRange && room[guest.key]?.map((individualGuest, guestIndex) => /*#__PURE__*/_jsxs(View, {
242
+ style: [styles.agePickerRow, agePickerRowStyle],
153
243
  children: [/*#__PURE__*/_jsx(Text, {
154
- style: [styles.guestName, guestNameStyle],
155
- children: guest.name
156
- }), /*#__PURE__*/_jsx(Text, {
157
- style: [styles.guestDescription, guestDescriptionStyle],
158
- children: guest.description
244
+ style: [styles.agePickerLabel, agePickerLabelStyle],
245
+ children: formatChildAgeLabel(guest.name, guestIndex + 1)
246
+ }), /*#__PURE__*/_jsx(View, {
247
+ style: styles.pickerContainer,
248
+ children: /*#__PURE__*/_jsx(RNPickerSelect, {
249
+ value: individualGuest.age,
250
+ onValueChange: value => handleIndividualAgeChange(room.id, guest.key, individualGuest.id, value),
251
+ items: getAgePickerItems(guest),
252
+ placeholder: {},
253
+ style: {
254
+ inputIOS: styles.pickerInput,
255
+ inputAndroid: styles.pickerInput,
256
+ iconContainer: styles.pickerIconContainer
257
+ },
258
+ textInputProps: {
259
+ pointerEvents: "none"
260
+ },
261
+ useNativeAndroidPickerStyle: false,
262
+ Icon: () => /*#__PURE__*/_jsx(Ionicons, {
263
+ name: "chevron-down",
264
+ size: 20,
265
+ color: theme.helper
266
+ })
267
+ })
159
268
  })]
160
- }), /*#__PURE__*/_jsx(NumericStepper, {
161
- value: room[guest.key],
162
- minValue: guest.minValue,
163
- maxValue: guest.maxValue,
164
- onIncrement: () => handleGuestChange(room.id, guest.key, "increment"),
165
- onDecrement: () => handleGuestChange(room.id, guest.key, "decrement"),
166
- style: stepperContainerStyle,
167
- buttonStyle: stepperButtonStyle,
168
- buttonTextStyle: stepperButtonTextStyle,
169
- valueTextStyle: stepperValueTextStyle
170
- })]
269
+ }, individualGuest.id))]
171
270
  }, guest.key))]
172
271
  }, room.id))
173
272
  }), rooms.length < maxRooms && /*#__PURE__*/_jsx(TouchableOpacity, {
@@ -240,6 +339,38 @@ const themedStyles = (theme, isRTL) => StyleSheet.create({
240
339
  fontSize: 16,
241
340
  fontWeight: "bold",
242
341
  color: theme.primary
342
+ },
343
+ agePickerRow: {
344
+ flexDirection: "row",
345
+ alignItems: "center",
346
+ justifyContent: "space-between",
347
+ paddingVertical: 8,
348
+ paddingHorizontal: 16,
349
+ backgroundColor: theme.background,
350
+ borderBottomWidth: StyleSheet.hairlineWidth,
351
+ borderColor: theme.divider
352
+ },
353
+ agePickerLabel: {
354
+ fontSize: 14,
355
+ color: theme.onBackground
356
+ },
357
+ pickerContainer: {
358
+ width: 120,
359
+ height: 40,
360
+ borderWidth: 1,
361
+ borderColor: theme.border,
362
+ borderRadius: 8,
363
+ justifyContent: "center"
364
+ },
365
+ pickerInput: {
366
+ fontSize: 14,
367
+ paddingHorizontal: 10,
368
+ paddingVertical: 8,
369
+ color: theme.onSurface
370
+ },
371
+ pickerIconContainer: {
372
+ top: 10,
373
+ right: 10
243
374
  }
244
375
  });
245
376
  export default HotelSummary;