@webority-technologies/mobile 0.0.5 → 0.0.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.
Files changed (62) hide show
  1. package/README.md +3 -435
  2. package/lib/commonjs/components/Accordion/Accordion.js +20 -1
  3. package/lib/commonjs/components/Banner/Banner.js +17 -5
  4. package/lib/commonjs/components/Button/Button.js +5 -2
  5. package/lib/commonjs/components/Carousel/Carousel.js +18 -1
  6. package/lib/commonjs/components/Chip/Chip.js +27 -15
  7. package/lib/commonjs/components/ImageGallery/ImageGallery.js +19 -9
  8. package/lib/commonjs/components/Rating/Rating.js +11 -1
  9. package/lib/commonjs/components/Skeleton/Skeleton.js +20 -12
  10. package/lib/commonjs/components/Skeleton/SkeletonContent.js +25 -9
  11. package/lib/commonjs/components/Skeleton/SkeletonList.js +7 -2
  12. package/lib/commonjs/components/Skeleton/SkeletonProvider.js +48 -0
  13. package/lib/commonjs/components/Skeleton/SkeletonSkip.js +37 -0
  14. package/lib/commonjs/components/Skeleton/index.js +20 -0
  15. package/lib/commonjs/components/Stepper/Stepper.js +13 -3
  16. package/lib/commonjs/components/index.js +18 -0
  17. package/lib/module/components/Accordion/Accordion.js +20 -1
  18. package/lib/module/components/Banner/Banner.js +17 -5
  19. package/lib/module/components/Button/Button.js +6 -3
  20. package/lib/module/components/Carousel/Carousel.js +18 -1
  21. package/lib/module/components/Chip/Chip.js +27 -15
  22. package/lib/module/components/ImageGallery/ImageGallery.js +11 -1
  23. package/lib/module/components/Rating/Rating.js +11 -1
  24. package/lib/module/components/Skeleton/Skeleton.js +20 -12
  25. package/lib/module/components/Skeleton/SkeletonContent.js +25 -9
  26. package/lib/module/components/Skeleton/SkeletonList.js +7 -2
  27. package/lib/module/components/Skeleton/SkeletonProvider.js +41 -0
  28. package/lib/module/components/Skeleton/SkeletonSkip.js +31 -0
  29. package/lib/module/components/Skeleton/index.js +2 -0
  30. package/lib/module/components/Stepper/Stepper.js +13 -3
  31. package/lib/module/components/index.js +1 -1
  32. package/lib/typescript/commonjs/components/Accordion/Accordion.d.ts +7 -0
  33. package/lib/typescript/commonjs/components/Banner/Banner.d.ts +6 -0
  34. package/lib/typescript/commonjs/components/Button/Button.d.ts +5 -0
  35. package/lib/typescript/commonjs/components/Carousel/Carousel.d.ts +7 -0
  36. package/lib/typescript/commonjs/components/Chip/Chip.d.ts +6 -0
  37. package/lib/typescript/commonjs/components/ImageGallery/ImageGallery.d.ts +6 -0
  38. package/lib/typescript/commonjs/components/Rating/Rating.d.ts +6 -0
  39. package/lib/typescript/commonjs/components/Skeleton/Skeleton.d.ts +9 -0
  40. package/lib/typescript/commonjs/components/Skeleton/SkeletonContent.d.ts +6 -0
  41. package/lib/typescript/commonjs/components/Skeleton/SkeletonList.d.ts +3 -0
  42. package/lib/typescript/commonjs/components/Skeleton/SkeletonProvider.d.ts +32 -0
  43. package/lib/typescript/commonjs/components/Skeleton/SkeletonSkip.d.ts +25 -0
  44. package/lib/typescript/commonjs/components/Skeleton/index.d.ts +4 -0
  45. package/lib/typescript/commonjs/components/Stepper/Stepper.d.ts +6 -0
  46. package/lib/typescript/commonjs/components/index.d.ts +2 -2
  47. package/lib/typescript/module/components/Accordion/Accordion.d.ts +7 -0
  48. package/lib/typescript/module/components/Banner/Banner.d.ts +6 -0
  49. package/lib/typescript/module/components/Button/Button.d.ts +5 -0
  50. package/lib/typescript/module/components/Carousel/Carousel.d.ts +7 -0
  51. package/lib/typescript/module/components/Chip/Chip.d.ts +6 -0
  52. package/lib/typescript/module/components/ImageGallery/ImageGallery.d.ts +6 -0
  53. package/lib/typescript/module/components/Rating/Rating.d.ts +6 -0
  54. package/lib/typescript/module/components/Skeleton/Skeleton.d.ts +9 -0
  55. package/lib/typescript/module/components/Skeleton/SkeletonContent.d.ts +6 -0
  56. package/lib/typescript/module/components/Skeleton/SkeletonList.d.ts +3 -0
  57. package/lib/typescript/module/components/Skeleton/SkeletonProvider.d.ts +32 -0
  58. package/lib/typescript/module/components/Skeleton/SkeletonSkip.d.ts +25 -0
  59. package/lib/typescript/module/components/Skeleton/index.d.ts +4 -0
  60. package/lib/typescript/module/components/Stepper/Stepper.d.ts +6 -0
  61. package/lib/typescript/module/components/index.d.ts +2 -2
  62. package/package.json +1 -1
