react-native-skelo 0.0.3 → 0.1.0-alpha.0

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 (37) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +9 -26
  3. package/lib/commonjs/animations/PulseAnimation.js +26 -2
  4. package/lib/commonjs/animations/PulseAnimation.js.map +1 -1
  5. package/lib/commonjs/animations/ShimmerAnimation.js +55 -25
  6. package/lib/commonjs/animations/ShimmerAnimation.js.map +1 -1
  7. package/lib/commonjs/components/Skeleton.js +9 -15
  8. package/lib/commonjs/components/Skeleton.js.map +1 -1
  9. package/lib/module/animations/PulseAnimation.js +26 -2
  10. package/lib/module/animations/PulseAnimation.js.map +1 -1
  11. package/lib/module/animations/ShimmerAnimation.js +56 -26
  12. package/lib/module/animations/ShimmerAnimation.js.map +1 -1
  13. package/lib/module/components/Skeleton.js +9 -15
  14. package/lib/module/components/Skeleton.js.map +1 -1
  15. package/lib/typescript/animations/PulseAnimation.d.ts +44 -0
  16. package/lib/typescript/animations/PulseAnimation.d.ts.map +1 -1
  17. package/lib/typescript/animations/ShimmerAnimation.d.ts +44 -0
  18. package/lib/typescript/animations/ShimmerAnimation.d.ts.map +1 -1
  19. package/lib/typescript/components/Skeleton.d.ts.map +1 -1
  20. package/package.json +4 -20
  21. package/src/animations/PulseAnimation.tsx +67 -5
  22. package/src/animations/ShimmerAnimation.tsx +106 -38
  23. package/src/components/Skeleton.tsx +9 -17
  24. package/lib/commonjs/core/deepRegistry.js +0 -18
  25. package/lib/commonjs/core/deepRegistry.js.map +0 -1
  26. package/lib/commonjs/deep.js +0 -18
  27. package/lib/commonjs/deep.js.map +0 -1
  28. package/lib/module/core/deepRegistry.js +0 -11
  29. package/lib/module/core/deepRegistry.js.map +0 -1
  30. package/lib/module/deep.js +0 -11
  31. package/lib/module/deep.js.map +0 -1
  32. package/lib/typescript/core/deepRegistry.d.ts +0 -7
  33. package/lib/typescript/core/deepRegistry.d.ts.map +0 -1
  34. package/lib/typescript/deep.d.ts +0 -2
  35. package/lib/typescript/deep.d.ts.map +0 -1
  36. package/src/core/deepRegistry.ts +0 -16
  37. package/src/deep.ts +0 -12
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Shubhanshu Barnwal <connect@shubhanshubb.dev> (https://shubhanshubb.dev)
3
+ Copyright (c) 2026 Shubhanshu
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -4,12 +4,12 @@
4
4
 
5
5
  **Write your UI once. Skelo builds the loading state automatically.**
6
6
 
7
- [![npm](https://img.shields.io/npm/v/react-native-skelo)](https://www.npmjs.com/package/react-native-skelo)
7
+ [![npm](https://img.shields.io/npm/v/react-native-skelo/alpha)](https://www.npmjs.com/package/react-native-skelo)
8
8
  [![license](https://img.shields.io/npm/l/react-native-skelo)](./LICENSE)
9
9
 
10
10
  </div>
11
11
 
12
- > ⚠️ **Pre-release (`0.0.x`).** Early and evolving — the API may change. The first **stable** release will be **`0.1.0`**. The `deep` engine is experimental — see [caveats](#deep-mode-caveats-experimental).
12
+ > ⚠️ **Alpha.** The API may change before `1.0`. The `deep` engine is experimental — see [caveats](#deep-mode-caveats-experimental).
13
13
 
14
14
  Skeleton loading screens usually mean building — and maintaining — a second copy of your UI. Skelo derives the skeleton from the UI you already wrote.
15
15
 
@@ -29,33 +29,17 @@ While `loading`, Skelo reads the tree and its styles and renders a matching skel
29
29
  ## Installation
30
30
 
31
31
  ```bash
32
- npm install react-native-skelo react-native-reanimated
32
+ npm install react-native-skelo@alpha
33
33
  ```
34
34
 
35
- That's all you need for the basic (inline) and `styles` usage. The shimmer uses
36
- React Native's built-in `experimental_backgroundImage` gradient (New
37
- Architecture) — no gradient library required.
38
-
39
- ### To enable `deep` mode (optional)
40
-
41
- `deep` mode is opt-in so the core library never bundles a reconciler you don't
42
- use. Install `react-reconciler` (matching your React version) and import the
43
- deep entry **once** in your app's entry file:
35
+ Peer dependencies:
44
36
 
45
37
  ```bash
46
- # React 19:
47
- npm install react-reconciler@0.31.0
48
- # React 18:
49
- npm install react-reconciler@0.29.2
38
+ npm install react-native-reanimated react-native-linear-gradient
39
+ # Optional — only needed for `deep` mode:
40
+ npm install react-reconciler
50
41
  ```
51
42
 
52
- ```js
53
- // index.js (app entry)
54
- import 'react-native-skelo/deep';
55
- ```
56
-
57
- Without this, `<Skeleton deep>` simply falls back to static parsing (no crash).
58
-
59
43
  ## Usage
60
44
 
61
45
  ### Basic — inline host elements
@@ -89,7 +73,7 @@ const Home = withSkeleton(HomeScreen);
89
73
  <Home loading={loading} {...props} />
90
74
  ```
91
75
 
92
- Requires `react-reconciler` + `import 'react-native-skelo/deep'` (see [Installation](#to-enable-deep-mode-optional)). See also [caveats](#deep-mode-caveats-experimental).
76
+ Requires `react-reconciler`. See [caveats](#deep-mode-caveats-experimental).
93
77
 
94
78
  ### `styles` — generate from a StyleSheet
95
79
 
@@ -161,8 +145,7 @@ Also exported: `withSkeleton`, `SkeletonIgnore`, `StyleSkeleton`, the primitives
161
145
 
162
146
  ## Requirements
163
147
 
164
- - React Native New Architecture recommended (the shimmer's
165
- `experimental_backgroundImage` gradient needs it)
148
+ - React Native (Fabric / New Architecture recommended)
166
149
  - `react-native-reanimated` ≥ 3
167
150
  - `react-reconciler` (optional, for `deep`) — must match your React version
168
151
 
@@ -8,7 +8,23 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
10
10
  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); }
11
- // Breathing opacity loop on the UI thread with Reanimated.
11
+ /**
12
+ * Pulse animation component using Reanimated 3
13
+ *
14
+ * Creates a subtle breathing/pulsing effect using:
15
+ * - Shared values for performance
16
+ * - Worklets for 60 FPS on UI thread
17
+ * - Opacity animation for pulse effect
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * <PulseAnimation
22
+ * width={200}
23
+ * height={20}
24
+ * borderRadius={4}
25
+ * />
26
+ * ```
27
+ */
12
28
  function PulseAnimation({
13
29
  width,
14
30
  height,
@@ -18,16 +34,24 @@ function PulseAnimation({
18
34
  style,
19
35
  children
20
36
  }) {
37
+ // Shared value for opacity (0 to 1)
21
38
  const opacity = (0, _reactNativeReanimated.useSharedValue)(1);
22
39
  (0, _react.useEffect)(() => {
40
+ // Start infinite pulse animation
41
+ // Sequence: fade out -> fade in
23
42
  opacity.value = (0, _reactNativeReanimated.withRepeat)((0, _reactNativeReanimated.withSequence)((0, _reactNativeReanimated.withTiming)(0.5, {
24
43
  duration: duration / 2,
25
44
  easing: _reactNativeReanimated.Easing.inOut(_reactNativeReanimated.Easing.ease)
26
45
  }), (0, _reactNativeReanimated.withTiming)(1, {
27
46
  duration: duration / 2,
28
47
  easing: _reactNativeReanimated.Easing.inOut(_reactNativeReanimated.Easing.ease)
29
- })), -1, false);
48
+ })), -1,
49
+ // Infinite repeat
50
+ false // Don't reverse
51
+ );
30
52
  }, [duration, opacity]);
53
+
54
+ // Animated style for pulse effect
31
55
  const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
32
56
  'worklet';
33
57
 
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","PulseAnimation","width","height","baseColor","duration","borderRadius","style","children","opacity","useSharedValue","useEffect","value","withRepeat","withSequence","withTiming","easing","Easing","inOut","ease","animatedStyle","useAnimatedStyle","createElement","View","styles","container","backgroundColor","StyleSheet","create","overflow"],"sourceRoot":"../../../src","sources":["animations/PulseAnimation.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","PulseAnimation","width","height","baseColor","duration","borderRadius","style","children","opacity","useSharedValue","useEffect","value","withRepeat","withSequence","withTiming","easing","Easing","inOut","ease","animatedStyle","useAnimatedStyle","createElement","View","styles","container","backgroundColor","StyleSheet","create","overflow"],"sourceRoot":"../../../src","sources":["animations/PulseAnimation.tsx"],"mappings":"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","ignoreList":[]}
@@ -7,10 +7,25 @@ exports.ShimmerAnimation = ShimmerAnimation;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
10
+ var _reactNativeLinearGradient = require("react-native-linear-gradient");
10
11
  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); }
11
- // Shimmer with no gradient library: the sweeping overlay uses React Native's
12
- // built-in `experimental_backgroundImage` CSS gradient (New Architecture),
13
- // animated on the UI thread with Reanimated.
12
+ /**
13
+ * Shimmer animation component using Reanimated 3
14
+ *
15
+ * Creates a smooth left-to-right shimmer effect using:
16
+ * - Shared values for performance
17
+ * - Worklets for 60 FPS on UI thread
18
+ * - Linear gradient for shimmer effect
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <ShimmerAnimation
23
+ * width={200}
24
+ * height={20}
25
+ * borderRadius={4}
26
+ * />
27
+ * ```
28
+ */
14
29
  function ShimmerAnimation({
15
30
  width,
16
31
  height,
@@ -21,37 +36,33 @@ function ShimmerAnimation({
21
36
  style,
22
37
  children
23
38
  }) {
39
+ // Shared value for animation progress (0 to 1)
24
40
  const progress = (0, _reactNativeReanimated.useSharedValue)(0);
25
- const [measuredWidth, setMeasuredWidth] = (0, _react.useState)(0);
26
41
  (0, _react.useEffect)(() => {
42
+ // Start infinite shimmer animation
27
43
  progress.value = (0, _reactNativeReanimated.withRepeat)((0, _reactNativeReanimated.withTiming)(1, {
28
44
  duration,
29
45
  easing: _reactNativeReanimated.Easing.linear
30
- }), -1, false);
46
+ }), -1,
47
+ // Infinite repeat
48
+ false // Don't reverse
49
+ );
31
50
  }, [duration, progress]);
32
- const onLayout = event => {
33
- const w = event.nativeEvent.layout.width;
34
- setMeasuredWidth(prev => prev === w ? prev : w);
35
- };
36
- const containerWidth = typeof width === 'number' ? width : measuredWidth;
51
+
52
+ // Animated style for shimmer overlay
37
53
  const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
38
54
  'worklet';
39
55
 
40
- const translateX = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [-containerWidth, containerWidth]);
56
+ // Calculate shimmer position
57
+ // Interpolate from -100% to 100% to create left-to-right sweep
58
+ const translateX = (0, _reactNativeReanimated.interpolate)(progress.value, [0, 1], [-1, 1]);
41
59
  return {
42
60
  transform: [{
43
- translateX
61
+ translateX: translateX * (typeof width === 'number' ? width : 200)
44
62
  }]
45
63
  };
46
- }, [containerWidth]);
47
-
48
- // `experimental_backgroundImage` isn't in the ViewStyle types yet.
49
- const gradientStyle = {
50
- ..._reactNative.StyleSheet.absoluteFillObject,
51
- experimental_backgroundImage: `linear-gradient(to right, ${baseColor}, ${highlightColor}, ${baseColor})`
52
- };
64
+ }, [width]);
53
65
  return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
