@webority-technologies/mobile 0.0.15 → 0.0.20

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 (202) hide show
  1. package/lib/commonjs/components/Accordion/Accordion.js +60 -19
  2. package/lib/commonjs/components/AppBar/AppBar.js +29 -20
  3. package/lib/commonjs/components/Avatar/Avatar.js +38 -8
  4. package/lib/commonjs/components/Badge/Badge.js +66 -4
  5. package/lib/commonjs/components/Banner/Banner.js +146 -66
  6. package/lib/commonjs/components/BottomNavigation/BottomNavigation.js +37 -15
  7. package/lib/commonjs/components/BottomSheet/BottomSheet.js +78 -53
  8. package/lib/commonjs/components/Button/Button.js +12 -5
  9. package/lib/commonjs/components/Card/Card.js +106 -16
  10. package/lib/commonjs/components/Carousel/Carousel.js +66 -12
  11. package/lib/commonjs/components/Checkbox/Checkbox.js +11 -7
  12. package/lib/commonjs/components/Chip/Chip.js +44 -12
  13. package/lib/commonjs/components/DatePicker/DatePicker.js +185 -76
  14. package/lib/commonjs/components/DateRangePicker/DateRangePicker.js +133 -59
  15. package/lib/commonjs/components/Dialog/Dialog.js +16 -10
  16. package/lib/commonjs/components/Drawer/Drawer.js +13 -10
  17. package/lib/commonjs/components/FieldBase/FieldBase.js +306 -0
  18. package/lib/commonjs/components/FieldBase/index.js +32 -0
  19. package/lib/commonjs/components/FloatingActionButton/FloatingActionButton.js +69 -44
  20. package/lib/commonjs/components/ForceUpdateDialog/ForceUpdateDialog.js +8 -2
  21. package/lib/commonjs/components/FormField/FormField.js +3 -2
  22. package/lib/commonjs/components/ImageGallery/ImageGallery.js +132 -44
  23. package/lib/commonjs/components/Input/Input.js +144 -181
  24. package/lib/commonjs/components/ListItem/ListItem.js +90 -11
  25. package/lib/commonjs/components/Modal/Modal.js +55 -27
  26. package/lib/commonjs/components/NumberInput/NumberInput.js +60 -106
  27. package/lib/commonjs/components/OTPInput/OTPInput.js +65 -58
  28. package/lib/commonjs/components/PickerTrigger/PickerTrigger.js +185 -0
  29. package/lib/commonjs/components/{AppIcon → PickerTrigger}/index.js +4 -4
  30. package/lib/commonjs/components/ProgressBar/ProgressBar.js +19 -11
  31. package/lib/commonjs/components/Radio/Radio.js +11 -6
  32. package/lib/commonjs/components/Rating/Rating.js +85 -19
  33. package/lib/commonjs/components/SearchBar/SearchBar.js +84 -107
  34. package/lib/commonjs/components/SegmentedControl/SegmentedControl.js +22 -11
  35. package/lib/commonjs/components/Select/Select.js +62 -91
  36. package/lib/commonjs/components/Skeleton/Skeleton.js +131 -174
  37. package/lib/commonjs/components/Skeleton/SkeletonClock.js +117 -0
  38. package/lib/commonjs/components/Skeleton/SkeletonContent.js +164 -81
  39. package/lib/commonjs/components/Skeleton/SkeletonProvider.js +72 -10
  40. package/lib/commonjs/components/Skeleton/index.js +17 -16
  41. package/lib/commonjs/components/Slider/Slider.js +44 -25
  42. package/lib/commonjs/components/Stepper/Stepper.js +199 -29
  43. package/lib/commonjs/components/Swipeable/Swipeable.js +36 -19
  44. package/lib/commonjs/components/Switch/Switch.js +9 -2
  45. package/lib/commonjs/components/Tabs/Tabs.js +84 -21
  46. package/lib/commonjs/components/TimePicker/TimePicker.js +123 -45
  47. package/lib/commonjs/components/Toast/Toast.js +27 -16
  48. package/lib/commonjs/components/Tooltip/Tooltip.js +56 -32
  49. package/lib/commonjs/components/index.js +37 -37
  50. package/lib/commonjs/theme/tokens.js +55 -7
  51. package/lib/module/components/Accordion/Accordion.js +61 -20
  52. package/lib/module/components/AppBar/AppBar.js +29 -20
  53. package/lib/module/components/Avatar/Avatar.js +39 -9
  54. package/lib/module/components/Badge/Badge.js +67 -5
  55. package/lib/module/components/Banner/Banner.js +147 -67
  56. package/lib/module/components/BottomNavigation/BottomNavigation.js +37 -15
  57. package/lib/module/components/BottomSheet/BottomSheet.js +80 -55
  58. package/lib/module/components/Button/Button.js +12 -5
  59. package/lib/module/components/Card/Card.js +107 -17
  60. package/lib/module/components/Carousel/Carousel.js +67 -13
  61. package/lib/module/components/Checkbox/Checkbox.js +11 -7
  62. package/lib/module/components/Chip/Chip.js +45 -13
  63. package/lib/module/components/DatePicker/DatePicker.js +185 -76
  64. package/lib/module/components/DateRangePicker/DateRangePicker.js +134 -60
  65. package/lib/module/components/Dialog/Dialog.js +16 -10
  66. package/lib/module/components/Drawer/Drawer.js +13 -10
  67. package/lib/module/components/FieldBase/FieldBase.js +297 -0
  68. package/lib/module/components/FieldBase/index.js +4 -0
  69. package/lib/module/components/FloatingActionButton/FloatingActionButton.js +69 -44
  70. package/lib/module/components/ForceUpdateDialog/ForceUpdateDialog.js +8 -2
  71. package/lib/module/components/FormField/FormField.js +3 -2
  72. package/lib/module/components/ImageGallery/ImageGallery.js +128 -40
  73. package/lib/module/components/Input/Input.js +144 -179
  74. package/lib/module/components/ListItem/ListItem.js +91 -12
  75. package/lib/module/components/Modal/Modal.js +55 -27
  76. package/lib/module/components/NumberInput/NumberInput.js +60 -106
  77. package/lib/module/components/OTPInput/OTPInput.js +65 -58
  78. package/lib/module/components/PickerTrigger/PickerTrigger.js +181 -0
  79. package/lib/module/components/PickerTrigger/index.js +4 -0
  80. package/lib/module/components/ProgressBar/ProgressBar.js +19 -11
  81. package/lib/module/components/Radio/Radio.js +11 -6
  82. package/lib/module/components/Rating/Rating.js +86 -20
  83. package/lib/module/components/SearchBar/SearchBar.js +84 -107
  84. package/lib/module/components/SegmentedControl/SegmentedControl.js +22 -11
  85. package/lib/module/components/Select/Select.js +62 -91
  86. package/lib/module/components/Skeleton/Skeleton.js +135 -175
  87. package/lib/module/components/Skeleton/SkeletonClock.js +110 -0
  88. package/lib/module/components/Skeleton/SkeletonContent.js +167 -84
  89. package/lib/module/components/Skeleton/SkeletonProvider.js +71 -10
  90. package/lib/module/components/Skeleton/index.js +3 -2
  91. package/lib/module/components/Slider/Slider.js +44 -25
  92. package/lib/module/components/Stepper/Stepper.js +201 -31
  93. package/lib/module/components/Swipeable/Swipeable.js +36 -19
  94. package/lib/module/components/Switch/Switch.js +9 -2
  95. package/lib/module/components/Tabs/Tabs.js +84 -21
  96. package/lib/module/components/TimePicker/TimePicker.js +123 -45
  97. package/lib/module/components/Toast/Toast.js +27 -16
  98. package/lib/module/components/Tooltip/Tooltip.js +56 -32
  99. package/lib/module/components/index.js +2 -2
  100. package/lib/module/theme/tokens.js +55 -7
  101. package/lib/typescript/commonjs/components/Accordion/Accordion.d.ts +10 -5
  102. package/lib/typescript/commonjs/components/AppBar/AppBar.d.ts +8 -0
  103. package/lib/typescript/commonjs/components/Avatar/Avatar.d.ts +12 -6
  104. package/lib/typescript/commonjs/components/Badge/Badge.d.ts +7 -6
  105. package/lib/typescript/commonjs/components/Banner/Banner.d.ts +17 -6
  106. package/lib/typescript/commonjs/components/BottomSheet/BottomSheet.d.ts +7 -0
  107. package/lib/typescript/commonjs/components/Card/Card.d.ts +17 -6
  108. package/lib/typescript/commonjs/components/Carousel/Carousel.d.ts +7 -6
  109. package/lib/typescript/commonjs/components/Checkbox/Checkbox.d.ts +9 -1
  110. package/lib/typescript/commonjs/components/Chip/Chip.d.ts +13 -6
  111. package/lib/typescript/commonjs/components/DatePicker/DatePicker.d.ts +38 -3
  112. package/lib/typescript/commonjs/components/DateRangePicker/DateRangePicker.d.ts +36 -3
  113. package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts +13 -1
  114. package/lib/typescript/commonjs/components/FieldBase/FieldBase.d.ts +141 -0
  115. package/lib/typescript/commonjs/components/FieldBase/index.d.ts +3 -0
  116. package/lib/typescript/commonjs/components/FloatingActionButton/FloatingActionButton.d.ts +8 -6
  117. package/lib/typescript/commonjs/components/FloatingActionButton/index.d.ts +1 -1
  118. package/lib/typescript/commonjs/components/ForceUpdateDialog/ForceUpdateDialog.d.ts +7 -0
  119. package/lib/typescript/commonjs/components/FormField/FormField.d.ts +7 -0
  120. package/lib/typescript/commonjs/components/ImageGallery/ImageGallery.d.ts +6 -4
  121. package/lib/typescript/commonjs/components/Input/Input.d.ts +6 -0
  122. package/lib/typescript/commonjs/components/ListItem/ListItem.d.ts +13 -6
  123. package/lib/typescript/commonjs/components/NumberInput/NumberInput.d.ts +3 -0
  124. package/lib/typescript/commonjs/components/PickerTrigger/PickerTrigger.d.ts +57 -0
  125. package/lib/typescript/commonjs/components/PickerTrigger/index.d.ts +3 -0
  126. package/lib/typescript/commonjs/components/ProgressBar/ProgressBar.d.ts +2 -0
  127. package/lib/typescript/commonjs/components/Radio/Radio.d.ts +3 -0
  128. package/lib/typescript/commonjs/components/Rating/Rating.d.ts +9 -6
  129. package/lib/typescript/commonjs/components/SegmentedControl/SegmentedControl.d.ts +3 -0
  130. package/lib/typescript/commonjs/components/Skeleton/Skeleton.d.ts +49 -20
  131. package/lib/typescript/commonjs/components/Skeleton/SkeletonClock.d.ts +60 -0
  132. package/lib/typescript/commonjs/components/Skeleton/SkeletonContent.d.ts +80 -19
  133. package/lib/typescript/commonjs/components/Skeleton/SkeletonProvider.d.ts +39 -5
  134. package/lib/typescript/commonjs/components/Skeleton/index.d.ts +6 -4
  135. package/lib/typescript/commonjs/components/Slider/Slider.d.ts +12 -1
  136. package/lib/typescript/commonjs/components/Stepper/Stepper.d.ts +18 -6
  137. package/lib/typescript/commonjs/components/Swipeable/Swipeable.d.ts +2 -0
  138. package/lib/typescript/commonjs/components/Switch/Switch.d.ts +1 -0
  139. package/lib/typescript/commonjs/components/Tabs/Tabs.d.ts +26 -2
  140. package/lib/typescript/commonjs/components/TimePicker/TimePicker.d.ts +36 -3
  141. package/lib/typescript/commonjs/components/Toast/Toast.d.ts +8 -0
  142. package/lib/typescript/commonjs/components/Tooltip/Tooltip.d.ts +7 -1
  143. package/lib/typescript/commonjs/components/index.d.ts +5 -5
  144. package/lib/typescript/commonjs/index.d.ts +1 -1
  145. package/lib/typescript/commonjs/theme/index.d.ts +1 -1
  146. package/lib/typescript/commonjs/theme/types.d.ts +553 -11
  147. package/lib/typescript/module/components/Accordion/Accordion.d.ts +10 -5
  148. package/lib/typescript/module/components/AppBar/AppBar.d.ts +8 -0
  149. package/lib/typescript/module/components/Avatar/Avatar.d.ts +12 -6
  150. package/lib/typescript/module/components/Badge/Badge.d.ts +7 -6
  151. package/lib/typescript/module/components/Banner/Banner.d.ts +17 -6
  152. package/lib/typescript/module/components/BottomSheet/BottomSheet.d.ts +7 -0
  153. package/lib/typescript/module/components/Card/Card.d.ts +17 -6
  154. package/lib/typescript/module/components/Carousel/Carousel.d.ts +7 -6
  155. package/lib/typescript/module/components/Checkbox/Checkbox.d.ts +9 -1
  156. package/lib/typescript/module/components/Chip/Chip.d.ts +13 -6
  157. package/lib/typescript/module/components/DatePicker/DatePicker.d.ts +38 -3
  158. package/lib/typescript/module/components/DateRangePicker/DateRangePicker.d.ts +36 -3
  159. package/lib/typescript/module/components/Dialog/Dialog.d.ts +13 -1
  160. package/lib/typescript/module/components/FieldBase/FieldBase.d.ts +141 -0
  161. package/lib/typescript/module/components/FieldBase/index.d.ts +3 -0
  162. package/lib/typescript/module/components/FloatingActionButton/FloatingActionButton.d.ts +8 -6
  163. package/lib/typescript/module/components/FloatingActionButton/index.d.ts +1 -1
  164. package/lib/typescript/module/components/ForceUpdateDialog/ForceUpdateDialog.d.ts +7 -0
  165. package/lib/typescript/module/components/FormField/FormField.d.ts +7 -0
  166. package/lib/typescript/module/components/ImageGallery/ImageGallery.d.ts +6 -4
  167. package/lib/typescript/module/components/Input/Input.d.ts +6 -0
  168. package/lib/typescript/module/components/ListItem/ListItem.d.ts +13 -6
  169. package/lib/typescript/module/components/NumberInput/NumberInput.d.ts +3 -0
  170. package/lib/typescript/module/components/PickerTrigger/PickerTrigger.d.ts +57 -0
  171. package/lib/typescript/module/components/PickerTrigger/index.d.ts +3 -0
  172. package/lib/typescript/module/components/ProgressBar/ProgressBar.d.ts +2 -0
  173. package/lib/typescript/module/components/Radio/Radio.d.ts +3 -0
  174. package/lib/typescript/module/components/Rating/Rating.d.ts +9 -6
  175. package/lib/typescript/module/components/SegmentedControl/SegmentedControl.d.ts +3 -0
  176. package/lib/typescript/module/components/Skeleton/Skeleton.d.ts +49 -20
  177. package/lib/typescript/module/components/Skeleton/SkeletonClock.d.ts +60 -0
  178. package/lib/typescript/module/components/Skeleton/SkeletonContent.d.ts +80 -19
  179. package/lib/typescript/module/components/Skeleton/SkeletonProvider.d.ts +39 -5
  180. package/lib/typescript/module/components/Skeleton/index.d.ts +6 -4
  181. package/lib/typescript/module/components/Slider/Slider.d.ts +12 -1
  182. package/lib/typescript/module/components/Stepper/Stepper.d.ts +18 -6
  183. package/lib/typescript/module/components/Swipeable/Swipeable.d.ts +2 -0
  184. package/lib/typescript/module/components/Switch/Switch.d.ts +1 -0
  185. package/lib/typescript/module/components/Tabs/Tabs.d.ts +26 -2
  186. package/lib/typescript/module/components/TimePicker/TimePicker.d.ts +36 -3
  187. package/lib/typescript/module/components/Toast/Toast.d.ts +8 -0
  188. package/lib/typescript/module/components/Tooltip/Tooltip.d.ts +7 -1
  189. package/lib/typescript/module/components/index.d.ts +5 -5
  190. package/lib/typescript/module/index.d.ts +1 -1
  191. package/lib/typescript/module/theme/index.d.ts +1 -1
  192. package/lib/typescript/module/theme/types.d.ts +553 -11
  193. package/package.json +2 -6
  194. package/lib/commonjs/components/AppIcon/AppIcon.js +0 -120
  195. package/lib/commonjs/types/vector-icons.d.js +0 -2
  196. package/lib/module/components/AppIcon/AppIcon.js +0 -111
  197. package/lib/module/components/AppIcon/index.js +0 -4
  198. package/lib/module/types/vector-icons.d.js +0 -2
  199. package/lib/typescript/commonjs/components/AppIcon/AppIcon.d.ts +0 -20
  200. package/lib/typescript/commonjs/components/AppIcon/index.d.ts +0 -3
  201. package/lib/typescript/module/components/AppIcon/AppIcon.d.ts +0 -20
  202. package/lib/typescript/module/components/AppIcon/index.d.ts +0 -3