@@ -9,6 +9,7 @@ var _reactNative = require("react-native");
9
9
  var _index = require("../../theme/index.js");
10
10
  var _usePressAnimation = require("../../hooks/usePressAnimation.js");
11
11
  var _hapticUtils = require("../../utils/hapticUtils.js");
12
+ var _index2 = require("../Skeleton/index.js");
12
13
  var _jsxRuntime = require("react/jsx-runtime");
13
14
  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); }
14
15
  const toneFor = (theme, tone) => {
@@ -101,6 +102,7 @@ const Chip = exports.Chip = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
101
102
  tone = 'neutral',
102
103
  size = 'md',
103
104
  disabled = false,
105
+ loading = false,
104
106
  accessibilityLabel,
105
107
  style,
106
108
  textStyle,
@@ -159,7 +161,7 @@ const Chip = exports.Chip = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
159
161
  fontWeight: theme.typography.fontWeight.medium
160
162
  }, textStyle],
161
163
  numberOfLines: 1,
162
- children: label
164
+ children: label ?? ' '
163
165
  }), onClose ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
164
166
  onPress: handleClose,
165
167
  disabled: disabled,
@@ -200,8 +202,9 @@ const Chip = exports.Chip = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
200
202
  borderColor,
201
203
  opacity: disabled ? 0.55 : 1
202
204
  };
205
+ let rendered;
203
206
  if (isPressable) {
204
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
207
+ rendered = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
205
208
  style: {
206
209
  transform: [{
207
210
  scale
@@ -233,20 +236,29 @@ const Chip = exports.Chip = /*#__PURE__*/(0, _react.forwardRef)((props, ref) =>
233
236
  children: content
234
237
  })
235
238
  });
239
+ } else {
240
+ rendered = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
241
+ ref: ref,
242
+ style: [styles.base, baseStyle, style],
243
+ accessible: true,
244
+ accessibilityRole: "text",
245
+ accessibilityLabel: a11yLabel,
246
+ accessibilityState: {
247
+ selected,
248
+ disabled
249
+ },
250
+ testID: testID,
251
+ children: content
252
+ });
236
253
  }
237
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
238
- ref: ref,
239
- style: [styles.base, baseStyle, style],
240
- accessible: true,
241
- accessibilityRole: "text",
242
- accessibilityLabel: a11yLabel,
243
- accessibilityState: {
244
- selected,
245
- disabled
246
- },
247
- testID: testID,
248
- children: content
249
- });
254
+ if (loading) {
255
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.SkeletonContent, {
256
+ loading: true,
257
+ mode: "auto",
258
+ children: rendered
259
+ });
260
+ }
261
+ return rendered;
250
262
  });
251
263
  Chip.displayName = 'Chip';