54
- onLayout: onLayout,
55
66
  style: [styles.container, {
56
67
  width,
57
68
  height,
@@ -59,15 +70,34 @@ function ShimmerAnimation({
59
70
  backgroundColor: baseColor
60
71
  }, style]
61
72
  }, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
62
- pointerEvents: "none",
63
- style: [_reactNative.StyleSheet.absoluteFill, animatedStyle]
64
- }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
65
- style: gradientStyle
66
- })), children);
73
+ style: [_reactNative.StyleSheet.absoluteFill, {
74
+ overflow: 'hidden',
75
+ borderRadius
76
+ }]
77
+ }, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
78
+ style: [styles.shimmer, {
79
+ width: typeof width === 'number' ? width : '100%',
80
+ height: '100%'
81
+ }, animatedStyle]
82
+ }, /*#__PURE__*/_react.default.createElement(_reactNativeLinearGradient.LinearGradient, {
83
+ colors: [baseColor, highlightColor, highlightColor, baseColor],
84
+ start: {
85
+ x: 0,
86
+ y: 0
87
+ },
88
+ end: {
89
+ x: 1,
90
+ y: 0
91
+ },
92
+ style: _reactNative.StyleSheet.absoluteFill
93
+ }))), children);
67
94
  }
68
95
  const styles = _reactNative.StyleSheet.create({
69
96
  container: {
70
97
  overflow: 'hidden'
98
+ },
99
+ shimmer: {
100
+ position: 'absolute'
71
101
  }
72
102
  });