@@ -24,14 +24,15 @@ import { Dimensions, Image, Modal as RNModal, Pressable, StyleSheet, Text, View
24
24
  import { Gesture, GestureDetector } from 'react-native-gesture-handler';
25
25
  import Animated, { runOnJS, useAnimatedStyle, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
26
26
  import { Carousel } from "../Carousel/index.js";
27
- import { AppIcon } from "../AppIcon/index.js";
28
- import { SkeletonContent } from "../Skeleton/index.js";
27
+ import { Skeleton } from "../Skeleton/index.js";
29
28
  import { useTheme } from "../../theme/index.js";
30
29
  import { triggerHaptic } from "../../utils/index.js";
30
+
31
+ // Local shape mirror — see types.ts ImageGalleryTokens for the canonical definition.
31
32
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
32
- const MAX_SCALE = 4;
33
- const MIN_SCALE = 1;
34
- const DOUBLE_TAP_SCALE = 2;
33
+ const MAX_SCALE_FALLBACK = 4;
34
+ const MIN_SCALE_FALLBACK = 1;
35
+ const DOUBLE_TAP_SCALE_FALLBACK = 2;
35
36
  const SPRING_CONFIG = {
36
37
  damping: 18,
37
38
  stiffness: 220,
@@ -52,6 +53,8 @@ const ImageGallery = ({
52
53
  }) => {
53
54
  const theme = useTheme();
54
55
  const styles = useMemo(() => buildStyles(theme), [theme]);
56
+ const galleryTokens = theme.components.imageGallery;
57
+ const pressHaptic = galleryTokens?.pressHaptic ?? false;
55
58
  const [currentIndex, setCurrentIndex] = useState(clamp(initialIndex, 0, Math.max(0, images.length - 1)));
56
59
  const [lightboxOpen, setLightboxOpen] = useState(false);
57
60
  const handleIndexChange = useCallback(idx => {
@@ -60,13 +63,13 @@ const ImageGallery = ({
60
63
  }, [onIndexChange]);
61
64
  const openLightbox = useCallback(() => {
62
65
  if (!enableLightbox) return;
63
- triggerHaptic('selection');
66
+ if (pressHaptic) triggerHaptic('selection');
64
67
  setLightboxOpen(true);
65
- }, [enableLightbox]);
68
+ }, [enableLightbox, pressHaptic]);
66
69
  const closeLightbox = useCallback(() => {
67
- triggerHaptic('selection');
70
+ if (pressHaptic) triggerHaptic('selection');
68
71
  setLightboxOpen(false);
69
- }, []);
72
+ }, [pressHaptic]);
70
73
  const renderImage = useCallback((image, idx) => {
71
74
  const a11y = image.alt ?? `Image ${idx + 1} of ${images.length}`;
72
75
  return /*#__PURE__*/_jsx(Pressable, {
@@ -119,20 +122,86 @@ const ImageGallery = ({
119
122
  enablePinchZoom: enablePinchZoom,
120
123
  showCounter: showCounter,
121
124
  onClose: closeLightbox,
122
- onIndexChange: handleIndexChange
125
+ onIndexChange: handleIndexChange,
126
+ pressHaptic: pressHaptic
123
127
  }) : null]
124
128
  });
125
129
  if (loading) {
126
- return /*#__PURE__*/_jsx(SkeletonContent, {
127
- loading: true,
128
- mode: "auto",
129
- children: rendered
130
+ return /*#__PURE__*/_jsx(ImageGallerySkeleton, {
131
+ images: images,
132
+ showThumbnails: showThumbnails,
133
+ showCounter: showCounter,
134
+ containerStyle: containerStyle,
135
+ testID: testID
130
136
  });
131
137
  }
132
138
  return rendered;
133
139
  };
134
140
  ImageGallery.displayName = 'ImageGallery';
135
141
 
142
+ /**
143
+ * Placeholder shape for `<ImageGallery>`. Hero image block + optional
144
+ * counter pill + thumbnail strip. Heights are tuned to match the live
145
+ * component's defaults so the gallery doesn't reflow when ready.
146
+ */
147
+ const ImageGallerySkeleton = ({
148
+ images,
149
+ showThumbnails = true,
150
+ showCounter = true,
151
+ containerStyle,
152
+ testID
153
+ }) => {
154
+ const thumbCount = Math.min(images?.length || 4, 6);
155
+ return /*#__PURE__*/_jsxs(View, {
156
+ style: [{
157
+ width: '100%'
158
+ }, containerStyle],
159
+ testID: testID,
160
+ accessibilityRole: "progressbar",
161
+ accessibilityState: {
162
+ busy: true
163
+ },
164
+ children: [/*#__PURE__*/_jsxs(View, {
165
+ style: {
166
+ position: 'relative'
167
+ },
168
+ children: [/*#__PURE__*/_jsx(Skeleton, {
169
+ width: "100%",
170
+ height: 280,
171
+ radius: "lg"
172
+ }), showCounter ? /*#__PURE__*/_jsx(View, {
173
+ style: {
174
+ position: 'absolute',
175
+ top: 12,
176
+ right: 12
177
+ },
178
+ children: /*#__PURE__*/_jsx(Skeleton, {
179
+ width: 44,
180
+ height: 22,
181
+ radius: "full"
182
+ })
183
+ }) : null]
184
+ }), showThumbnails ? /*#__PURE__*/_jsx(View, {
185
+ style: {
186
+ flexDirection: 'row',
187
+ marginTop: 12
188
+ },
189
+ children: Array.from({
190
+ length: thumbCount
191
+ }).map((_, i) => /*#__PURE__*/_jsx(Skeleton, {
192
+ width: 64,
193
+ height: 64,
194
+ radius: "md",
195
+ style: {
196
+ marginRight: 8
197
+ }
198
+ }, `sk-thumb-${i}`))
199
+ }) : null]
200
+ });
201
+ };
202
+ ImageGallerySkeleton.displayName = 'ImageGallerySkeleton';
203
+ ImageGallery.Skeleton = ImageGallerySkeleton;
204
+
136
205
  // ───────── Lightbox ─────────
137
206
 
138
207
  const Lightbox = ({
@@ -142,26 +211,35 @@ const Lightbox = ({
142
211
  enablePinchZoom,
143
212
  showCounter,
144
213
  onClose,
145
- onIndexChange
214
+ onIndexChange,
215
+ pressHaptic
146
216
  }) => {
147
217
  const theme = useTheme();
148
218
  const styles = useMemo(() => buildLightboxStyles(theme), [theme]);
219
+ const galleryTokens = theme.components.imageGallery;
220
+ const maxScale = galleryTokens?.maxScale ?? MAX_SCALE_FALLBACK;
221
+ const minScale = galleryTokens?.minScale ?? MIN_SCALE_FALLBACK;
222
+ const doubleTapScale = galleryTokens?.doubleTapScale ?? DOUBLE_TAP_SCALE_FALLBACK;
149
223
  const carouselRef = useRef(null);
150
224
  const [activeIndex, setActiveIndex] = useState(initialIndex);
151
225
  const handleSwipe = useCallback(idx => {
152
226
  if (idx !== activeIndex) {
153
- triggerHaptic('selection');
227
+ if (pressHaptic) triggerHaptic('selection');
154
228
  setActiveIndex(idx);
155
229
  onIndexChange(idx);
156
230
  }
157
- }, [activeIndex, onIndexChange]);
231
+ }, [activeIndex, onIndexChange, pressHaptic]);
158
232
  const renderItem = useCallback((image, idx) => /*#__PURE__*/_jsx(ZoomableImage, {
159
233
  image: image,
160
234
  index: idx,
161
235
  total: images.length,
162
236
  active: idx === activeIndex,
163
- enabled: enablePinchZoom
164
- }), [activeIndex, enablePinchZoom, images.length]);
237
+ enabled: enablePinchZoom,
238
+ maxScale: maxScale,
239
+ minScale: minScale,
240
+ doubleTapScale: doubleTapScale,
241
+ pressHaptic: pressHaptic
242
+ }), [activeIndex, enablePinchZoom, images.length, maxScale, minScale, doubleTapScale, pressHaptic]);
165
243
  const caption = images[activeIndex]?.caption;
166
244
  return /*#__PURE__*/_jsx(RNModal, {
167
245
  visible: visible,
@@ -197,11 +275,15 @@ const Lightbox = ({
197
275
  accessibilityLabel: "Close gallery",
198
276
  style: styles.closeButton,
199
277
  hitSlop: 12,
200
- children: /*#__PURE__*/_jsx(AppIcon, {
201
- name: "x",
202
- family: "feather",
203
- size: "lg",
278
+ children: theme.icons?.close ? theme.icons.close({
279
+ size: 24,
204
280
  color: theme.colors.text.inverse
281
+ }) : /*#__PURE__*/_jsx(Text, {
282
+ style: {
283
+ fontSize: 24,
284
+ color: theme.colors.text.inverse
285
+ },
286
+ children: "\xD7"
205
287
  })
206
288
  }), caption ? /*#__PURE__*/_jsx(Animated.View, {
207
289
  style: styles.captionWrap,
@@ -224,7 +306,11 @@ const ZoomableImage = ({
224
306
  index,
225
307
  total,
226
308
  active,
227
- enabled
309
+ enabled,
310
+ maxScale,
311
+ minScale,
312
+ doubleTapScale,
313
+ pressHaptic
228
314
  }) => {
229
315
  const screen = Dimensions.get('window');
230
316
  const scale = useSharedValue(1);
@@ -259,7 +345,9 @@ const ZoomableImage = ({
259
345
  savedTranslateY.value = 0;
260
346
  }
261
347
  }, [active, scale, translateX, translateY, savedScale, savedTranslateX, savedTranslateY]);
262
- const triggerImpact = useCallback(() => triggerHaptic('impactLight'), []);
348
+ const triggerImpact = useCallback(() => {
349
+ if (pressHaptic) triggerHaptic('impactLight');
350
+ }, [pressHaptic]);
263
351
  const pinch = useMemo(() => Gesture.Pinch().enabled(enabled).onStart(() => {
264
352
  'worklet';
265
353
 
@@ -268,33 +356,33 @@ const ZoomableImage = ({
268
356
  'worklet';
269
357
 
270
358
  const next = savedScale.value * e.scale;
271
- // Clamp 1..MAX_SCALE on the UI thread so pinch feels rubbery at limits.
272
- if (next < MIN_SCALE) {
273
- scale.value = MIN_SCALE + (next - MIN_SCALE) * 0.3;
274
- } else if (next > MAX_SCALE) {
275
- scale.value = MAX_SCALE + (next - MAX_SCALE) * 0.2;
359
+ // Clamp minScale..maxScale on the UI thread so pinch feels rubbery at limits.
360
+ if (next < minScale) {
361
+ scale.value = minScale + (next - minScale) * 0.3;
362
+ } else if (next > maxScale) {
363
+ scale.value = maxScale + (next - maxScale) * 0.2;
276
364
  } else {
277
365
  scale.value = next;
278
366
  }
279
367
  }).onEnd(() => {
280
368
  'worklet';
281
369
 
282
- if (scale.value < MIN_SCALE) {
283
- scale.value = withSpring(MIN_SCALE, SPRING_CONFIG);
370
+ if (scale.value < minScale) {
371
+ scale.value = withSpring(minScale, SPRING_CONFIG);
284
372
  translateX.value = withSpring(0, SPRING_CONFIG);
285
373
  translateY.value = withSpring(0, SPRING_CONFIG);
286
- savedScale.value = MIN_SCALE;
374
+ savedScale.value = minScale;
287
375
  savedTranslateX.value = 0;
288
376
  savedTranslateY.value = 0;
289
377
  return;
290
378
  }
291
- if (scale.value > MAX_SCALE) {
292
- scale.value = withSpring(MAX_SCALE, SPRING_CONFIG);
293
- savedScale.value = MAX_SCALE;
379
+ if (scale.value > maxScale) {
380
+ scale.value = withSpring(maxScale, SPRING_CONFIG);
381
+ savedScale.value = maxScale;
294
382
  return;
295
383
  }
296
384
  savedScale.value = scale.value;
297
- }), [enabled, scale, savedScale, translateX, translateY, savedTranslateX, savedTranslateY]);
385
+ }), [enabled, scale, savedScale, translateX, translateY, savedTranslateX, savedTranslateY, minScale, maxScale]);
298
386
 
299
387
  // Pan only engages when zoomed in — otherwise the parent Carousel owns horizontal swipe.
300
388
  const pan = useMemo(() => Gesture.Pan().minPointers(1).maxPointers(1).onStart(() => {
@@ -326,10 +414,10 @@ const ZoomableImage = ({
326
414
  savedTranslateX.value = 0;
327
415
  savedTranslateY.value = 0;
328
416
  } else {
329
- scale.value = withSpring(DOUBLE_TAP_SCALE, SPRING_CONFIG);
330
- savedScale.value = DOUBLE_TAP_SCALE;
417
+ scale.value = withSpring(doubleTapScale, SPRING_CONFIG);
418
+ savedScale.value = doubleTapScale;
331
419
  }
332
- }), [scale, savedScale, translateX, translateY, savedTranslateX, savedTranslateY, triggerImpact]);
420
+ }), [scale, savedScale, translateX, translateY, savedTranslateX, savedTranslateY, triggerImpact, doubleTapScale]);
333
421
 
334
422
  // Race the gestures so they coordinate cleanly: a tap won't be misread as a tiny pan,
335
423
  // and pan won't fire when the user actually starts a pinch.