252
264
  const styles = _reactNative.StyleSheet.create({
@@ -10,8 +10,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
12
  var _index2 = require("../AppIcon/index.js");
13
- var _index3 = require("../../theme/index.js");
14
- var _index4 = require("../../utils/index.js");
13
+ var _index3 = require("../Skeleton/index.js");
14
+ var _index4 = require("../../theme/index.js");
15
+ var _index5 = require("../../utils/index.js");
15
16
  var _jsxRuntime = require("react/jsx-runtime");
16
17
  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); }
17
18
  /**
@@ -49,11 +50,12 @@ const ImageGallery = ({
49
50
  enableLightbox = true,
50
51
  enablePinchZoom = true,
51
52
  onIndexChange,
53
+ loading = false,
52
54
  accessibilityLabel,
53
55
  containerStyle,
54
56
  testID
55
57
  }) => {
56
- const theme = (0, _index3.useTheme)();
58
+ const theme = (0, _index4.useTheme)();
57
59
  const styles = (0, _react.useMemo)(() => buildStyles(theme), [theme]);
58
60
  const [currentIndex, setCurrentIndex] = (0, _react.useState)(clamp(initialIndex, 0, Math.max(0, images.length - 1)));
59
61
  const [lightboxOpen, setLightboxOpen] = (0, _react.useState)(false);
@@ -63,11 +65,11 @@ const ImageGallery = ({
63
65
  }, [onIndexChange]);
64
66
  const openLightbox = (0, _react.useCallback)(() => {
65
67
  if (!enableLightbox) return;
66
- (0, _index4.triggerHaptic)('selection');
68
+ (0, _index5.triggerHaptic)('selection');
67
69
  setLightboxOpen(true);
68
70
  }, [enableLightbox]);
69
71
  const closeLightbox = (0, _react.useCallback)(() => {
70
- (0, _index4.triggerHaptic)('selection');
72
+ (0, _index5.triggerHaptic)('selection');
71
73
  setLightboxOpen(false);
72
74
  }, []);
73
75
  const renderImage = (0, _react.useCallback)((image, idx) => {
@@ -90,7 +92,7 @@ const ImageGallery = ({
90
92
  style: styles.thumbnailImage,
91
93
  resizeMode: "cover"
92
94
  }), [styles]);
93
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
95
+ const rendered = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
94
96
  style: [styles.container, containerStyle],
95
97
  testID: testID,
96
98
  accessibilityLabel: accessibilityLabel ?? 'Image gallery',
@@ -125,6 +127,14 @@ const ImageGallery = ({
125
127
  onIndexChange: handleIndexChange
126
128
  }) : null]
127
129
  });
130
+ if (loading) {
131
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_index3.SkeletonContent, {
132
+ loading: true,
133
+ mode: "auto",
134
+ children: rendered
135
+ });
136
+ }
137
+ return rendered;
128
138
  };
129
139
  exports.ImageGallery = ImageGallery;
130
140
  ImageGallery.displayName = 'ImageGallery';
@@ -140,13 +150,13 @@ const Lightbox = ({
140
150
  onClose,
141
151
  onIndexChange
142
152
  }) => {
143
- const theme = (0, _index3.useTheme)();
153
+ const theme = (0, _index4.useTheme)();
144
154
  const styles = (0, _react.useMemo)(() => buildLightboxStyles(theme), [theme]);
145
155
  const carouselRef = (0, _react.useRef)(null);
146
156
  const [activeIndex, setActiveIndex] = (0, _react.useState)(initialIndex);
147
157
  const handleSwipe = (0, _react.useCallback)(idx => {
148
158
  if (idx !== activeIndex) {
149
- (0, _index4.triggerHaptic)('selection');
159
+ (0, _index5.triggerHaptic)('selection');
150
160
  setActiveIndex(idx);
151
161
  onIndexChange(idx);
152
162
  }
@@ -255,7 +265,7 @@ const ZoomableImage = ({
255
265
  savedTranslateY.value = 0;
256
266
  }
257
267
  }, [active, scale, translateX, translateY, savedScale, savedTranslateX, savedTranslateY]);
258
- const triggerImpact = (0, _react.useCallback)(() => (0, _index4.triggerHaptic)('impactLight'), []);
268
+ const triggerImpact = (0, _react.useCallback)(() => (0, _index5.triggerHaptic)('impactLight'), []);
259
269
  const pinch = (0, _react.useMemo)(() => _reactNativeGestureHandler.Gesture.Pinch().enabled(enabled).onStart(() => {
260
270
  'worklet';
261
271
 
@@ -8,6 +8,7 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _index = require("../../theme/index.js");
10
10
  var _hapticUtils = require("../../utils/hapticUtils.js");
11
+ var _index2 = require("../Skeleton/index.js");
11
12
  var _jsxRuntime = require("react/jsx-runtime");
12
13
  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); }
13
14
  const sizePxMap = {
@@ -83,6 +84,7 @@ const Rating = exports.Rating = /*#__PURE__*/(0, _react.forwardRef)((props, ref)
83
84
  size = 'md',
84
85
  tone = 'warning',
85
86
  label,
87
+ loading = false,
86
88
  accessibilityLabel,
87
89
  style,
88
90
  testID
@@ -168,7 +170,7 @@ const Rating = exports.Rating = /*#__PURE__*/(0, _react.forwardRef)((props, ref)
168
170
  children: star
169
171
  }, i));