73
103
  //# sourceMappingURL=ShimmerAnimation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ShimmerAnimation","width","height","baseColor","highlightColor","duration","borderRadius","style","children","progress","useSharedValue","measuredWidth","setMeasuredWidth","useState","useEffect","value","withRepeat","withTiming","easing","Easing","linear","onLayout","event","w","nativeEvent","layout","prev","containerWidth","animatedStyle","useAnimatedStyle","translateX","interpolate","transform","gradientStyle","StyleSheet","absoluteFillObject","experimental_backgroundImage","createElement","View","styles","container","backgroundColor","pointerEvents","absoluteFill","create","overflow"],"sourceRoot":"../../../src","sources":["animations/ShimmerAnimation.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_reactNativeLinearGradient","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ShimmerAnimation","width","height","baseColor","highlightColor","duration","borderRadius","style","children","progress","useSharedValue","useEffect","value","withRepeat","withTiming","easing","Easing","linear","animatedStyle","useAnimatedStyle","translateX","interpolate","transform","createElement","View","styles","container","backgroundColor","StyleSheet","absoluteFill","overflow","shimmer","LinearGradient","colors","start","x","y","end","create","position"],"sourceRoot":"../../../src","sources":["animations/ShimmerAnimation.tsx"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,7 @@ var _parser = require("../core/parser");
