@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
@@ -9,10 +9,9 @@ var _reactNative = require("react-native");
9
9
  var _reactNativeGestureHandler = require("react-native-gesture-handler");
10
10
  var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
11
11
  var _index = require("../Carousel/index.js");
12
- var _index2 = require("../AppIcon/index.js");
13
- var _index3 = require("../Skeleton/index.js");
14
- var _index4 = require("../../theme/index.js");
15
- var _index5 = require("../../utils/index.js");
12
+ var _index2 = require("../Skeleton/index.js");
13
+ var _index3 = require("../../theme/index.js");
14
+ var _index4 = require("../../utils/index.js");
16
15
  var _jsxRuntime = require("react/jsx-runtime");
17
16
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
18
17
  /**
@@ -34,9 +33,11 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
34
33
  * />
35
34
  */
36
35
 
37
- const MAX_SCALE = 4;
38
- const MIN_SCALE = 1;
39
- const DOUBLE_TAP_SCALE = 2;
36
+ // Local shape mirror — see types.ts ImageGalleryTokens for the canonical definition.
37
+
38
+ const MAX_SCALE_FALLBACK = 4;
39
+ const MIN_SCALE_FALLBACK = 1;
40
+ const DOUBLE_TAP_SCALE_FALLBACK = 2;
40
41
  const SPRING_CONFIG = {
41
42
  damping: 18,
42
43
  stiffness: 220,
@@ -55,8 +56,10 @@ const ImageGallery = ({
55
56
  containerStyle,
56
57
  testID
57
58
  }) => {
58
- const theme = (0, _index4.useTheme)();
59
+ const theme = (0, _index3.useTheme)();
59
60
  const styles = (0, _react.useMemo)(() => buildStyles(theme), [theme]);
61
+ const galleryTokens = theme.components.imageGallery;
62
+ const pressHaptic = galleryTokens?.pressHaptic ?? false;
60
63
  const [currentIndex, setCurrentIndex] = (0, _react.useState)(clamp(initialIndex, 0, Math.max(0, images.length - 1)));
61
64
  const [lightboxOpen, setLightboxOpen] = (0, _react.useState)(false);
62
65
  const handleIndexChange = (0, _react.useCallback)(idx => {
@@ -65,13 +68,13 @@ const ImageGallery = ({
65
68
  }, [onIndexChange]);
66
69
  const openLightbox = (0, _react.useCallback)(() => {
67
70
  if (!enableLightbox) return;
68
- (0, _index5.triggerHaptic)('selection');
71
+ if (pressHaptic) (0, _index4.triggerHaptic)('selection');
69
72
  setLightboxOpen(true);
70
- }, [enableLightbox]);
73
+ }, [enableLightbox, pressHaptic]);
71
74
  const closeLightbox = (0, _react.useCallback)(() => {
72
- (0, _index5.triggerHaptic)('selection');
75
+ if (pressHaptic) (0, _index4.triggerHaptic)('selection');
73
76
  setLightboxOpen(false);
74
- }, []);
77
+ }, [pressHaptic]);
75
78
  const renderImage = (0, _react.useCallback)((image, idx) => {
76
79
  const a11y = image.alt ?? `Image ${idx + 1} of ${images.length}`;
77
80
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
@@ -124,14 +127,17 @@ const ImageGallery = ({
124
127
  enablePinchZoom: enablePinchZoom,
125
128
  showCounter: showCounter,
126
129
  onClose: closeLightbox,
127
- onIndexChange: handleIndexChange
130
+ onIndexChange: handleIndexChange,
131
+ pressHaptic: pressHaptic
128
132
  }) : null]
129
133
  });