170
172
  }
171
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
173
+ const rendered = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
172
174
  style: [styles.wrapper, style],
173
175
  ref: ref,
174
176
  testID: testID,
@@ -198,6 +200,14 @@ const Rating = exports.Rating = /*#__PURE__*/(0, _react.forwardRef)((props, ref)
198
200
  children: stars
199
201
  })]
200
202
  });
203
+ if (loading) {
204
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.SkeletonContent, {
205
+ loading: true,
206
+ mode: "auto",
207
+ children: rendered
208
+ });
209
+ }
210
+ return rendered;
201
211
  });
202
212
  Rating.displayName = 'Rating';
203
213
  const starStyles = _reactNative.StyleSheet.create({
@@ -8,6 +8,7 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _index = require("../../theme/index.js");
10
10
  var _index2 = require("../../utils/index.js");
11
+ var _SkeletonProvider = require("./SkeletonProvider.js");
11
12
  var _jsxRuntime = require("react/jsx-runtime");
12
13
  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); }
13
14
  const SPEED_DURATION = {
@@ -33,23 +34,30 @@ const resolveWidth = width => {
33
34
  const Skeleton = ({
34
35
  width = '100%',
35
36
  height = 16,
36
- radius = 'sm',
37
- variant = 'shimmer',
38
- speed = 'normal',
37
+ radius,
38
+ variant,
39
+ speed,
40
+ colors,
39
41
  style,
40
42
  testID
41
43
  }) => {
42
44
  const theme = (0, _index.useTheme)();
45
+ const defaults = (0, _SkeletonProvider.useSkeletonDefaults)();
46
+ const resolvedVariant = variant ?? defaults.variant ?? 'shimmer';
47
+ const resolvedSpeed = speed ?? defaults.speed ?? 'normal';
48
+ const resolvedRadiusToken = radius ?? defaults.radius ?? 'sm';
49
+ const backgroundColor = colors?.background ?? defaults.colors?.background ?? theme.colors.skeleton.background;
50
+ const highlightColor = colors?.highlight ?? defaults.colors?.highlight ?? theme.colors.skeleton.highlight;
43
51
  const styles = (0, _react.useMemo)(() => buildStyles(theme), [theme]);
44
- const borderRadius = resolveRadius(theme, radius);
52
+ const borderRadius = resolveRadius(theme, resolvedRadiusToken);
45
53
  const resolvedWidth = resolveWidth(width);
46
54
  const resolvedHeight = _index2.Responsive.size(height);
47
55
  const progress = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
48
56
  const [containerWidth, setContainerWidth] = (0, _react.useState)(0);
49
57
  (0, _react.useEffect)(() => {
50
58
  progress.setValue(0);
51
- const duration = variant === 'pulse' ? PULSE_DURATION : SPEED_DURATION[speed];
52
- const animation = variant === 'pulse' ? _reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.timing(progress, {
59
+ const duration = resolvedVariant === 'pulse' ? PULSE_DURATION : SPEED_DURATION[resolvedSpeed];
60
+ const animation = resolvedVariant === 'pulse' ? _reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.timing(progress, {
53
61
  toValue: 1,
54
62
  duration: duration / 2,
55
63
  easing: _reactNative.Easing.inOut(_reactNative.Easing.ease),
@@ -69,17 +77,17 @@ const Skeleton = ({
69
77
  return () => {
70
78
  animation.stop();
71
79
  };
72
- }, [progress, speed, variant]);
80
+ }, [progress, resolvedSpeed, resolvedVariant]);
73
81
  const handleLayout = event => {
74
82
  const next = event.nativeEvent.layout.width;
75
83
  if (next !== containerWidth) setContainerWidth(next);
76
84
  };
77
85
  const overlay = (0, _react.useMemo)(() => {
78
- if (variant === 'pulse') {
86
+ if (resolvedVariant === 'pulse') {
79
87
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
80
88
  pointerEvents: "none",
81
89
  style: [_reactNative.StyleSheet.absoluteFillObject, {
82
- backgroundColor: theme.colors.skeleton.highlight,
90
+ backgroundColor: highlightColor,
83
91
  opacity: progress.interpolate({
84
92
  inputRange: [0, 1],
85
93
  outputRange: [0, 0.6]
@@ -97,13 +105,13 @@ const Skeleton = ({
97
105
  pointerEvents: "none",
98
106
  style: [styles.shimmer, {
99
107
  width: highlightWidth,
100
- backgroundColor: theme.colors.skeleton.highlight,
108
+ backgroundColor: highlightColor,
101
109
  transform: [{
102
110
  translateX
103
111
  }]
104
112
  }]
105
113
  });
106
- }, [containerWidth, progress, styles.shimmer, theme.colors.skeleton.highlight, variant]);
114
+ }, [containerWidth, progress, styles.shimmer, highlightColor, resolvedVariant]);
107
115
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
108
116
  onLayout: handleLayout,
109
117
  accessible: true,
@@ -115,7 +123,7 @@ const Skeleton = ({
115
123
  width: resolvedWidth,
116
124
  height: resolvedHeight,
117
125
  borderRadius,
118
- backgroundColor: theme.colors.skeleton.background
126
+ backgroundColor
119
127
  }, style],
120
128
  children: overlay
121
129
  });
@@ -7,6 +7,7 @@ exports.default = exports.SkeletonContent = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _Skeleton = require("./Skeleton.js");
10
+ var _SkeletonSkip = require("./SkeletonSkip.js");
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  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); }
12
13
  const flattenStyle = style => {
@@ -27,7 +28,7 @@ const resolveRadius = (raw, fallback) => {
27
28
  if (typeof raw === 'number') return raw;
28
29
  return fallback;
29
30
  };
30
- const skeletonizeNode = (node, variant, speed, keyHint = 'r') => {
31
+ const skeletonizeNode = (node, variant, speed, colors, keyHint = 'r') => {
31
32
  if (node == null || typeof node === 'boolean') return null;
32
33
  if (typeof node === 'string' || typeof node === 'number') {
33
34
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Skeleton.Skeleton, {
@@ -35,11 +36,12 @@ const skeletonizeNode = (node, variant, speed, keyHint = 'r') => {
35
36
  height: 14,
36
37
  radius: "sm",
37
38
  variant: variant,
38
- speed: speed
39
+ speed: speed,
40
+ colors: colors
39
41
  }, `${keyHint}-text`);
40
42
  }
41
43
  if (Array.isArray(node)) {
42
- return _react.Children.map(node, (child, index) => skeletonizeNode(child, variant, speed, `${keyHint}-${index}`));
44
+ return _react.Children.map(node, (child, index) => skeletonizeNode(child, variant, speed, colors, `${keyHint}-${index}`));
43
45
  }
44
46
  if (! /*#__PURE__*/(0, _react.isValidElement)(node)) return null;
45
47
  const element = node;
@@ -47,6 +49,13 @@ const skeletonizeNode = (node, variant, speed, keyHint = 'r') => {
47
49
  const elementStyle = flattenStyle(props.style);
48
50
  const elementType = element.type;
49
51
 
52
+ // <SkeletonSkip /> → opt-out marker; render its children unchanged
53
+ if (elementType === _SkeletonSkip.SkeletonSkip) {
54
+ return /*#__PURE__*/(0, _react.cloneElement)(element, {
55
+ key: `${keyHint}-skip`
56
+ });
57
+ }
58
+
50
59
  // <Image /> → fixed-size skeleton block matching style.width/height/borderRadius
51
60
  if (elementType === _reactNative.Image) {
52
61
  const width = resolveWidth(elementStyle.width, '100%');
@@ -58,6 +67,7 @@ const skeletonizeNode = (node, variant, speed, keyHint = 'r') => {
58
67
  radius: radius,
59
68
  variant: variant,
60
69
  speed: speed,
70
+ colors: colors,
61
71
  style: {
62
72
  margin: typeof elementStyle.margin === 'number' ? elementStyle.margin : undefined
63
73
  }
@@ -74,6 +84,7 @@ const skeletonizeNode = (node, variant, speed, keyHint = 'r') => {
74
84
  radius: "sm",
75
85
  variant: variant,
76
86
  speed: speed,
87
+ colors: colors,
77
88
  style: {
78
89
  marginVertical: 2
79
90
  }
@@ -84,7 +95,7 @@ const skeletonizeNode = (node, variant, speed, keyHint = 'r') => {
84
95
  if (props.children != null) {
85
96
  return /*#__PURE__*/(0, _react.cloneElement)(element, {
86
97
  key: `${keyHint}-w`
87
- }, skeletonizeNode(props.children, variant, speed, `${keyHint}-c`));
98
+ }, skeletonizeNode(props.children, variant, speed, colors, `${keyHint}-c`));
88
99
  }
89
100
 
90
101
  // Leaf <View /> with explicit dimensions → skeleton block
@@ -97,7 +108,8 @@ const skeletonizeNode = (node, variant, speed, keyHint = 'r') => {
97
108
  height: height,
98
109
  radius: radius,
99
110
  variant: variant,
100
- speed: speed
111
+ speed: speed,
112
+ colors: colors
101
113
  }, `${keyHint}-vw`);
102
114
  }
103
115
 
@@ -110,10 +122,11 @@ const skeletonizeNode = (node, variant, speed, keyHint = 'r') => {
110
122
  const SkeletonContent = ({
111
123
  loading,
112
124
  children,
113
- variant = 'shimmer',
114
- speed = 'normal',
125
+ variant,
126
+ speed,
115
127
  mode = 'auto',
116
128
  count = 1,
129
+ colors,
117
130
  style,
118
131
  testID
119
132
  }) => {
@@ -133,6 +146,7 @@ const SkeletonContent = ({
133
146
  testID: testID,
134
147
  variant: variant,
135
148
  speed: speed,
149
+ colors: colors,
136
150
  children: repeated
137
151
  });
138
152
  }
@@ -143,7 +157,7 @@ const SkeletonContent = ({
143
157
  accessibilityLabel: "Loading",
144
158
  accessibilityRole: "progressbar",
145
159
  accessibilityLiveRegion: "polite",
146
- children: skeletonizeNode(repeated, variant, speed)
160
+ children: skeletonizeNode(repeated, variant, speed, colors)
147
161
  });
148
162
  };
149
163
  exports.SkeletonContent = SkeletonContent;
@@ -152,6 +166,7 @@ const BlockSkeleton = ({
152
166
  children,
153
167
  variant,
154
168
  speed,
169
+ colors,
155
170
  style,
156
171
  testID
157
172
  }) => {
@@ -188,7 +203,8 @@ const BlockSkeleton = ({
188
203
  height: size.height,
189
204
  radius: "md",
190
205
  variant: variant,
191
- speed: speed
206
+ speed: speed,
207
+ colors: colors
192
208
  })
193
209
  }) : null]
194
210
  });
@@ -7,6 +7,7 @@ exports.SkeletonList = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _SkeletonContent = require("./SkeletonContent.js");
10
+ var _SkeletonProvider = require("./SkeletonProvider.js");
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
13
  /**
@@ -32,9 +33,10 @@ function SkeletonListInner(props) {
32
33
  data,
33
34
  renderItem,
34
35
  renderPlaceholder,
35
- placeholderCount = 3,
36
+ placeholderCount,
36
37
  variant,
37
38
  speed,
39
+ colors,
38
40
  placeholderContainerStyle,
39
41
  horizontal,
40
42
  contentContainerStyle,
@@ -42,9 +44,11 @@ function SkeletonListInner(props) {
42
44
  testID,
43
45
  ...rest
44
46
  } = props;
47
+ const defaults = (0, _SkeletonProvider.useSkeletonDefaults)();
48
+ const resolvedCount = placeholderCount ?? defaults.placeholderCount ?? 3;
45
49
  if (loading) {
46
50
  const slots = Array.from({
47
- length: Math.max(0, placeholderCount)
51
+ length: Math.max(0, resolvedCount)
48
52
  }, (_, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_react.default.Fragment, {
49
53
  children: renderPlaceholder ? renderPlaceholder(index) : null
50
54
  }, `sk-list-${index}`));
@@ -52,6 +56,7 @@ function SkeletonListInner(props) {
52
56
  loading: true,
53
57
  variant: variant,
54
58
  speed: speed,
59
+ colors: colors,
55
60
  style: style,
56
61
  testID: testID,
57
62
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSkeletonDefaults = exports.SkeletonProvider = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ 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); }
10
+ /**
11
+ * Per-instance color override for a skeleton. `background` is the resting tone
12
+ * of the placeholder; `highlight` is the moving shimmer band (or pulse fade).
13
+ * Either can be omitted — missing keys fall back to the active theme.
14
+ */
15
+
16
+ const SkeletonDefaultsContext = /*#__PURE__*/(0, _react.createContext)({});
17
+ const SkeletonProvider = ({
18
+ children,
19
+ variant,
20
+ speed,
21
+ placeholderCount,
22
+ radius,
23
+ colors
24
+ }) => {
25
+ const value = (0, _react.useMemo)(() => ({
26
+ variant,
27
+ speed,
28
+ placeholderCount,
29
+ radius,
30
+ colors
31
+ }), [variant, speed, placeholderCount, radius, colors]);
32
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(SkeletonDefaultsContext.Provider, {
33
+ value: value,
34
+ children: children
35
+ });
36
+ };
37
+ exports.SkeletonProvider = SkeletonProvider;
38
+ SkeletonProvider.displayName = 'SkeletonProvider';
39
+
40
+ /**
41
+ * Read the current SkeletonProvider defaults. Returns an empty object when no
42
+ * provider is mounted, so the skeleton primitives still work outside of one.
43
+ */
44
+ const useSkeletonDefaults = () => {
45
+ return (0, _react.useContext)(SkeletonDefaultsContext);
46
+ };
47
+ exports.useSkeletonDefaults = useSkeletonDefaults;
48
+ //# sourceMappingURL=SkeletonProvider.js.map
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SkeletonSkip = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * Pass-through marker that opts a subtree out of `SkeletonContent`'s auto walker.
12
+ *
13
+ * The walker recognizes this element type and returns its children unchanged
14
+ * even while `loading` is true. Use it to keep a specific Text/Image/View
15
+ * visible inside a skeleton block — e.g., a brand mark, a status icon, or a
16
+ * decorative element that should never shimmer.
17
+ *
18
+ * @example
19
+ * <SkeletonContent loading>
20
+ * <View style={styles.card}>
21
+ * <SkeletonSkip>
22
+ * <Image source={Logo} style={styles.brandMark} />
23
+ * </SkeletonSkip>
24
+ * <Text>Loading…</Text>
25
+ * </View>
26
+ * </SkeletonContent>
27
+ */
28
+ const SkeletonSkip = ({
29
+ children
30
+ }) => {
31
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
32
+ children: children
33
+ });
34
+ };
35
+ exports.SkeletonSkip = SkeletonSkip;
36
+ SkeletonSkip.displayName = 'SkeletonSkip';
37
+ //# sourceMappingURL=SkeletonSkip.js.map
@@ -45,6 +45,18 @@ Object.defineProperty(exports, "SkeletonListItem", {
45
45
  return _Skeleton.SkeletonListItem;
46
46
  }
47
47
  });
48
+ Object.defineProperty(exports, "SkeletonProvider", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _SkeletonProvider.SkeletonProvider;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "SkeletonSkip", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _SkeletonSkip.SkeletonSkip;
58
+ }
59
+ });
48
60
  Object.defineProperty(exports, "SkeletonText", {
49
61
  enumerable: true,
50
62
  get: function () {
@@ -57,8 +69,16 @@ Object.defineProperty(exports, "default", {
57
69
  return _Skeleton.default;
58
70
  }
59
71
  });
72
+ Object.defineProperty(exports, "useSkeletonDefaults", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _SkeletonProvider.useSkeletonDefaults;
76
+ }
77
+ });
60
78
  var _Skeleton = _interopRequireWildcard(require("./Skeleton.js"));
61
79
  var _SkeletonContent = require("./SkeletonContent.js");
62
80
  var _SkeletonList = require("./SkeletonList.js");
81
+ var _SkeletonProvider = require("./SkeletonProvider.js");
82
+ var _SkeletonSkip = require("./SkeletonSkip.js");
63
83
  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); }