9
9
  var _SkeletonRenderer = require("./SkeletonRenderer");
10
10
  var _SkeletonIgnore = require("./SkeletonIgnore");
11
11
  var _StyleSkeleton = require("../core/generator/StyleSkeleton");
12
- var _deepRegistry = require("../core/deepRegistry");
12
+ var _expandOffline = require("../core/parser/expandOffline");
13
13
  var _defaults = require("../constants/defaults");
14
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); }
15
15
  /**
@@ -66,21 +66,15 @@ function Skeleton({
66
66
  console.log('[Skelo] Parsing component tree...');
67
67
  }
68
68
  try {
69
- // Deep mode: expand opaque components into their real host tree via the
70
- // opt-in expander (registered by importing 'react-native-skelo/deep').
71
- // Falls back to static parsing if unavailable or it returns nothing.
69
+ // Deep mode: expand opaque components into their real host tree by
70
+ // rendering them offline. Falls back to static parsing on failure.
72
71
  if (deep) {
73
- const expand = (0, _deepRegistry.getDeepExpander)();
74
- if (expand) {
75
- const expanded = expand(/*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children));
76
- if (expanded && expanded.length > 0) {
77
- return expanded;
78
- }
79
- if (__DEV__) {
80
- console.warn('[Skelo] deep expansion returned nothing; falling back to static parsing.');
81
- }
82
- } else if (__DEV__) {
83
- console.warn("[Skelo] `deep` requires react-reconciler. Install it and add `import 'react-native-skelo/deep';` in your app entry.");
72
+ const expanded = (0, _expandOffline.expandToComponentNodes)(/*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children));
73
+ if (expanded && expanded.length > 0) {
74
+ return expanded;
75
+ }
76
+ if (__DEV__) {
77
+ console.warn('[Skelo] deep expansion returned nothing; falling back to static parsing.');
84
78
  }
85
79
  }
86
80
  const parsed = _parser.Parser.parse(children);
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_parser","_SkeletonRenderer","_SkeletonIgnore","_StyleSkeleton","_deepRegistry","_defaults","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Skeleton","loading","children","styles","excludeStyles","deep","animation","DEFAULT_CONFIG","duration","baseColor","highlightColor","borderRadius","accessible","accessibilityLabel","debug","skeletonTree","useMemo","__DEV__","console","log","expand","getDeepExpander","expanded","createElement","Fragment","length","warn","parsed","Parser","parse","summarize","nodes","map","node","type","style","JSON","stringify","error","config","StyleSkeleton","exclude","SkeletonRenderer","tree","displayName","Ignore","SkeletonIgnore"],"sourceRoot":"../../../src","sources":["components/Skeleton.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_parser","_SkeletonRenderer","_SkeletonIgnore","_StyleSkeleton","_expandOffline","_defaults","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Skeleton","loading","children","styles","excludeStyles","deep","animation","DEFAULT_CONFIG","duration","baseColor","highlightColor","borderRadius","accessible","accessibilityLabel","debug","skeletonTree","useMemo","__DEV__","console","log","expanded","expandToComponentNodes","createElement","Fragment","length","warn","parsed","Parser","parse","summarize","nodes","map","node","type","style","JSON","stringify","error","config","StyleSkeleton","exclude","SkeletonRenderer","tree","displayName","Ignore","SkeletonIgnore"],"sourceRoot":"../../../src","sources":["components/Skeleton.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,23 @@
1
1
  import React, { useEffect } from 'react';
2
2
  import { StyleSheet } from 'react-native';
3
3
  import Animated, { useSharedValue, useAnimatedStyle, withRepeat, withSequence, withTiming, Easing } from 'react-native-reanimated';
4
- // Breathing opacity loop on the UI thread with Reanimated.
4
+ /**
5
+ * Pulse animation component using Reanimated 3
6
+ *
7
+ * Creates a subtle breathing/pulsing effect using:
8
+ * - Shared values for performance
9
+ * - Worklets for 60 FPS on UI thread
10
+ * - Opacity animation for pulse effect
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <PulseAnimation
15
+ * width={200}
16
+ * height={20}
17
+ * borderRadius={4}
18
+ * />
19
+ * ```
20
+ */
5
21
  export function PulseAnimation({
6
22
  width,
7
23
  height,
@@ -11,16 +27,24 @@ export function PulseAnimation({
11
27
  style,
12
28
  children
13
29
  }) {
30
+ // Shared value for opacity (0 to 1)
14
31
  const opacity = useSharedValue(1);
15
32
  useEffect(() => {
33
+ // Start infinite pulse animation
34
+ // Sequence: fade out -> fade in
16
35
  opacity.value = withRepeat(withSequence(withTiming(0.5, {
17
36
  duration: duration / 2,
18
37
  easing: Easing.inOut(Easing.ease)
19
38
  }), withTiming(1, {
20
39
  duration: duration / 2,
21
40
  easing: Easing.inOut(Easing.ease)
22
- })), -1, false);
41
+ })), -1,
42
+ // Infinite repeat
43
+ false // Don't reverse
44
+ );
23
45
  }, [duration, opacity]);
