react-native-skelo 0.0.5 â 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.
- package/LICENSE +1 -1
- package/README.md +77 -88
- package/lib/commonjs/animations/PulseAnimation.js +42 -17
- package/lib/commonjs/animations/PulseAnimation.js.map +1 -1
- package/lib/commonjs/animations/ShimmerAnimation.js +65 -54
- package/lib/commonjs/animations/ShimmerAnimation.js.map +1 -1
- package/lib/commonjs/components/Skeleton.js +8 -20
- package/lib/commonjs/components/Skeleton.js.map +1 -1
- package/lib/commonjs/index.js +0 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/animations/PulseAnimation.js +43 -18
- package/lib/module/animations/PulseAnimation.js.map +1 -1
- package/lib/module/animations/ShimmerAnimation.js +66 -55
- package/lib/module/animations/ShimmerAnimation.js.map +1 -1
- package/lib/module/components/Skeleton.js +8 -20
- package/lib/module/components/Skeleton.js.map +1 -1
- package/lib/module/index.js +0 -4
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/animations/PulseAnimation.d.ts +44 -0
- package/lib/typescript/animations/PulseAnimation.d.ts.map +1 -1
- package/lib/typescript/animations/ShimmerAnimation.d.ts +44 -0
- package/lib/typescript/animations/ShimmerAnimation.d.ts.map +1 -1
- package/lib/typescript/components/Skeleton.d.ts +1 -1
- package/lib/typescript/components/Skeleton.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +0 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/types/skeleton.d.ts +0 -8
- package/lib/typescript/types/skeleton.d.ts.map +1 -1
- package/package.json +12 -23
- package/src/animations/PulseAnimation.tsx +89 -17
- package/src/animations/ShimmerAnimation.tsx +118 -39
- package/src/components/Skeleton.tsx +8 -22
- package/src/index.ts +0 -4
- package/src/types/skeleton.ts +0 -9
- package/lib/commonjs/core/deepRegistry.js +0 -18
- package/lib/commonjs/core/deepRegistry.js.map +0 -1
- package/lib/commonjs/core/parser/expandLists.js +0 -67
- package/lib/commonjs/core/parser/expandLists.js.map +0 -1
- package/lib/commonjs/deep.js +0 -18
- package/lib/commonjs/deep.js.map +0 -1
- package/lib/module/core/deepRegistry.js +0 -11
- package/lib/module/core/deepRegistry.js.map +0 -1
- package/lib/module/core/parser/expandLists.js +0 -61
- package/lib/module/core/parser/expandLists.js.map +0 -1
- package/lib/module/deep.js +0 -11
- package/lib/module/deep.js.map +0 -1
- package/lib/typescript/core/deepRegistry.d.ts +0 -7
- package/lib/typescript/core/deepRegistry.d.ts.map +0 -1
- package/lib/typescript/core/parser/expandLists.d.ts +0 -3
- package/lib/typescript/core/parser/expandLists.d.ts.map +0 -1
- package/lib/typescript/deep.d.ts +0 -2
- package/lib/typescript/deep.d.ts.map +0 -1
- package/src/core/deepRegistry.ts +0 -16
- package/src/core/parser/expandLists.tsx +0 -77
- package/src/deep.ts +0 -12
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026 Shubhanshu
|
|
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
|
@@ -1,121 +1,119 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# react-native-skelo
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Write your UI once. Skelo builds the loading state automatically.**
|
|
6
6
|
|
|
7
|
-
[](./LICENSE)
|
|
10
|
-
[](https://github.com/shubhanshubb/react-native-skelo)
|
|
11
|
-
|
|
12
|
-
<br />
|
|
13
|
-
|
|
14
|
-
<img src="./assets/demo.gif" alt="Skelo skeleton demo" width="270" />
|
|
15
|
-
|
|
16
|
-
<img src="./assets/grid.gif" alt="Image-grid skeleton" width="270" />
|
|
7
|
+
[](https://www.npmjs.com/package/react-native-skelo)
|
|
8
|
+
[](./LICENSE)
|
|
17
9
|
|
|
18
10
|
</div>
|
|
19
11
|
|
|
20
|
-
|
|
12
|
+
> â ïļ **Alpha.** The API may change before `1.0`. The `deep` engine is experimental â see [caveats](#deep-mode-caveats-experimental).
|
|
21
13
|
|
|
22
|
-
|
|
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.
|
|
23
15
|
|
|
24
16
|
```tsx
|
|
17
|
+
import { Skeleton } from 'react-native-skelo';
|
|
18
|
+
|
|
25
19
|
<Skeleton loading={isLoading}>
|
|
26
|
-
<
|
|
20
|
+
<View style={styles.card}>
|
|
21
|
+
<Image style={styles.avatar} />
|
|
22
|
+
<Text style={styles.name}>{user.name}</Text>
|
|
23
|
+
</View>
|
|
27
24
|
</Skeleton>
|
|
28
25
|
```
|
|
29
26
|
|
|
30
|
-
|
|
27
|
+
While `loading`, Skelo reads the tree and its styles and renders a matching skeleton (circle avatar, text bar). When `loading` is `false`, it renders your real content.
|
|
31
28
|
|
|
32
|
-
|
|
29
|
+
## Installation
|
|
33
30
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
- ðŠ **Zero-config** â wrap a component, get a skeleton. No setup, no separate loading screen.
|
|
39
|
-
- ð§ **Sees inside your components** â introspects custom components automatically (no inlining).
|
|
40
|
-
- ð **Lists included** â `FlatList` / `SectionList` render skeleton rows while data loads.
|
|
41
|
-
- ðĻ **Shimmer · Pulse · None** â built-in animations on the native driver.
|
|
42
|
-
- ðŠķ **No dependencies** â no `reanimated`, no gradient library. Just `react` + `react-native`.
|
|
43
|
-
- ð **Style-aware** â every skeleton is sized from your real element styles.
|
|
44
|
-
|
|
45
|
-
---
|
|
31
|
+
```bash
|
|
32
|
+
npm install react-native-skelo@alpha
|
|
33
|
+
```
|
|
46
34
|
|
|
47
|
-
|
|
35
|
+
Peer dependencies:
|
|
48
36
|
|
|
49
37
|
```bash
|
|
50
|
-
npm install react-native-
|
|
38
|
+
npm install react-native-reanimated react-native-linear-gradient
|
|
39
|
+
# Optional â only needed for `deep` mode:
|
|
40
|
+
npm install react-reconciler
|
|
51
41
|
```
|
|
52
42
|
|
|
53
|
-
|
|
43
|
+
## Usage
|
|
54
44
|
|
|
55
|
-
|
|
45
|
+
### Basic â inline host elements
|
|
56
46
|
|
|
57
|
-
|
|
47
|
+
Skelo traverses the `View` / `Text` / `Image` tree you pass and mirrors it:
|
|
58
48
|
|
|
59
|
-
|
|
49
|
+
```tsx
|
|
50
|
+
<Skeleton loading={loading} animation="shimmer">
|
|
51
|
+
<View style={styles.row}>
|
|
52
|
+
<Image style={styles.avatar} /> {/* â circle / box */}
|
|
53
|
+
<Text style={styles.title}>Title</Text> {/* â text bar */}
|
|
54
|
+
</View>
|
|
55
|
+
</Skeleton>
|
|
56
|
+
```
|
|
60
57
|
|
|
61
|
-
|
|
58
|
+
Structure comes from the JSX; dimensions come from each element's `style`.
|
|
59
|
+
|
|
60
|
+
### `deep` â wrap any component (experimental)
|
|
61
|
+
|
|
62
|
+
Don't want to inline? Wrap an opaque component and let Skelo introspect it:
|
|
62
63
|
|
|
63
64
|
```tsx
|
|
64
|
-
import { Skeleton } from 'react-native-skelo';
|
|
65
|
+
import { Skeleton, withSkeleton } from 'react-native-skelo';
|
|
65
66
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
67
|
+
<Skeleton loading={loading} deep>
|
|
68
|
+
<ProfileScreen />
|
|
69
|
+
</Skeleton>
|
|
70
|
+
|
|
71
|
+
// or as an HOC:
|
|
72
|
+
const Home = withSkeleton(HomeScreen);
|
|
73
|
+
<Home loading={loading} {...props} />
|
|
73
74
|
```
|
|
74
75
|
|
|
75
|
-
|
|
76
|
+
Requires `react-reconciler`. See [caveats](#deep-mode-caveats-experimental).
|
|
76
77
|
|
|
77
|
-
###
|
|
78
|
+
### `styles` â generate from a StyleSheet
|
|
78
79
|
|
|
79
|
-
|
|
80
|
+
Pass styles directly to get a stack of skeleton shapes (no children needed):
|
|
80
81
|
|
|
81
82
|
```tsx
|
|
82
|
-
<Skeleton loading={loading}
|
|
83
|
-
<FlatList data={items} renderItem={renderItem} />
|
|
84
|
-
</Skeleton>
|
|
83
|
+
<Skeleton loading={loading} styles={styles} excludeStyles={['container']} />
|
|
85
84
|
```
|
|
86
85
|
|
|
87
|
-
|
|
86
|
+
A StyleSheet has no hierarchy, so this produces one shape per style that has visual dimensions.
|
|
87
|
+
|
|
88
|
+
### `Skeleton.Ignore` â keep something visible
|
|
88
89
|
|
|
89
90
|
```tsx
|
|
90
91
|
<Skeleton loading={loading}>
|
|
91
92
|
<Skeleton.Ignore>
|
|
92
|
-
<Text style={styles.heading}>Profile</Text>
|
|
93
|
+
<Text style={styles.heading}>Profile</Text> {/* stays real */}
|
|
93
94
|
</Skeleton.Ignore>
|
|
94
95
|
<ProfileBody />
|
|
95
96
|
</Skeleton>
|
|
96
97
|
```
|
|
97
98
|
|
|
98
|
-
###
|
|
99
|
-
|
|
100
|
-
```tsx
|
|
101
|
-
<Skeleton loading={loading} styles={styles} excludeStyles={['container']} />
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### Custom skeleton for a component
|
|
99
|
+
### Custom components â register a plugin
|
|
105
100
|
|
|
106
101
|
```tsx
|
|
107
102
|
import { Skelo } from 'react-native-skelo';
|
|
103
|
+
import { Avatar } from 'my-design-system';
|
|
108
104
|
|
|
109
105
|
Skelo.register({
|
|
110
106
|
name: 'Avatar',
|
|
111
107
|
component: Avatar,
|
|
112
|
-
strategy: (props, { primitives }) =>
|
|
108
|
+
strategy: (props, { primitives }) => (
|
|
109
|
+
<primitives.Circle size={props.size ?? 40} />
|
|
110
|
+
),
|
|
113
111
|
});
|
|
114
112
|
```
|
|
115
113
|
|
|
116
|
-
|
|
114
|
+
## API
|
|
117
115
|
|
|
118
|
-
|
|
116
|
+
### `<Skeleton>` props
|
|
119
117
|
|
|
120
118
|
| Prop | Type | Default | Description |
|
|
121
119
|
|---|---|---|---|
|
|
@@ -124,42 +122,33 @@ Skelo.register({
|
|
|
124
122
|
| `duration` | `number` | `1200` | Animation duration (ms) |
|
|
125
123
|
| `baseColor` / `highlightColor` | `string` | theme | Skeleton colors |
|
|
126
124
|
| `borderRadius` | `number` | `4` | Default corner radius |
|
|
127
|
-
| `
|
|
128
|
-
| `deep` | `boolean` | auto | Force component introspection on/off (auto when available) |
|
|
125
|
+
| `deep` | `boolean` | `false` | Expand opaque components (experimental) |
|
|
129
126
|
| `styles` | `StyleSheet \| style[]` | â | Generate from styles instead of children |
|
|
127
|
+
| `excludeStyles` | `string[]` | â | Style keys to skip in `styles` mode |
|
|
130
128
|
| `accessibilityLabel` | `string` | `'Loading content'` | Screen-reader label |
|
|
131
129
|
|
|
132
|
-
Also exported: `withSkeleton`, `SkeletonIgnore`, `StyleSkeleton`, the primitives (`SkeletonBox`, `SkeletonText`, `SkeletonImage`, `SkeletonCircle`), and `Skelo` (
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## ð§Đ How it works
|
|
137
|
-
|
|
138
|
-
- **Host elements** (`View` / `Text` / `Image`) are read directly (`React.Children` + `StyleSheet.flatten`).
|
|
139
|
-
- **Custom components** are expanded by a tiny JS-only `react-reconciler` renderer (bundled) that renders them off-screen to recover their real host tree + styles â then feeds the same skeleton engine.
|
|
140
|
-
- Anything Skelo can't introspect (native content) is measured and shown as one size-matched block.
|
|
141
|
-
|
|
142
|
-
---
|
|
130
|
+
Also exported: `withSkeleton`, `SkeletonIgnore`, `StyleSkeleton`, the primitives (`SkeletonBox`, `SkeletonText`, `SkeletonImage`, `SkeletonCircle`), and `Skelo` (plugin registry + `Skelo.fromStyles`).
|
|
143
131
|
|
|
144
|
-
##
|
|
132
|
+
## How it works
|
|
145
133
|
|
|
146
|
-
|
|
134
|
+
- **Inline mode** â static traversal of the host-element tree (`React.Children` + `StyleSheet.flatten`).
|
|
135
|
+
- **`deep` mode** â a JS-only `react-reconciler` renderer renders the component off-screen to recover its real host tree + styles, then feeds the same skeleton renderer.
|
|
136
|
+
- Anything Skelo can't introspect (a custom component without `deep`, or native content) is measured and shown as a single size-matched block.
|
|
147
137
|
|
|
148
|
-
|
|
149
|
-
- It renders **outside your providers** â components needing navigation/theme/redux context fall back to a measured block.
|
|
150
|
-
- **Native content** (`WebView`, `MapView`, `Video`, âĶ) lives outside React, so it becomes a single sized block.
|
|
151
|
-
- A **data-driven list/grid** that renders nothing while loading has nothing to skeletonize â keep placeholder items rendered (see the [example](./example)).
|
|
138
|
+
## `deep` mode caveats (experimental)
|
|
152
139
|
|
|
153
|
-
|
|
140
|
+
`deep` renders your component offline to read its structure, which means:
|
|
154
141
|
|
|
155
|
-
|
|
142
|
+
- **Mount effects run** during introspection â a screen that fetches on mount may fetch twice. Prefer `deep` for presentational trees; register a plugin or provide a manual skeleton for effectful screens.
|
|
143
|
+
- **Renders outside your providers** â components that require navigation/theme/redux context may fail to expand; Skelo catches this and falls back to a measured block.
|
|
144
|
+
- Only the **React host tree** is visible. `WebView`, `MapView`, `Video`, etc. render their content natively (outside React), so they can only become a single sized block.
|
|
156
145
|
|
|
157
|
-
|
|
158
|
-
- React 19 (React 18 â override `react-reconciler` to `0.29`)
|
|
159
|
-
- No other dependencies
|
|
146
|
+
## Requirements
|
|
160
147
|
|
|
161
|
-
|
|
148
|
+
- React Native (Fabric / New Architecture recommended)
|
|
149
|
+
- `react-native-reanimated` âĨ 3
|
|
150
|
+
- `react-reconciler` (optional, for `deep`) â must match your React version
|
|
162
151
|
|
|
163
|
-
##
|
|
152
|
+
## License
|
|
164
153
|
|
|
165
154
|
MIT ÂĐ [Shubhanshu Barnwal](https://shubhanshubb.dev)
|
|
@@ -6,8 +6,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.PulseAnimation = PulseAnimation;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
+
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
9
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); }
|
|
10
|
-
|
|
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
|
+
*/
|
|
11
28
|
function PulseAnimation({
|
|
12
29
|
width,
|
|
13
30
|
height,
|
|
@@ -17,30 +34,38 @@ function PulseAnimation({
|
|
|
17
34
|
style,
|
|
18
35
|
children
|
|
19
36
|
}) {
|
|
20
|
-
|
|
37
|
+
// Shared value for opacity (0 to 1)
|
|
38
|
+
const opacity = (0, _reactNativeReanimated.useSharedValue)(1);
|
|
21
39
|
(0, _react.useEffect)(() => {
|
|
22
|
-
|
|
23
|
-
|
|
40
|
+
// Start infinite pulse animation
|
|
41
|
+
// Sequence: fade out -> fade in
|
|
42
|
+
opacity.value = (0, _reactNativeReanimated.withRepeat)((0, _reactNativeReanimated.withSequence)((0, _reactNativeReanimated.withTiming)(0.5, {
|
|
24
43
|
duration: duration / 2,
|
|
25
|
-
easing:
|
|
26
|
-
|
|
27
|
-
}), _reactNative.Animated.timing(opacity, {
|
|
28
|
-
toValue: 1,
|
|
44
|
+
easing: _reactNativeReanimated.Easing.inOut(_reactNativeReanimated.Easing.ease)
|
|
45
|
+
}), (0, _reactNativeReanimated.withTiming)(1, {
|
|
29
46
|
duration: duration / 2,
|
|
30
|
-
easing:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
47
|
+
easing: _reactNativeReanimated.Easing.inOut(_reactNativeReanimated.Easing.ease)
|
|
48
|
+
})), -1,
|
|
49
|
+
// Infinite repeat
|
|
50
|
+
false // Don't reverse
|
|
51
|
+
);
|
|
35
52
|
}, [duration, opacity]);
|
|
36
|
-
|
|
53
|
+
|
|
54
|
+
// Animated style for pulse effect
|
|
55
|
+
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
|
|
56
|
+
'worklet';
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
opacity: opacity.value
|
|
60
|
+
};
|
|
61
|
+
}, []);
|
|
62
|
+
return /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
|
|
37
63
|
style: [styles.container, {
|
|
38
64
|
width,
|
|
39
65
|
height,
|
|
40
66
|
borderRadius,
|
|
41
|
-
backgroundColor: baseColor
|
|
42
|
-
|
|
43
|
-
}, style]
|
|
67
|
+
backgroundColor: baseColor
|
|
68
|
+
}, animatedStyle, style]
|
|
44
69
|
}, children);
|
|
45
70
|
}
|
|
46
71
|
const styles = _reactNative.StyleSheet.create({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","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","
|
|
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":[]}
|
|
@@ -6,10 +6,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.ShimmerAnimation = ShimmerAnimation;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
+
var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
|
|
10
|
+
var _reactNativeLinearGradient = require("react-native-linear-gradient");
|
|
9
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); }
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
+
*/
|
|
13
29
|
function ShimmerAnimation({
|
|
14
30
|
width,
|
|
15
31
|
height,
|
|
@@ -20,73 +36,68 @@ function ShimmerAnimation({
|
|
|
20
36
|
style,
|
|
21
37
|
children
|
|
22
38
|
}) {
|
|
23
|
-
|
|
24
|
-
const
|
|
39
|
+
// Shared value for animation progress (0 to 1)
|
|
40
|
+
const progress = (0, _reactNativeReanimated.useSharedValue)(0);
|
|
25
41
|
(0, _react.useEffect)(() => {
|
|
26
|
-
|
|
27
|
-
|
|
42
|
+
// Start infinite shimmer animation
|
|
43
|
+
progress.value = (0, _reactNativeReanimated.withRepeat)((0, _reactNativeReanimated.withTiming)(1, {
|
|
28
44
|
duration,
|
|
29
|
-
easing:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
45
|
+
easing: _reactNativeReanimated.Easing.linear
|
|
46
|
+
}), -1,
|
|
47
|
+
// Infinite repeat
|
|
48
|
+
false // Don't reverse
|
|
49
|
+
);
|
|
34
50
|
}, [duration, progress]);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
|
|
52
|
+
// Animated style for shimmer overlay
|
|
53
|
+
const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
|
|
54
|
+
'worklet';
|
|
55
|
+
|
|
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]);
|
|
59
|
+
return {
|
|
60
|
+
transform: [{
|
|
61
|
+
translateX: translateX * (typeof width === 'number' ? width : 200)
|
|
62
|
+
}]
|
|
63
|
+
};
|
|
64
|
+
}, [width]);
|
|
45
65
|
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
46
|
-
onLayout: onLayout,
|
|
47
66
|
style: [styles.container, {
|
|
48
67
|
width,
|
|
49
68
|
height,
|
|
50
69
|
borderRadius,
|
|
51
70
|
backgroundColor: baseColor
|
|
52
71
|
}, style]
|
|
53
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
transform: [{
|
|
58
|
-
translateX
|
|
59
|
-
}]
|
|
60
|
-
}]
|
|
61
|
-
}, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
62
|
-
style: [styles.segment, {
|
|
63
|
-
backgroundColor: highlightColor,
|
|
64
|
-
opacity: 0.25
|
|
65
|
-
}]
|
|
66
|
-
}), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
67
|
-
style: [styles.segment, {
|
|
68
|
-
backgroundColor: highlightColor,
|
|
69
|
-
opacity: 0.9
|
|
72
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNativeReanimated.default.View, {
|
|
73
|
+
style: [_reactNative.StyleSheet.absoluteFill, {
|
|
74
|
+
overflow: 'hidden',
|
|
75
|
+
borderRadius
|
|
70
76
|
}]
|
|
71
|
-
}
|
|
72
|
-
style: [styles.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}]
|
|
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);
|
|
77
94
|
}
|
|
78
95
|
const styles = _reactNative.StyleSheet.create({
|
|
79
96
|
container: {
|
|
80
97
|
overflow: 'hidden'
|
|
81
98
|
},
|
|
82
|
-
|
|
83
|
-
position: 'absolute'
|
|
84
|
-
top: 0,
|
|
85
|
-
bottom: 0,
|
|
86
|
-
flexDirection: 'row'
|
|
87
|
-
},
|
|
88
|
-
segment: {
|
|
89
|
-
flex: 1
|
|
99
|
+
shimmer: {
|
|
100
|
+
position: 'absolute'
|
|
90
101
|
}
|
|
91
102
|
});
|
|
92
103
|
//# sourceMappingURL=ShimmerAnimation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","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","
|
|
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,8 +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
|
|
13
|
-
var _expandLists = require("../core/parser/expandLists");
|
|
12
|
+
var _expandOffline = require("../core/parser/expandOffline");
|
|
14
13
|
var _defaults = require("../constants/defaults");
|
|
15
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); }
|
|
16
15
|
/**
|
|
@@ -46,8 +45,7 @@ function Skeleton({
|
|
|
46
45
|
children,
|
|
47
46
|
styles,
|
|
48
47
|
excludeStyles,
|
|
49
|
-
deep,
|
|
50
|
-
count = 6,
|
|
48
|
+
deep = false,
|
|
51
49
|
animation = _defaults.DEFAULT_CONFIG.animation,
|
|
52
50
|
duration = _defaults.DEFAULT_CONFIG.duration,
|
|
53
51
|
baseColor = _defaults.DEFAULT_CONFIG.baseColor,
|
|
@@ -68,28 +66,18 @@ function Skeleton({
|
|
|
68
66
|
console.log('[Skelo] Parsing component tree...');
|
|
69
67
|
}
|
|
70
68
|
try {
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
// Deep mode: expand opaque components into their real host tree via the
|
|
76
|
-
// opt-in expander (registered by importing 'react-native-skelo/deep').
|
|
77
|
-
// When `deep` is not set explicitly, it's used automatically whenever the
|
|
78
|
-
// expander is available. Falls back to static parsing otherwise.
|
|
79
|
-
const expand = (0, _deepRegistry.getDeepExpander)();
|
|
80
|
-
const wantDeep = deep === undefined ? expand !== null : deep;
|
|
81
|
-
if (wantDeep && expand) {
|
|
82
|
-
const expanded = expand(/*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, prepared));
|
|
69
|
+
// Deep mode: expand opaque components into their real host tree by
|
|
70
|
+
// rendering them offline. Falls back to static parsing on failure.
|
|
71
|
+
if (deep) {
|
|
72
|
+
const expanded = (0, _expandOffline.expandToComponentNodes)(/*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children));
|
|
83
73
|
if (expanded && expanded.length > 0) {
|
|
84
74
|
return expanded;
|
|
85
75
|
}
|
|
86
76
|
if (__DEV__) {
|
|
87
77
|
console.warn('[Skelo] deep expansion returned nothing; falling back to static parsing.');
|
|
88
78
|
}
|
|
89
|
-
} else if (deep === true && !expand && __DEV__) {
|
|
90
|
-
console.warn("[Skelo] `deep` requires react-reconciler. Install it and add `import 'react-native-skelo/deep';` in your app entry.");
|
|
91
79
|
}
|
|
92
|
-
const parsed = _parser.Parser.parse(
|
|
80
|
+
const parsed = _parser.Parser.parse(children);
|
|
93
81
|
if (__DEV__ && debug) {
|
|
94
82
|
// Log a lightweight summary: the raw nodes hold React elements
|
|
95
83
|
// (`element`) and arbitrary props that aren't safely serializable.
|
|
@@ -107,7 +95,7 @@ function Skeleton({
|
|
|
107
95
|
}
|
|
108
96
|
return [];
|
|
109
97
|
}
|
|
110
|
-
}, [loading, styles, deep,
|
|
98
|
+
}, [loading, styles, deep, children, debug]);
|
|
111
99
|
|
|
112
100
|
// Create skeleton config
|
|
113
101
|
const config = (0, _react.useMemo)(() => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_parser","_SkeletonRenderer","_SkeletonIgnore","_StyleSkeleton","
|
|
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":[]}
|