64
84
  //# sourceMappingURL=index.js.map
@@ -8,6 +8,7 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _index = require("../../theme/index.js");
10
10
  var _hapticUtils = require("../../utils/hapticUtils.js");
11
+ var _index2 = require("../Skeleton/index.js");
11
12
  var _jsxRuntime = require("react/jsx-runtime");
12
13
  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); }
13
14
  const CIRCLE_SIZE = 24;
@@ -164,6 +165,7 @@ const Stepper = exports.Stepper = /*#__PURE__*/(0, _react.forwardRef)((props, re
164
165
  onStepPress,
165
166
  variant = 'horizontal',
166
167
  tone = 'primary',
168
+ loading = false,
167
169
  accessibilityLabel,
168
170
  style,
169
171
  testID
@@ -238,7 +240,7 @@ const Stepper = exports.Stepper = /*#__PURE__*/(0, _react.forwardRef)((props, re
238
240
  fontSize: theme.typography.fontSize.xs
239
241
  }],
240
242
  numberOfLines: 1,
241
- children: step.label
243
+ children: step?.label ?? ' '
242
244
  })]
243
245
  }, step.key);
244
246
  })]
@@ -286,7 +288,7 @@ const Stepper = exports.Stepper = /*#__PURE__*/(0, _react.forwardRef)((props, re
286
288
  fontWeight: theme.typography.fontWeight.semibold
287
289
  }],
288
290
  numberOfLines: 1,
289
- children: step.label
291
+ children: step?.label ?? ' '
290
292
  }), step.description ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
291
293
  style: [styles.vDescription, {
292
294
  color: theme.colors.text.secondary,
@@ -299,7 +301,7 @@ const Stepper = exports.Stepper = /*#__PURE__*/(0, _react.forwardRef)((props, re
299
301
  }, step.key);
300
302
  })
301
303
  });
302
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
304
+ const rendered = /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
303
305
  ref: ref,
304
306
  style: [styles.container, style],
305
307
  testID: testID,
@@ -312,6 +314,14 @@ const Stepper = exports.Stepper = /*#__PURE__*/(0, _react.forwardRef)((props, re
312
314
  },
313
315
  children: variant === 'horizontal' ? renderHorizontal() : renderVertical()
314
316
  });
317
+ if (loading) {
318
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_index2.SkeletonContent, {
319
+ loading: true,
320
+ mode: "auto",
321
+ children: rendered
322
+ });
323
+ }
324
+ return rendered;
315
325
  });
316
326
  Stepper.displayName = 'Stepper';
317
327
  const buildStyles = theme => _reactNative.StyleSheet.create({