46
+
47
+ // Animated style for pulse effect
24
48
  const animatedStyle = useAnimatedStyle(() => {
25
49
  'worklet';
26
50
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","StyleSheet","Animated","useSharedValue","useAnimatedStyle","withRepeat","withSequence","withTiming","Easing","PulseAnimation","width","height","baseColor","duration","borderRadius","style","children","opacity","value","easing","inOut","ease","animatedStyle","createElement","View","styles","container","backgroundColor","create","overflow"],"sourceRoot":"../../../src","sources":["animations/PulseAnimation.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AAExC,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAOC,QAAQ,IACbC,cAAc,EACdC,gBAAgB,EAChBC,UAAU,EACVC,YAAY,EACZC,UAAU,EACVC,MAAM,QACD,yBAAyB;AAahC;AACA,OAAO,SAASC,cAAcA,CAAC;EAC7BC,KAAK;EACLC,MAAM;EACNC,SAAS,GAAG,SAAS;EACrBC,QAAQ,GAAG,IAAI;EACfC,YAAY,GAAG,CAAC;EAChBC,KAAK;EACLC;AACU,CAAC,EAAE;EACb,MAAMC,OAAO,GAAGd,cAAc,CAAC,CAAC,CAAC;EAEjCH,SAAS,CAAC,MAAM;IACdiB,OAAO,CAACC,KAAK,GAAGb,UAAU,CACxBC,YAAY,CACVC,UAAU,CAAC,GAAG,EAAE;MACdM,QAAQ,EAAEA,QAAQ,GAAG,CAAC;MACtBM,MAAM,EAAEX,MAAM,CAACY,KAAK,CAACZ,MAAM,CAACa,IAAI;IAClC,CAAC,CAAC,EACFd,UAAU,CAAC,CAAC,EAAE;MACZM,QAAQ,EAAEA,QAAQ,GAAG,CAAC;MACtBM,MAAM,EAAEX,MAAM,CAACY,KAAK,CAACZ,MAAM,CAACa,IAAI;IAClC,CAAC,CACH,CAAC,EACD,CAAC,CAAC,EACF,KACF,CAAC;EACH,CAAC,EAAE,CAACR,QAAQ,EAAEI,OAAO,CAAC,CAAC;EAEvB,MAAMK,aAAa,GAAGlB,gBAAgB,CAAC,MAAM;IAC3C,SAAS;;IACT,OAAO;MAAEa,OAAO,EAAEA,OAAO,CAACC;IAAM,CAAC;EACnC,CAAC,EAAE,EAAE,CAAC;EAEN,oBACEnB,KAAA,CAAAwB,aAAA,CAACrB,QAAQ,CAACsB,IAAI;IACZT,KAAK,EAAE,CACLU,MAAM,CAACC,SAAS,EAChB;MAAEhB,KAAK;MAAEC,MAAM;MAAEG,YAAY;MAAEa,eAAe,EAAEf;IAAU,CAAC,EAC3DU,aAAa,EACbP,KAAK;EACL,GAEDC,QACY,CAAC;AAEpB;AAEA,MAAMS,MAAM,GAAGxB,UAAU,CAAC2B,MAAM,CAAC;EAC/BF,SAAS,EAAE;IACTG,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","StyleSheet","Animated","useSharedValue","useAnimatedStyle","withRepeat","withSequence","withTiming","Easing","PulseAnimation","width","height","baseColor","duration","borderRadius","style","children","opacity","value","easing","inOut","ease","animatedStyle","createElement","View","styles","container","backgroundColor","create","overflow"],"sourceRoot":"../../../src","sources":["animations/PulseAnimation.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AAExC,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAOC,QAAQ,IACbC,cAAc,EACdC,gBAAgB,EAChBC,UAAU,EACVC,YAAY,EACZC,UAAU,EACVC,MAAM,QACD,yBAAyB;AA+ChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAC;EAC7BC,KAAK;EACLC,MAAM;EACNC,SAAS,GAAG,SAAS;EACrBC,QAAQ,GAAG,IAAI;EACfC,YAAY,GAAG,CAAC;EAChBC,KAAK;EACLC;AACU,CAAC,EAAE;EACb;EACA,MAAMC,OAAO,GAAGd,cAAc,CAAC,CAAC,CAAC;EAEjCH,SAAS,CAAC,MAAM;IACd;IACA;IACAiB,OAAO,CAACC,KAAK,GAAGb,UAAU,CACxBC,YAAY,CACVC,UAAU,CAAC,GAAG,EAAE;MACdM,QAAQ,EAAEA,QAAQ,GAAG,CAAC;MACtBM,MAAM,EAAEX,MAAM,CAACY,KAAK,CAACZ,MAAM,CAACa,IAAI;IAClC,CAAC,CAAC,EACFd,UAAU,CAAC,CAAC,EAAE;MACZM,QAAQ,EAAEA,QAAQ,GAAG,CAAC;MACtBM,MAAM,EAAEX,MAAM,CAACY,KAAK,CAACZ,MAAM,CAACa,IAAI;IAClC,CAAC,CACH,CAAC,EACD,CAAC,CAAC;IAAE;IACJ,KAAK,CAAC;IACR,CAAC;EACH,CAAC,EAAE,CAACR,QAAQ,EAAEI,OAAO,CAAC,CAAC;;EAEvB;EACA,MAAMK,aAAa,GAAGlB,gBAAgB,CAAC,MAAM;IAC3C,SAAS;;IAET,OAAO;MACLa,OAAO,EAAEA,OAAO,CAACC;IACnB,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,oBACEnB,KAAA,CAAAwB,aAAA,CAACrB,QAAQ,CAACsB,IAAI;IACZT,KAAK,EAAE,CACLU,MAAM,CAACC,SAAS,EAChB;MACEhB,KAAK;MACLC,MAAM;MACNG,YAAY;MACZa,eAAe,EAAEf;IACnB,CAAC,EACDU,aAAa,EACbP,KAAK;EACL,GAEDC,QACY,CAAC;AAEpB;AAEA,MAAMS,MAAM,GAAGxB,UAAU,CAAC2B,MAAM,CAAC;EAC/BF,SAAS,EAAE;IACTG,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,9 +1,24 @@
1
- import React, { useEffect, useState } from 'react';
1
+ import React, { useEffect } from 'react';
2
2
  import { StyleSheet, View } from 'react-native';
3
3
  import Animated, { useSharedValue, useAnimatedStyle, withRepeat, withTiming, interpolate, Easing } from 'react-native-reanimated';
4
- // Shimmer with no gradient library: the sweeping overlay uses React Native's
5
- // built-in `experimental_backgroundImage` CSS gradient (New Architecture),
6
- // animated on the UI thread with Reanimated.
4
+ import { LinearGradient } from 'react-native-linear-gradient';
5
+ /**
6
+ * Shimmer animation component using Reanimated 3
7
+ *
8
+ * Creates a smooth left-to-right shimmer effect using:
9
+ * - Shared values for performance
10
+ * - Worklets for 60 FPS on UI thread
11
+ * - Linear gradient for shimmer effect
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <ShimmerAnimation
16
+ * width={200}
17
+ * height={20}
18
+ * borderRadius={4}
19
+ * />
20
+ * ```
21
+ */
7
22
  export function ShimmerAnimation({
8
23
  width,
9
24
  height,
@@ -14,37 +29,33 @@ export function ShimmerAnimation({
14
29
  style,
15
30
  children
16
31
  }) {
32
+ // Shared value for animation progress (0 to 1)
17
33
  const progress = useSharedValue(0);
18
- const [measuredWidth, setMeasuredWidth] = useState(0);
19
34
  useEffect(() => {
35
+ // Start infinite shimmer animation
20
36
  progress.value = withRepeat(withTiming(1, {
21
37
  duration,
22
38
  easing: Easing.linear
23
- }), -1, false);
39
+ }), -1,
40
+ // Infinite repeat
41
+ false // Don't reverse
42
+ );
24
43
  }, [duration, progress]);
25
- const onLayout = event => {
26
- const w = event.nativeEvent.layout.width;
27
- setMeasuredWidth(prev => prev === w ? prev : w);
28
- };
29
- const containerWidth = typeof width === 'number' ? width : measuredWidth;
44
+
45
+ // Animated style for shimmer overlay
30
46
  const animatedStyle = useAnimatedStyle(() => {
31
47
  'worklet';
32
48
 
33
- const translateX = interpolate(progress.value, [0, 1], [-containerWidth, containerWidth]);
49
+ // Calculate shimmer position
50
+ // Interpolate from -100% to 100% to create left-to-right sweep
51
+ const translateX = interpolate(progress.value, [0, 1], [-1, 1]);
34
52
  return {
35
53
  transform: [{
36
- translateX
54
+ translateX: translateX * (typeof width === 'number' ? width : 200)
37
55
  }]
38
56
  };
39
- }, [containerWidth]);
40
-
41
- // `experimental_backgroundImage` isn't in the ViewStyle types yet.
42
- const gradientStyle = {
43
- ...StyleSheet.absoluteFillObject,
44
- experimental_backgroundImage: `linear-gradient(to right, ${baseColor}, ${highlightColor}, ${baseColor})`
45
- };
57
+ }, [width]);
46
58
  return /*#__PURE__*/React.createElement(View, {
47
- onLayout: onLayout,
48
59
  style: [styles.container, {
49
60
  width,
50
61
  height,
@@ -52,15 +63,34 @@ export function ShimmerAnimation({
52
63
  backgroundColor: baseColor
53
64
  }, style]
54
65
  }, /*#__PURE__*/React.createElement(Animated.View, {
55
- pointerEvents: "none",
56
- style: [StyleSheet.absoluteFill, animatedStyle]
57
- }, /*#__PURE__*/React.createElement(View, {
58
- style: gradientStyle
59
- })), children);
66
+ style: [StyleSheet.absoluteFill, {
67
+ overflow: 'hidden',
68
+ borderRadius
69
+ }]
70
+ }, /*#__PURE__*/React.createElement(Animated.View, {
71
+ style: [styles.shimmer, {
72
+ width: typeof width === 'number' ? width : '100%',
73
+ height: '100%'
74
+ }, animatedStyle]
75
+ }, /*#__PURE__*/React.createElement(LinearGradient, {
76
+ colors: [baseColor, highlightColor, highlightColor, baseColor],
77
+ start: {
78
+ x: 0,
79
+ y: 0
80
+ },
81
+ end: {
82
+ x: 1,
83
+ y: 0
84
+ },
85
+ style: StyleSheet.absoluteFill
86
+ }))), children);
60
87
  }