130
134
  if (loading) {
131
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_index3.SkeletonContent, {
132
- loading: true,
133
- mode: "auto",
134
- children: rendered
135
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(ImageGallerySkeleton, {
136
+ images: images,
137
+ showThumbnails: showThumbnails,
138
+ showCounter: showCounter,
139
+ containerStyle: containerStyle,
140
+ testID: testID
135
141
  });
136
142
  }
137
143
  return rendered;
@@ -139,6 +145,69 @@ const ImageGallery = ({
139
145
  exports.ImageGallery = ImageGallery;
140
146
  ImageGallery.displayName = 'ImageGallery';
141
147
 
148
+ /**
149
+ * Placeholder shape for `<ImageGallery>`. Hero image block + optional
150
+ * counter pill + thumbnail strip. Heights are tuned to match the live
151
+ * component's defaults so the gallery doesn't reflow when ready.
152
+ */
153
+ const ImageGallerySkeleton = ({
154
+ images,
155
+ showThumbnails = true,
156
+ showCounter = true,
157
+ containerStyle,
158
+ testID
159
+ }) => {
160
+ const thumbCount = Math.min(images?.length || 4, 6);
161
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
162
+ style: [{
163
+ width: '100%'
164
+ }, containerStyle],
165
+ testID: testID,
166
+ accessibilityRole: "progressbar",
167
+ accessibilityState: {
168
+ busy: true
169
+ },
170
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
171
+ style: {
172
+ position: 'relative'
173
+ },
174
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.Skeleton, {
175
+ width: "100%",
176
+ height: 280,
177
+ radius: "lg"
178
+ }), showCounter ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
179
+ style: {
180
+ position: 'absolute',
181
+ top: 12,
182
+ right: 12
183
+ },
184
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.Skeleton, {
185
+ width: 44,
186
+ height: 22,
187
+ radius: "full"
188
+ })
189
+ }) : null]
190
+ }), showThumbnails ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
191
+ style: {
192
+ flexDirection: 'row',
193
+ marginTop: 12
194
+ },
195
+ children: Array.from({
196
+ length: thumbCount
197
+ }).map((_, i) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.Skeleton, {
198
+ width: 64,
199
+ height: 64,
200
+ radius: "md",
201
+ style: {
202
+ marginRight: 8
203
+ }
204
+ }, `sk-thumb-${i}`))
205
+ }) : null]
206
+ });
207
+ };
208
+ ImageGallerySkeleton.displayName = 'ImageGallerySkeleton';
209
+ ImageGallery.Skeleton = ImageGallerySkeleton;
210
+
142
211
  // ───────── Lightbox ─────────
143
212
 
144
213
  const Lightbox = ({
@@ -148,26 +217,35 @@ const Lightbox = ({
148
217
  enablePinchZoom,
149
218
  showCounter,
150
219
  onClose,
151
- onIndexChange
220
+ onIndexChange,
221
+ pressHaptic
152
222
  }) => {
153
- const theme = (0, _index4.useTheme)();
223
+ const theme = (0, _index3.useTheme)();
154
224
  const styles = (0, _react.useMemo)(() => buildLightboxStyles(theme), [theme]);
225
+ const galleryTokens = theme.components.imageGallery;
226
+ const maxScale = galleryTokens?.maxScale ?? MAX_SCALE_FALLBACK;
227
+ const minScale = galleryTokens?.minScale ?? MIN_SCALE_FALLBACK;
228
+ const doubleTapScale = galleryTokens?.doubleTapScale ?? DOUBLE_TAP_SCALE_FALLBACK;
155
229
  const carouselRef = (0, _react.useRef)(null);
156
230
  const [activeIndex, setActiveIndex] = (0, _react.useState)(initialIndex);
157
231
  const handleSwipe = (0, _react.useCallback)(idx => {
158
232
  if (idx !== activeIndex) {
159
- (0, _index5.triggerHaptic)('selection');
233
+ if (pressHaptic) (0, _index4.triggerHaptic)('selection');
160
234
  setActiveIndex(idx);
161
235
  onIndexChange(idx);
162
236
  }
163
- }, [activeIndex, onIndexChange]);
237
+ }, [activeIndex, onIndexChange, pressHaptic]);
164
238
  const renderItem = (0, _react.useCallback)((image, idx) => /*#__PURE__*/(0, _jsxRuntime.jsx)(ZoomableImage, {
165
239
  image: image,
166
240
  index: idx,
167
241
  total: images.length,
168
242
  active: idx === activeIndex,
169
- enabled: enablePinchZoom
170
- }), [activeIndex, enablePinchZoom, images.length]);
243
+ enabled: enablePinchZoom,
244
+ maxScale: maxScale,
245
+ minScale: minScale,
246
+ doubleTapScale: doubleTapScale,
247
+ pressHaptic: pressHaptic
248
+ }), [activeIndex, enablePinchZoom, images.length, maxScale, minScale, doubleTapScale, pressHaptic]);
171
249
  const caption = images[activeIndex]?.caption;
172
250
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
173
251
  visible: visible,