61
88
  const styles = StyleSheet.create({
62
89
  container: {
63
90
  overflow: 'hidden'
91
+ },
92
+ shimmer: {
93
+ position: 'absolute'
64
94
  }
65
95
  });
66
96
  //# sourceMappingURL=ShimmerAnimation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useState","StyleSheet","View","Animated","useSharedValue","useAnimatedStyle","withRepeat","withTiming","interpolate","Easing","ShimmerAnimation","width","height","baseColor","highlightColor","duration","borderRadius","style","children","progress","measuredWidth","setMeasuredWidth","value","easing","linear","onLayout","event","w","nativeEvent","layout","prev","containerWidth","animatedStyle","translateX","transform","gradientStyle","absoluteFillObject","experimental_backgroundImage","createElement","styles","container","backgroundColor","pointerEvents","absoluteFill","create","overflow"],"sourceRoot":"../../../src","sources":["animations/ShimmerAnimation.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAOlD,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,OAAOC,QAAQ,IACbC,cAAc,EACdC,gBAAgB,EAChBC,UAAU,EACVC,UAAU,EACVC,WAAW,EACXC,MAAM,QACD,yBAAyB;AAahC;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,KAAK;EACLC,MAAM;EACNC,SAAS,GAAG,SAAS;EACrBC,cAAc,GAAG,SAAS;EAC1BC,QAAQ,GAAG,IAAI;EACfC,YAAY,GAAG,CAAC;EAChBC,KAAK;EACLC;AACY,CAAC,EAAE;EACf,MAAMC,QAAQ,GAAGf,cAAc,CAAC,CAAC,CAAC;EAClC,MAAM,CAACgB,aAAa,EAAEC,gBAAgB,CAAC,GAAGrB,QAAQ,CAAC,CAAC,CAAC;EAErDD,SAAS,CAAC,MAAM;IACdoB,QAAQ,CAACG,KAAK,GAAGhB,UAAU,CACzBC,UAAU,CAAC,CAAC,EAAE;MAAEQ,QAAQ;MAAEQ,MAAM,EAAEd,MAAM,CAACe;IAAO,CAAC,CAAC,EAClD,CAAC,CAAC,EACF,KACF,CAAC;EACH,CAAC,EAAE,CAACT,QAAQ,EAAEI,QAAQ,CAAC,CAAC;EAExB,MAAMM,QAAQ,GAAIC,KAAwB,IAAK;IAC7C,MAAMC,CAAC,GAAGD,KAAK,CAACE,WAAW,CAACC,MAAM,CAAClB,KAAK;IACxCU,gBAAgB,CAACS,IAAI,IAAKA,IAAI,KAAKH,CAAC,GAAGG,IAAI,GAAGH,CAAE,CAAC;EACnD,CAAC;EAED,MAAMI,cAAc,GAAG,OAAOpB,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGS,aAAa;EAExE,MAAMY,aAAa,GAAG3B,gBAAgB,CAAC,MAAM;IAC3C,SAAS;;IACT,MAAM4B,UAAU,GAAGzB,WAAW,CAC5BW,QAAQ,CAACG,KAAK,EACd,CAAC,CAAC,EAAE,CAAC,CAAC,EACN,CAAC,CAACS,cAAc,EAAEA,cAAc,CAClC,CAAC;IACD,OAAO;MAAEG,SAAS,EAAE,CAAC;QAAED;MAAW,CAAC;IAAE,CAAC;EACxC,CAAC,EAAE,CAACF,cAAc,CAAC,CAAC;;EAEpB;EACA,MAAMI,aAAa,GAAG;IACpB,GAAGlC,UAAU,CAACmC,kBAAkB;IAChCC,4BAA4B,EAAE,6BAA6BxB,SAAS,KAAKC,cAAc,KAAKD,SAAS;EACvG,CAAyB;EAEzB,oBACEf,KAAA,CAAAwC,aAAA,CAACpC,IAAI;IACHuB,QAAQ,EAAEA,QAAS;IACnBR,KAAK,EAAE,CACLsB,MAAM,CAACC,SAAS,EAChB;MAAE7B,KAAK;MAAEC,MAAM;MAAEI,YAAY;MAAEyB,eAAe,EAAE5B;IAAU,CAAC,EAC3DI,KAAK;EACL,gBAEFnB,KAAA,CAAAwC,aAAA,CAACnC,QAAQ,CAACD,IAAI;IACZwC,aAAa,EAAC,MAAM;IACpBzB,KAAK,EAAE,CAAChB,UAAU,CAAC0C,YAAY,EAAEX,aAAa;EAAE,gBAEhDlC,KAAA,CAAAwC,aAAA,CAACpC,IAAI;IAACe,KAAK,EAAEkB;EAAc,CAAE,CAChB,CAAC,EAEfjB,QACG,CAAC;AAEX;AAEA,MAAMqB,MAAM,GAAGtC,UAAU,CAAC2C,MAAM,CAAC;EAC/BJ,SAAS,EAAE;IACTK,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","StyleSheet","View","Animated","useSharedValue","useAnimatedStyle","withRepeat","withTiming","interpolate","Easing","LinearGradient","ShimmerAnimation","width","height","baseColor","highlightColor","duration","borderRadius","style","children","progress","value","easing","linear","animatedStyle","translateX","transform","createElement","styles","container","backgroundColor","absoluteFill","overflow","shimmer","colors","start","x","y","end","create","position"],"sourceRoot":"../../../src","sources":["animations/ShimmerAnimation.tsx"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@ import { Parser } from '../core/parser';
3
3
  import { SkeletonRenderer } from './SkeletonRenderer';
4
4
  import { SkeletonIgnore } from './SkeletonIgnore';
5
5
  import { StyleSkeleton } from '../core/generator/StyleSkeleton';
6
- import { getDeepExpander } from '../core/deepRegistry';
6
+ import { expandToComponentNodes } from '../core/parser/expandOffline';
7
7
  import { DEFAULT_CONFIG } from '../constants/defaults';
8
8
 
9
9
  /**
@@ -60,21 +60,15 @@ export function Skeleton({
60
60
  console.log('[Skelo] Parsing component tree...');
61
61
  }
62
62
  try {
63
- // Deep mode: expand opaque components into their real host tree via the
64
- // opt-in expander (registered by importing 'react-native-skelo/deep').
65
- // Falls back to static parsing if unavailable or it returns nothing.
63
+ // Deep mode: expand opaque components into their real host tree by
64
+ // rendering them offline. Falls back to static parsing on failure.
66
65
  if (deep) {
67
- const expand = getDeepExpander();
68
- if (expand) {
69
- const expanded = expand(/*#__PURE__*/React.createElement(React.Fragment, null, children));
70
- if (expanded && expanded.length > 0) {
71
- return expanded;
72
- }
73
- if (__DEV__) {
74
- console.warn('[Skelo] deep expansion returned nothing; falling back to static parsing.');
75
- }
76
- } else if (__DEV__) {
77
- console.warn("[Skelo] `deep` requires react-reconciler. Install it and add `import 'react-native-skelo/deep';` in your app entry.");
66
+ const expanded = expandToComponentNodes(/*#__PURE__*/React.createElement(React.Fragment, null, children));
67
+ if (expanded && expanded.length > 0) {
68
+ return expanded;
69
+ }
70
+ if (__DEV__) {
71
+ console.warn('[Skelo] deep expansion returned nothing; falling back to static parsing.');
78
72
  }
79
73
  }
80
74
  const parsed = Parser.parse(children);