@@ -203,11 +281,15 @@ const Lightbox = ({
203
281
  accessibilityLabel: "Close gallery",
204
282
  style: styles.closeButton,
205
283
  hitSlop: 12,
206
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.AppIcon, {
207
- name: "x",
208
- family: "feather",
209
- size: "lg",
284
+ children: theme.icons?.close ? theme.icons.close({
285
+ size: 24,
210
286
  color: theme.colors.text.inverse
287
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
288
+ style: {
289
+ fontSize: 24,
290
+ color: theme.colors.text.inverse
291
+ },
292
+ children: "\xD7"
211
293
  })
212
294
  }), caption ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
213
295
  style: styles.captionWrap,
@@ -230,7 +312,11 @@ const ZoomableImage = ({
230
312
  index,
231
313
  total,
232
314
  active,
233
- enabled
315
+ enabled,
316
+ maxScale,
317
+ minScale,
318
+ doubleTapScale,
319
+ pressHaptic
234
320
  }) => {
235
321
  const screen = _reactNative.Dimensions.get('window');
236
322
  const scale = (0, _reactNativeReanimated.useSharedValue)(1);
@@ -265,7 +351,9 @@ const ZoomableImage = ({
265
351
  savedTranslateY.value = 0;
266
352
  }
267
353
  }, [active, scale, translateX, translateY, savedScale, savedTranslateX, savedTranslateY]);
268
- const triggerImpact = (0, _react.useCallback)(() => (0, _index5.triggerHaptic)('impactLight'), []);
354
+ const triggerImpact = (0, _react.useCallback)(() => {
355
+ if (pressHaptic) (0, _index4.triggerHaptic)('impactLight');
356
+ }, [pressHaptic]);
269
357
  const pinch = (0, _react.useMemo)(() => _reactNativeGestureHandler.Gesture.Pinch().enabled(enabled).onStart(() => {
270
358
  'worklet';
271
359
 
@@ -274,33 +362,33 @@ const ZoomableImage = ({
274
362
  'worklet';
275
363
 
276
364
  const next = savedScale.value * e.scale;
277
- // Clamp 1..MAX_SCALE on the UI thread so pinch feels rubbery at limits.
278
- if (next < MIN_SCALE) {
279
- scale.value = MIN_SCALE + (next - MIN_SCALE) * 0.3;
280
- } else if (next > MAX_SCALE) {
281
- scale.value = MAX_SCALE + (next - MAX_SCALE) * 0.2;
365
+ // Clamp minScale..maxScale on the UI thread so pinch feels rubbery at limits.
366
+ if (next < minScale) {
367
+ scale.value = minScale + (next - minScale) * 0.3;
368
+ } else if (next > maxScale) {
369
+ scale.value = maxScale + (next - maxScale) * 0.2;
282
370
  } else {
283
371
  scale.value = next;
284
372
  }
285
373
  }).onEnd(() => {
286
374
  'worklet';
287
375
 
288
- if (scale.value < MIN_SCALE) {
289
- scale.value = (0, _reactNativeReanimated.withSpring)(MIN_SCALE, SPRING_CONFIG);
376
+ if (scale.value < minScale) {
377
+ scale.value = (0, _reactNativeReanimated.withSpring)(minScale, SPRING_CONFIG);
290
378
  translateX.value = (0, _reactNativeReanimated.withSpring)(0, SPRING_CONFIG);
291
379
  translateY.value = (0, _reactNativeReanimated.withSpring)(0, SPRING_CONFIG);
292
- savedScale.value = MIN_SCALE;
380
+ savedScale.value = minScale;
293
381
  savedTranslateX.value = 0;
294
382
  savedTranslateY.value = 0;
295
383
  return;
296
384
  }
297
- if (scale.value > MAX_SCALE) {
298
- scale.value = (0, _reactNativeReanimated.withSpring)(MAX_SCALE, SPRING_CONFIG);
299
- savedScale.value = MAX_SCALE;
385
+ if (scale.value > maxScale) {
386
+ scale.value = (0, _reactNativeReanimated.withSpring)(maxScale, SPRING_CONFIG);
387
+ savedScale.value = maxScale;
300
388
  return;
301
389
  }
302
390
  savedScale.value = scale.value;
303
- }), [enabled, scale, savedScale, translateX, translateY, savedTranslateX, savedTranslateY]);
391
+ }), [enabled, scale, savedScale, translateX, translateY, savedTranslateX, savedTranslateY, minScale, maxScale]);
304
392
 
305
393
  // Pan only engages when zoomed in — otherwise the parent Carousel owns horizontal swipe.
306
394
  const pan = (0, _react.useMemo)(() => _reactNativeGestureHandler.Gesture.Pan().minPointers(1).maxPointers(1).onStart(() => {
@@ -332,10 +420,10 @@ const ZoomableImage = ({
332
420
  savedTranslateX.value = 0;
333
421
  savedTranslateY.value = 0;
334
422
  } else {
335
- scale.value = (0, _reactNativeReanimated.withSpring)(DOUBLE_TAP_SCALE, SPRING_CONFIG);
336
- savedScale.value = DOUBLE_TAP_SCALE;
423
+ scale.value = (0, _reactNativeReanimated.withSpring)(doubleTapScale, SPRING_CONFIG);
424
+ savedScale.value = doubleTapScale;
337
425
  }
338
- }), [scale, savedScale, translateX, translateY, savedTranslateX, savedTranslateY, triggerImpact]);
426
+ }), [scale, savedScale, translateX, translateY, savedTranslateX, savedTranslateY, triggerImpact, doubleTapScale]);
339
427
 
340
428
  // Race the gestures so they coordinate cleanly: a tap won't be misread as a tiny pan,
341
429
  // and pan won't fire when the user actually starts a pinch.