react-native-smart-skeleton 0.0.1
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/README.md +255 -0
- package/lib/commonjs/animations/breathing.js +53 -0
- package/lib/commonjs/animations/breathing.js.map +1 -0
- package/lib/commonjs/animations/pulse.js +50 -0
- package/lib/commonjs/animations/pulse.js.map +1 -0
- package/lib/commonjs/animations/shimmer.js +68 -0
- package/lib/commonjs/animations/shimmer.js.map +1 -0
- package/lib/commonjs/animations/wave.js +54 -0
- package/lib/commonjs/animations/wave.js.map +1 -0
- package/lib/commonjs/clone/SkeletonClone.js +91 -0
- package/lib/commonjs/clone/SkeletonClone.js.map +1 -0
- package/lib/commonjs/components/Circle.js +27 -0
- package/lib/commonjs/components/Circle.js.map +1 -0
- package/lib/commonjs/components/Group.js +57 -0
- package/lib/commonjs/components/Group.js.map +1 -0
- package/lib/commonjs/components/Pill.js +32 -0
- package/lib/commonjs/components/Pill.js.map +1 -0
- package/lib/commonjs/components/Rect.js +21 -0
- package/lib/commonjs/components/Rect.js.map +1 -0
- package/lib/commonjs/components/Skeleton.js +196 -0
- package/lib/commonjs/components/Skeleton.js.map +1 -0
- package/lib/commonjs/components/Square.js +28 -0
- package/lib/commonjs/components/Square.js.map +1 -0
- package/lib/commonjs/demo/demo.gif +0 -0
- package/lib/commonjs/hooks/useReducedMotion.js +42 -0
- package/lib/commonjs/hooks/useReducedMotion.js.map +1 -0
- package/lib/commonjs/hooks/useSkeletonTheme.js +46 -0
- package/lib/commonjs/hooks/useSkeletonTheme.js.map +1 -0
- package/lib/commonjs/index.js +149 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/presets/Card.js +83 -0
- package/lib/commonjs/presets/Card.js.map +1 -0
- package/lib/commonjs/presets/Chat.js +54 -0
- package/lib/commonjs/presets/Chat.js.map +1 -0
- package/lib/commonjs/presets/Product.js +70 -0
- package/lib/commonjs/presets/Product.js.map +1 -0
- package/lib/commonjs/presets/Profile.js +67 -0
- package/lib/commonjs/presets/Profile.js.map +1 -0
- package/lib/commonjs/presets/Video.js +76 -0
- package/lib/commonjs/presets/Video.js.map +1 -0
- package/lib/commonjs/providers/SkeletonProvider.js +70 -0
- package/lib/commonjs/providers/SkeletonProvider.js.map +1 -0
- package/lib/commonjs/types/index.js +6 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/commonjs/utils/colors.js +144 -0
- package/lib/commonjs/utils/colors.js.map +1 -0
- package/lib/commonjs/utils/responsive.js +84 -0
- package/lib/commonjs/utils/responsive.js.map +1 -0
- package/lib/commonjs/utils/theme.js +39 -0
- package/lib/commonjs/utils/theme.js.map +1 -0
- package/lib/module/animations/breathing.js +47 -0
- package/lib/module/animations/breathing.js.map +1 -0
- package/lib/module/animations/pulse.js +44 -0
- package/lib/module/animations/pulse.js.map +1 -0
- package/lib/module/animations/shimmer.js +61 -0
- package/lib/module/animations/shimmer.js.map +1 -0
- package/lib/module/animations/wave.js +48 -0
- package/lib/module/animations/wave.js.map +1 -0
- package/lib/module/clone/SkeletonClone.js +84 -0
- package/lib/module/clone/SkeletonClone.js.map +1 -0
- package/lib/module/components/Circle.js +20 -0
- package/lib/module/components/Circle.js.map +1 -0
- package/lib/module/components/Group.js +50 -0
- package/lib/module/components/Group.js.map +1 -0
- package/lib/module/components/Pill.js +25 -0
- package/lib/module/components/Pill.js.map +1 -0
- package/lib/module/components/Rect.js +14 -0
- package/lib/module/components/Rect.js.map +1 -0
- package/lib/module/components/Skeleton.js +188 -0
- package/lib/module/components/Skeleton.js.map +1 -0
- package/lib/module/components/Square.js +21 -0
- package/lib/module/components/Square.js.map +1 -0
- package/lib/module/demo/demo.gif +0 -0
- package/lib/module/hooks/useReducedMotion.js +37 -0
- package/lib/module/hooks/useReducedMotion.js.map +1 -0
- package/lib/module/hooks/useSkeletonTheme.js +40 -0
- package/lib/module/hooks/useSkeletonTheme.js.map +1 -0
- package/lib/module/index.js +50 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/presets/Card.js +76 -0
- package/lib/module/presets/Card.js.map +1 -0
- package/lib/module/presets/Chat.js +47 -0
- package/lib/module/presets/Chat.js.map +1 -0
- package/lib/module/presets/Product.js +63 -0
- package/lib/module/presets/Product.js.map +1 -0
- package/lib/module/presets/Profile.js +60 -0
- package/lib/module/presets/Profile.js.map +1 -0
- package/lib/module/presets/Video.js +69 -0
- package/lib/module/presets/Video.js.map +1 -0
- package/lib/module/providers/SkeletonProvider.js +61 -0
- package/lib/module/providers/SkeletonProvider.js.map +1 -0
- package/lib/module/types/index.js +2 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/utils/colors.js +132 -0
- package/lib/module/utils/colors.js.map +1 -0
- package/lib/module/utils/responsive.js +74 -0
- package/lib/module/utils/responsive.js.map +1 -0
- package/lib/module/utils/theme.js +32 -0
- package/lib/module/utils/theme.js.map +1 -0
- package/lib/typescript/animations/breathing.d.ts +26 -0
- package/lib/typescript/animations/breathing.d.ts.map +1 -0
- package/lib/typescript/animations/pulse.d.ts +22 -0
- package/lib/typescript/animations/pulse.d.ts.map +1 -0
- package/lib/typescript/animations/shimmer.d.ts +34 -0
- package/lib/typescript/animations/shimmer.d.ts.map +1 -0
- package/lib/typescript/animations/wave.d.ts +23 -0
- package/lib/typescript/animations/wave.d.ts.map +1 -0
- package/lib/typescript/clone/SkeletonClone.d.ts +30 -0
- package/lib/typescript/clone/SkeletonClone.d.ts.map +1 -0
- package/lib/typescript/components/Circle.d.ts +10 -0
- package/lib/typescript/components/Circle.d.ts.map +1 -0
- package/lib/typescript/components/Group.d.ts +21 -0
- package/lib/typescript/components/Group.d.ts.map +1 -0
- package/lib/typescript/components/Pill.d.ts +12 -0
- package/lib/typescript/components/Pill.d.ts.map +1 -0
- package/lib/typescript/components/Rect.d.ts +12 -0
- package/lib/typescript/components/Rect.d.ts.map +1 -0
- package/lib/typescript/components/Skeleton.d.ts +16 -0
- package/lib/typescript/components/Skeleton.d.ts.map +1 -0
- package/lib/typescript/components/Square.d.ts +10 -0
- package/lib/typescript/components/Square.d.ts.map +1 -0
- package/lib/typescript/hooks/useReducedMotion.d.ts +11 -0
- package/lib/typescript/hooks/useReducedMotion.d.ts.map +1 -0
- package/lib/typescript/hooks/useSkeletonTheme.d.ts +12 -0
- package/lib/typescript/hooks/useSkeletonTheme.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +51 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/presets/Card.d.ts +11 -0
- package/lib/typescript/presets/Card.d.ts.map +1 -0
- package/lib/typescript/presets/Chat.d.ts +12 -0
- package/lib/typescript/presets/Chat.d.ts.map +1 -0
- package/lib/typescript/presets/Product.d.ts +12 -0
- package/lib/typescript/presets/Product.d.ts.map +1 -0
- package/lib/typescript/presets/Profile.d.ts +11 -0
- package/lib/typescript/presets/Profile.d.ts.map +1 -0
- package/lib/typescript/presets/Video.d.ts +12 -0
- package/lib/typescript/presets/Video.d.ts.map +1 -0
- package/lib/typescript/providers/SkeletonProvider.d.ts +18 -0
- package/lib/typescript/providers/SkeletonProvider.d.ts.map +1 -0
- package/lib/typescript/types/index.d.ts +149 -0
- package/lib/typescript/types/index.d.ts.map +1 -0
- package/lib/typescript/utils/colors.d.ts +51 -0
- package/lib/typescript/utils/colors.d.ts.map +1 -0
- package/lib/typescript/utils/responsive.d.ts +27 -0
- package/lib/typescript/utils/responsive.d.ts.map +1 -0
- package/lib/typescript/utils/theme.d.ts +16 -0
- package/lib/typescript/utils/theme.d.ts.map +1 -0
- package/package.json +74 -0
- package/src/animations/breathing.tsx +81 -0
- package/src/animations/pulse.tsx +75 -0
- package/src/animations/shimmer.tsx +88 -0
- package/src/animations/wave.tsx +74 -0
- package/src/clone/SkeletonClone.tsx +82 -0
- package/src/components/Circle.tsx +13 -0
- package/src/components/Group.tsx +55 -0
- package/src/components/Pill.tsx +23 -0
- package/src/components/Rect.tsx +15 -0
- package/src/components/Skeleton.tsx +218 -0
- package/src/components/Square.tsx +13 -0
- package/src/demo/demo.gif +0 -0
- package/src/hooks/useReducedMotion.ts +46 -0
- package/src/hooks/useSkeletonTheme.ts +45 -0
- package/src/index.ts +94 -0
- package/src/presets/Card.tsx +56 -0
- package/src/presets/Chat.tsx +52 -0
- package/src/presets/Product.tsx +45 -0
- package/src/presets/Profile.tsx +54 -0
- package/src/presets/Video.tsx +53 -0
- package/src/providers/SkeletonProvider.tsx +67 -0
- package/src/types/index.ts +246 -0
- package/src/utils/colors.ts +132 -0
- package/src/utils/responsive.ts +73 -0
- package/src/utils/theme.ts +35 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import React, { useCallback, useContext, useState } from "react";
|
|
2
|
+
import { I18nManager, View } from "react-native";
|
|
3
|
+
import Animated from "react-native-reanimated";
|
|
4
|
+
import { SkeletonContext } from "../providers/SkeletonProvider";
|
|
5
|
+
import { useSkeletonTheme } from "../hooks/useSkeletonTheme";
|
|
6
|
+
import { useReducedMotion } from "../hooks/useReducedMotion";
|
|
7
|
+
import { useShimmerTransform } from "../animations/shimmer";
|
|
8
|
+
import { usePulseStyle } from "../animations/pulse";
|
|
9
|
+
import { useWaveTransform } from "../animations/wave";
|
|
10
|
+
import { useBreathingStyle } from "../animations/breathing";
|
|
11
|
+
import { buildSweepGradient } from "../utils/colors";
|
|
12
|
+
const LinearGradientComponent = (() => {
|
|
13
|
+
try {
|
|
14
|
+
return require("expo-linear-gradient").LinearGradient;
|
|
15
|
+
} catch {
|
|
16
|
+
try {
|
|
17
|
+
return require("react-native-linear-gradient").default;
|
|
18
|
+
} catch {
|
|
19
|
+
return View;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
})();
|
|
23
|
+
const AnimatedLinearGradient = Animated.createAnimatedComponent(LinearGradientComponent);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The base building block of react-native-smart-skeleton. Renders a single
|
|
27
|
+
* rectangular (optionally rounded) placeholder shape with the requested
|
|
28
|
+
* animation, fully theme-aware and accessible.
|
|
29
|
+
*
|
|
30
|
+
* Most consumers will reach for `Skeleton.Rect`, `Skeleton.Circle`,
|
|
31
|
+
* `Skeleton.Square`, or `Skeleton.Pill` instead of this directly, but those
|
|
32
|
+
* are all thin wrappers around this component.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* <Skeleton width={200} height={20} animation="shimmer" />
|
|
36
|
+
*/
|
|
37
|
+
export default function Skeleton({
|
|
38
|
+
width = "100%",
|
|
39
|
+
height = 16,
|
|
40
|
+
borderRadius = 4,
|
|
41
|
+
backgroundColor,
|
|
42
|
+
highlightColor,
|
|
43
|
+
gradientColors,
|
|
44
|
+
animation,
|
|
45
|
+
duration,
|
|
46
|
+
delay = 0,
|
|
47
|
+
rtl,
|
|
48
|
+
colorVariant,
|
|
49
|
+
style,
|
|
50
|
+
accessibilityLabel = "Loading content",
|
|
51
|
+
accessible = true,
|
|
52
|
+
testID
|
|
53
|
+
}) {
|
|
54
|
+
const ctx = useContext(SkeletonContext);
|
|
55
|
+
const themeColors = useSkeletonTheme(colorVariant);
|
|
56
|
+
const osReducedMotion = useReducedMotion();
|
|
57
|
+
const [measuredWidth, setMeasuredWidth] = useState(0);
|
|
58
|
+
const onLayout = useCallback(e => {
|
|
59
|
+
setMeasuredWidth(e.nativeEvent.layout.width);
|
|
60
|
+
}, []);
|
|
61
|
+
|
|
62
|
+
// Resolve effective settings, falling back through: prop -> provider -> library default.
|
|
63
|
+
const resolvedAnimation = animation ?? ctx?.animation ?? "shimmer";
|
|
64
|
+
const resolvedDuration = duration ?? ctx?.duration ?? 1200;
|
|
65
|
+
const resolvedPerformanceMode = ctx?.performanceMode ?? "balanced";
|
|
66
|
+
const reducedMotion = ctx?.reducedMotion ?? osReducedMotion;
|
|
67
|
+
const resolvedRtl = rtl ?? ctx?.rtl ?? I18nManager.isRTL;
|
|
68
|
+
const bg = backgroundColor ?? themeColors.background;
|
|
69
|
+
const highlight = highlightColor ?? themeColors.highlight;
|
|
70
|
+
const colors = gradientColors ?? buildSweepGradient(bg, highlight);
|
|
71
|
+
|
|
72
|
+
// Reduced motion: never run shimmer/wave/pulse at full intensity. Fall back to a
|
|
73
|
+
// slow "breathing" effect unless the consumer explicitly asked for "none".
|
|
74
|
+
const effectiveAnimation = reducedMotion && resolvedAnimation !== "none" ? "breathing" : resolvedAnimation;
|
|
75
|
+
const disabled = effectiveAnimation === "none";
|
|
76
|
+
const shimmer = useShimmerTransform(measuredWidth, {
|
|
77
|
+
duration: resolvedDuration,
|
|
78
|
+
delay,
|
|
79
|
+
disabled: disabled || effectiveAnimation !== "shimmer",
|
|
80
|
+
performanceMode: resolvedPerformanceMode
|
|
81
|
+
});
|
|
82
|
+
const wave = useWaveTransform(measuredWidth, {
|
|
83
|
+
duration: resolvedDuration,
|
|
84
|
+
delay,
|
|
85
|
+
disabled: disabled || effectiveAnimation !== "wave",
|
|
86
|
+
performanceMode: resolvedPerformanceMode
|
|
87
|
+
});
|
|
88
|
+
const pulseStyle = usePulseStyle({
|
|
89
|
+
duration: resolvedDuration,
|
|
90
|
+
delay,
|
|
91
|
+
disabled: disabled || effectiveAnimation !== "pulse",
|
|
92
|
+
performanceMode: resolvedPerformanceMode
|
|
93
|
+
});
|
|
94
|
+
const breathingStyle = useBreathingStyle({
|
|
95
|
+
duration: reducedMotion ? resolvedDuration * 1.6 : resolvedDuration,
|
|
96
|
+
delay,
|
|
97
|
+
disabled: disabled || effectiveAnimation !== "breathing",
|
|
98
|
+
performanceMode: resolvedPerformanceMode,
|
|
99
|
+
// Reduced-motion breathing should be extra subtle.
|
|
100
|
+
minScale: reducedMotion ? 0.99 : 0.97,
|
|
101
|
+
minOpacity: reducedMotion ? 0.92 : 0.85
|
|
102
|
+
});
|
|
103
|
+
const containerStyle = [{
|
|
104
|
+
width,
|
|
105
|
+
height,
|
|
106
|
+
borderRadius,
|
|
107
|
+
overflow: "hidden",
|
|
108
|
+
backgroundColor: bg
|
|
109
|
+
}, style];
|
|
110
|
+
const renderOverlay = () => {
|
|
111
|
+
if (disabled) return null;
|
|
112
|
+
if (effectiveAnimation === "pulse") {
|
|
113
|
+
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
114
|
+
pointerEvents: "none",
|
|
115
|
+
style: [{
|
|
116
|
+
position: "absolute",
|
|
117
|
+
top: 0,
|
|
118
|
+
right: 0,
|
|
119
|
+
bottom: 0,
|
|
120
|
+
left: 0,
|
|
121
|
+
backgroundColor: highlight
|
|
122
|
+
}, pulseStyle]
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (effectiveAnimation === "breathing") {
|
|
126
|
+
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
127
|
+
pointerEvents: "none",
|
|
128
|
+
style: [{
|
|
129
|
+
position: "absolute",
|
|
130
|
+
top: 0,
|
|
131
|
+
right: 0,
|
|
132
|
+
bottom: 0,
|
|
133
|
+
left: 0,
|
|
134
|
+
backgroundColor: highlight
|
|
135
|
+
}, breathingStyle]
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (effectiveAnimation === "shimmer" || effectiveAnimation === "wave") {
|
|
139
|
+
const transform = effectiveAnimation === "shimmer" ? shimmer : wave;
|
|
140
|
+
const flip = resolvedRtl ? {
|
|
141
|
+
transform: [{
|
|
142
|
+
scaleX: -1
|
|
143
|
+
}]
|
|
144
|
+
} : null;
|
|
145
|
+
return /*#__PURE__*/React.createElement(Animated.View, {
|
|
146
|
+
pointerEvents: "none",
|
|
147
|
+
style: [{
|
|
148
|
+
position: "absolute",
|
|
149
|
+
top: 0,
|
|
150
|
+
bottom: 0,
|
|
151
|
+
left: 0
|
|
152
|
+
}, {
|
|
153
|
+
width: transform.sweepWidth
|
|
154
|
+
}, transform.style, flip]
|
|
155
|
+
}, /*#__PURE__*/React.createElement(AnimatedLinearGradient, {
|
|
156
|
+
colors: colors,
|
|
157
|
+
start: {
|
|
158
|
+
x: 0,
|
|
159
|
+
y: 0
|
|
160
|
+
},
|
|
161
|
+
end: {
|
|
162
|
+
x: 1,
|
|
163
|
+
y: 0
|
|
164
|
+
},
|
|
165
|
+
style: {
|
|
166
|
+
flex: 1
|
|
167
|
+
}
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
};
|
|
172
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
173
|
+
onLayout: onLayout,
|
|
174
|
+
style: containerStyle,
|
|
175
|
+
accessible: accessible,
|
|
176
|
+
accessibilityRole: accessible ? "image" : undefined,
|
|
177
|
+
accessibilityLabel: accessible ? accessibilityLabel : undefined,
|
|
178
|
+
accessibilityState: accessible ? {
|
|
179
|
+
busy: true
|
|
180
|
+
} : undefined
|
|
181
|
+
// importantForAccessibility keeps these decorative-but-informative
|
|
182
|
+
// nodes from over-announcing on Android when nested in lists.
|
|
183
|
+
,
|
|
184
|
+
importantForAccessibility: accessible ? "yes" : "no-hide-descendants",
|
|
185
|
+
testID: testID
|
|
186
|
+
}, renderOverlay());
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","useContext","useState","I18nManager","View","Animated","SkeletonContext","useSkeletonTheme","useReducedMotion","useShimmerTransform","usePulseStyle","useWaveTransform","useBreathingStyle","buildSweepGradient","LinearGradientComponent","require","LinearGradient","default","AnimatedLinearGradient","createAnimatedComponent","Skeleton","width","height","borderRadius","backgroundColor","highlightColor","gradientColors","animation","duration","delay","rtl","colorVariant","style","accessibilityLabel","accessible","testID","ctx","themeColors","osReducedMotion","measuredWidth","setMeasuredWidth","onLayout","e","nativeEvent","layout","resolvedAnimation","resolvedDuration","resolvedPerformanceMode","performanceMode","reducedMotion","resolvedRtl","isRTL","bg","background","highlight","colors","effectiveAnimation","disabled","shimmer","wave","pulseStyle","breathingStyle","minScale","minOpacity","containerStyle","overflow","renderOverlay","createElement","pointerEvents","position","top","right","bottom","left","transform","flip","scaleX","sweepWidth","start","x","y","end","flex","accessibilityRole","undefined","accessibilityState","busy","importantForAccessibility"],"sourceRoot":"../../../src","sources":["components/Skeleton.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import React from "react";
|
|
3
|
+
import Skeleton from "./Skeleton";
|
|
4
|
+
/**
|
|
5
|
+
* A square skeleton placeholder with equal width and height.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* <Skeleton.Square size={64} borderRadius={8} />
|
|
9
|
+
*/
|
|
10
|
+
export default function Square({
|
|
11
|
+
size = 50,
|
|
12
|
+
borderRadius = 4,
|
|
13
|
+
...props
|
|
14
|
+
}) {
|
|
15
|
+
return /*#__PURE__*/React.createElement(Skeleton, _extends({
|
|
16
|
+
width: size,
|
|
17
|
+
height: size,
|
|
18
|
+
borderRadius: borderRadius
|
|
19
|
+
}, props));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=Square.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Skeleton","Square","size","borderRadius","props","createElement","_extends","width","height"],"sourceRoot":"../../../src","sources":["components/Square.tsx"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,QAAQ,MAAM,YAAY;AAGjC;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,MAAMA,CAAC;EAAEC,IAAI,GAAG,EAAE;EAAEC,YAAY,GAAG,CAAC;EAAE,GAAGC;AAA2B,CAAC,EAAE;EAC3F,oBAAOL,KAAA,CAAAM,aAAA,CAACL,QAAQ,EAAAM,QAAA;IAACC,KAAK,EAAEL,IAAK;IAACM,MAAM,EAAEN,IAAK;IAACC,YAAY,EAAEA;EAAa,GAAKC,KAAK,CAAG,CAAC;AACzF","ignoreList":[]}
|
|
Binary file
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useEffect, useState } from "react";
|
|
2
|
+
import { AccessibilityInfo } from "react-native";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Tracks the OS-level "reduce motion" accessibility setting
|
|
6
|
+
* (Reduce Motion on iOS, Remove Animations on Android) and keeps it
|
|
7
|
+
* up to date if the user changes the setting while the app is running.
|
|
8
|
+
*
|
|
9
|
+
* Skeleton animations should fall back to a static or near-static
|
|
10
|
+
* appearance (or the "breathing" animation at a slow, low-amplitude
|
|
11
|
+
* rate) when this returns true.
|
|
12
|
+
*/
|
|
13
|
+
export function useReducedMotion() {
|
|
14
|
+
const [reducedMotion, setReducedMotion] = useState(false);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
let isMounted = true;
|
|
17
|
+
AccessibilityInfo.isReduceMotionEnabled?.().then(enabled => {
|
|
18
|
+
if (isMounted) setReducedMotion(!!enabled);
|
|
19
|
+
}).catch(() => {
|
|
20
|
+
// Some platforms/environments (e.g. older RN, web shims) may not
|
|
21
|
+
// implement this — default to false (animations enabled).
|
|
22
|
+
});
|
|
23
|
+
const subscription = AccessibilityInfo.addEventListener("reduceMotionChanged", enabled => {
|
|
24
|
+
setReducedMotion(!!enabled);
|
|
25
|
+
});
|
|
26
|
+
return () => {
|
|
27
|
+
isMounted = false;
|
|
28
|
+
// RN >= 0.65 returns an EmitterSubscription with `.remove()`.
|
|
29
|
+
// Older versions returned void and relied on removeEventListener.
|
|
30
|
+
if (subscription && typeof subscription.remove === "function") {
|
|
31
|
+
subscription.remove();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}, []);
|
|
35
|
+
return reducedMotion;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=useReducedMotion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","AccessibilityInfo","useReducedMotion","reducedMotion","setReducedMotion","isMounted","isReduceMotionEnabled","then","enabled","catch","subscription","addEventListener","remove"],"sourceRoot":"../../../src","sources":["hooks/useReducedMotion.ts"],"mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,iBAAiB,QAAQ,cAAc;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAA,EAAY;EACxC,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGJ,QAAQ,CAAC,KAAK,CAAC;EAEzDD,SAAS,CAAC,MAAM;IACZ,IAAIM,SAAS,GAAG,IAAI;IAEpBJ,iBAAiB,CAACK,qBAAqB,GAAG,CAAC,CACtCC,IAAI,CAAEC,OAAO,IAAK;MACf,IAAIH,SAAS,EAAED,gBAAgB,CAAC,CAAC,CAACI,OAAO,CAAC;IAC9C,CAAC,CAAC,CACDC,KAAK,CAAC,MAAM;MACT;MACA;IAAA,CACH,CAAC;IAEN,MAAMC,YAAY,GAAGT,iBAAiB,CAACU,gBAAgB,CACnD,qBAAqB,EACpBH,OAAgB,IAAK;MAClBJ,gBAAgB,CAAC,CAAC,CAACI,OAAO,CAAC;IAC/B,CACJ,CAAC;IAED,OAAO,MAAM;MACTH,SAAS,GAAG,KAAK;MACjB;MACA;MACA,IAAIK,YAAY,IAAI,OAAQA,YAAY,CAASE,MAAM,KAAK,UAAU,EAAE;QACnEF,YAAY,CAASE,MAAM,CAAC,CAAC;MAClC;IACJ,CAAC;EACL,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOT,aAAa;AACxB","ignoreList":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useContext, useMemo } from "react";
|
|
2
|
+
import { useColorScheme } from "react-native";
|
|
3
|
+
import { SkeletonContext } from "../providers/SkeletonProvider";
|
|
4
|
+
import { getDefaultThemeColors } from "../utils/theme";
|
|
5
|
+
import { resolveThemeColors } from "../utils/colors";
|
|
6
|
+
/**
|
|
7
|
+
* Resolves the active light/dark colors for a skeleton.
|
|
8
|
+
*
|
|
9
|
+
* If used inside a <SkeletonProvider>, honors its `theme` prop ("light" | "dark" | "system")
|
|
10
|
+
* and any registered brand `colors`. If used standalone (no provider), falls back to the
|
|
11
|
+
* device's OS color scheme and the library's default palette.
|
|
12
|
+
*
|
|
13
|
+
* @param colorVariant optional brand color variant name registered on the provider
|
|
14
|
+
*/
|
|
15
|
+
export function useSkeletonTheme(colorVariant) {
|
|
16
|
+
const ctx = useContext(SkeletonContext);
|
|
17
|
+
const systemScheme = useColorScheme();
|
|
18
|
+
return useMemo(() => {
|
|
19
|
+
if (ctx) {
|
|
20
|
+
const colors = ctx.getVariantColors(colorVariant);
|
|
21
|
+
return {
|
|
22
|
+
isDark: ctx.isDark,
|
|
23
|
+
background: colors.background,
|
|
24
|
+
highlight: colors.highlight
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const isDark = systemScheme === "dark";
|
|
28
|
+
const fallback = getDefaultThemeColors(isDark);
|
|
29
|
+
const colors = resolveThemeColors({
|
|
30
|
+
isDark,
|
|
31
|
+
ambient: fallback
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
isDark,
|
|
35
|
+
background: colors.background,
|
|
36
|
+
highlight: colors.highlight
|
|
37
|
+
};
|
|
38
|
+
}, [ctx, systemScheme, colorVariant]);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=useSkeletonTheme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useContext","useMemo","useColorScheme","SkeletonContext","getDefaultThemeColors","resolveThemeColors","useSkeletonTheme","colorVariant","ctx","systemScheme","colors","getVariantColors","isDark","background","highlight","fallback","ambient"],"sourceRoot":"../../../src","sources":["hooks/useSkeletonTheme.ts"],"mappings":"AAAA,SAASA,UAAU,EAAEC,OAAO,QAAQ,OAAO;AAC3C,SAASC,cAAc,QAAQ,cAAc;AAC7C,SAASC,eAAe,QAAQ,+BAA+B;AAC/D,SAASC,qBAAqB,QAAQ,gBAAgB;AACtD,SAASC,kBAAkB,QAAQ,iBAAiB;AAGpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAACC,YAAqB,EAAyB;EAC3E,MAAMC,GAAG,GAAGR,UAAU,CAACG,eAAe,CAAC;EACvC,MAAMM,YAAY,GAAGP,cAAc,CAAC,CAAC;EAErC,OAAOD,OAAO,CAAC,MAAM;IACjB,IAAIO,GAAG,EAAE;MACL,MAAME,MAAM,GAAGF,GAAG,CAACG,gBAAgB,CAACJ,YAAY,CAAC;MACjD,OAAO;QACHK,MAAM,EAAEJ,GAAG,CAACI,MAAM;QAClBC,UAAU,EAAEH,MAAM,CAACG,UAAU;QAC7BC,SAAS,EAAEJ,MAAM,CAACI;MACtB,CAAC;IACL;IAEA,MAAMF,MAAM,GAAGH,YAAY,KAAK,MAAM;IACtC,MAAMM,QAAQ,GAAGX,qBAAqB,CAACQ,MAAM,CAAC;IAE9C,MAAMF,MAAM,GAAGL,kBAAkB,CAAC;MAC9BO,MAAM;MACNI,OAAO,EAAED;IACb,CAAC,CAAC;IAEF,OAAO;MACHH,MAAM;MACNC,UAAU,EAAEH,MAAM,CAACG,UAAU;MAC7BC,SAAS,EAAEJ,MAAM,CAACI;IACtB,CAAC;EACL,CAAC,EAAE,CAACN,GAAG,EAAEC,YAAY,EAAEF,YAAY,CAAC,CAAC;AACzC","ignoreList":[]}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import SkeletonBase from "./components/Skeleton";
|
|
2
|
+
import Rect from "./components/Rect";
|
|
3
|
+
import Circle from "./components/Circle";
|
|
4
|
+
import Square from "./components/Square";
|
|
5
|
+
import Pill from "./components/Pill";
|
|
6
|
+
import Group from "./components/Group";
|
|
7
|
+
import Profile from "./presets/Profile";
|
|
8
|
+
import Card from "./presets/Card";
|
|
9
|
+
import Chat from "./presets/Chat";
|
|
10
|
+
import Product from "./presets/Product";
|
|
11
|
+
import Video from "./presets/Video";
|
|
12
|
+
import SkeletonClone from "./clone/SkeletonClone";
|
|
13
|
+
export { SkeletonProvider, SkeletonContext } from "./providers/SkeletonProvider";
|
|
14
|
+
export { useSkeletonTheme } from "./hooks/useSkeletonTheme";
|
|
15
|
+
export { useReducedMotion } from "./hooks/useReducedMotion";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* `Skeleton` is the library's primary export: a callable base component
|
|
19
|
+
* (`<Skeleton />`) that also carries every shape, the layout-grouping
|
|
20
|
+
* helper, and every smart preset as static properties — so you only ever
|
|
21
|
+
* need a single import.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* import { Skeleton, SkeletonProvider } from "react-native-smart-skeleton";
|
|
25
|
+
*
|
|
26
|
+
* <SkeletonProvider>
|
|
27
|
+
* <Skeleton.Rect width={200} height={20} />
|
|
28
|
+
* <Skeleton.Circle size={48} />
|
|
29
|
+
* <Skeleton.Profile lines={2} />
|
|
30
|
+
* </SkeletonProvider>
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
const Skeleton = SkeletonBase;
|
|
34
|
+
Skeleton.Rect = Rect;
|
|
35
|
+
Skeleton.Circle = Circle;
|
|
36
|
+
Skeleton.Square = Square;
|
|
37
|
+
Skeleton.Pill = Pill;
|
|
38
|
+
Skeleton.Group = Group;
|
|
39
|
+
Skeleton.Clone = SkeletonClone;
|
|
40
|
+
Skeleton.Profile = Profile;
|
|
41
|
+
Skeleton.Card = Card;
|
|
42
|
+
Skeleton.Chat = Chat;
|
|
43
|
+
Skeleton.Product = Product;
|
|
44
|
+
Skeleton.Video = Video;
|
|
45
|
+
export { Skeleton };
|
|
46
|
+
export { SkeletonBase };
|
|
47
|
+
export { Rect, Circle, Square, Pill, Group, SkeletonClone };
|
|
48
|
+
export { Profile, Card, Chat, Product, Video };
|
|
49
|
+
export default Skeleton;
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SkeletonBase","Rect","Circle","Square","Pill","Group","Profile","Card","Chat","Product","Video","SkeletonClone","SkeletonProvider","SkeletonContext","useSkeletonTheme","useReducedMotion","Skeleton","Clone"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,OAAOA,YAAY,MAAM,uBAAuB;AAChD,OAAOC,IAAI,MAAM,mBAAmB;AACpC,OAAOC,MAAM,MAAM,qBAAqB;AACxC,OAAOC,MAAM,MAAM,qBAAqB;AACxC,OAAOC,IAAI,MAAM,mBAAmB;AACpC,OAAOC,KAAK,MAAM,oBAAoB;AAEtC,OAAOC,OAAO,MAAM,mBAAmB;AACvC,OAAOC,IAAI,MAAM,gBAAgB;AACjC,OAAOC,IAAI,MAAM,gBAAgB;AACjC,OAAOC,OAAO,MAAM,mBAAmB;AACvC,OAAOC,KAAK,MAAM,iBAAiB;AAEnC,OAAOC,aAAa,MAAM,uBAAuB;AAEjD,SAASC,gBAAgB,EAAEC,eAAe,QAAQ,8BAA8B;AAChF,SAASC,gBAAgB,QAAQ,0BAA0B;AAC3D,SAASC,gBAAgB,QAAQ,0BAA0B;;AA4B3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAeA,MAAMC,QAAQ,GAAGhB,YAAiC;AAElDgB,QAAQ,CAACf,IAAI,GAAGA,IAAI;AACpBe,QAAQ,CAACd,MAAM,GAAGA,MAAM;AACxBc,QAAQ,CAACb,MAAM,GAAGA,MAAM;AACxBa,QAAQ,CAACZ,IAAI,GAAGA,IAAI;AACpBY,QAAQ,CAACX,KAAK,GAAGA,KAAK;AACtBW,QAAQ,CAACC,KAAK,GAAGN,aAAa;AAC9BK,QAAQ,CAACV,OAAO,GAAGA,OAAO;AAC1BU,QAAQ,CAACT,IAAI,GAAGA,IAAI;AACpBS,QAAQ,CAACR,IAAI,GAAGA,IAAI;AACpBQ,QAAQ,CAACP,OAAO,GAAGA,OAAO;AAC1BO,QAAQ,CAACN,KAAK,GAAGA,KAAK;AAEtB,SAASM,QAAQ;AACjB,SAAShB,YAAY;AACrB,SAASC,IAAI,EAAEC,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAEM,aAAa;AACzD,SAASL,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,OAAO,EAAEC,KAAK;AAE5C,eAAeM,QAAQ","ignoreList":[]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { View } from "react-native";
|
|
4
|
+
import Skeleton from "../components/Skeleton";
|
|
5
|
+
import Circle from "../components/Circle";
|
|
6
|
+
import Group from "../components/Group";
|
|
7
|
+
/**
|
|
8
|
+
* A ready-made skeleton block mimicking a typical content card: an image
|
|
9
|
+
* area on top, optionally a small avatar + name row, then body text lines.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Skeleton.Card imageHeight={160} lines={3} />
|
|
13
|
+
*/
|
|
14
|
+
export default function Card({
|
|
15
|
+
imageHeight = 160,
|
|
16
|
+
lines = 3,
|
|
17
|
+
showAvatar = false,
|
|
18
|
+
count = 1,
|
|
19
|
+
gap = 20,
|
|
20
|
+
animation,
|
|
21
|
+
style,
|
|
22
|
+
testID
|
|
23
|
+
}) {
|
|
24
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
25
|
+
style: style,
|
|
26
|
+
testID: testID
|
|
27
|
+
}, Array.from({
|
|
28
|
+
length: count
|
|
29
|
+
}).map((_, blockIndex) => /*#__PURE__*/React.createElement(View, {
|
|
30
|
+
key: blockIndex,
|
|
31
|
+
style: {
|
|
32
|
+
marginTop: blockIndex === 0 ? 0 : gap
|
|
33
|
+
}
|
|
34
|
+
}, /*#__PURE__*/React.createElement(Skeleton, {
|
|
35
|
+
width: "100%",
|
|
36
|
+
height: imageHeight,
|
|
37
|
+
borderRadius: 12,
|
|
38
|
+
animation: animation
|
|
39
|
+
}), showAvatar && /*#__PURE__*/React.createElement(View, {
|
|
40
|
+
style: {
|
|
41
|
+
flexDirection: "row",
|
|
42
|
+
alignItems: "center",
|
|
43
|
+
marginTop: 12
|
|
44
|
+
}
|
|
45
|
+
}, /*#__PURE__*/React.createElement(Circle, {
|
|
46
|
+
size: 32,
|
|
47
|
+
animation: animation
|
|
48
|
+
}), /*#__PURE__*/React.createElement(Skeleton, {
|
|
49
|
+
width: "40%",
|
|
50
|
+
height: 12,
|
|
51
|
+
style: {
|
|
52
|
+
marginLeft: 8
|
|
53
|
+
},
|
|
54
|
+
animation: animation
|
|
55
|
+
})), /*#__PURE__*/React.createElement(Group, {
|
|
56
|
+
staggerDelay: 60,
|
|
57
|
+
animation: animation,
|
|
58
|
+
style: {
|
|
59
|
+
marginTop: showAvatar ? 12 : 16
|
|
60
|
+
}
|
|
61
|
+
}, Array.from({
|
|
62
|
+
length: lines
|
|
63
|
+
}, (__, lineIndex) => {
|
|
64
|
+
const lineProps = {
|
|
65
|
+
width: lineIndex === lines - 1 ? "50%" : "100%",
|
|
66
|
+
height: 12,
|
|
67
|
+
style: {
|
|
68
|
+
marginTop: lineIndex === 0 ? 0 : 8
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
return /*#__PURE__*/React.createElement(Skeleton, _extends({
|
|
72
|
+
key: lineIndex
|
|
73
|
+
}, lineProps));
|
|
74
|
+
})))));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=Card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","Skeleton","Circle","Group","Card","imageHeight","lines","showAvatar","count","gap","animation","style","testID","createElement","Array","from","length","map","_","blockIndex","key","marginTop","width","height","borderRadius","flexDirection","alignItems","size","marginLeft","staggerDelay","__","lineIndex","lineProps","_extends"],"sourceRoot":"../../../src","sources":["presets/Card.tsx"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,OAAOC,QAAQ,MAAM,wBAAwB;AAC7C,OAAOC,MAAM,MAAM,sBAAsB;AACzC,OAAOC,KAAK,MAAM,qBAAqB;AAGvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,IAAIA,CAAC;EACzBC,WAAW,GAAG,GAAG;EACjBC,KAAK,GAAG,CAAC;EACTC,UAAU,GAAG,KAAK;EAClBC,KAAK,GAAG,CAAC;EACTC,GAAG,GAAG,EAAE;EACRC,SAAS;EACTC,KAAK;EACLC;AACqB,CAAC,EAAE;EACxB,oBACIb,KAAA,CAAAc,aAAA,CAACb,IAAI;IAACW,KAAK,EAAEA,KAAM;IAACC,MAAM,EAAEA;EAAO,GAC9BE,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAER;EAAM,CAAC,CAAC,CAACS,GAAG,CAAC,CAACC,CAAC,EAAEC,UAAU,kBAC7CpB,KAAA,CAAAc,aAAA,CAACb,IAAI;IAACoB,GAAG,EAAED,UAAW;IAACR,KAAK,EAAE;MAAEU,SAAS,EAAEF,UAAU,KAAK,CAAC,GAAG,CAAC,GAAGV;IAAI;EAAE,gBACpEV,KAAA,CAAAc,aAAA,CAACZ,QAAQ;IAACqB,KAAK,EAAC,MAAM;IAACC,MAAM,EAAElB,WAAY;IAACmB,YAAY,EAAE,EAAG;IAACd,SAAS,EAAEA;EAAU,CAAE,CAAC,EAErFH,UAAU,iBACPR,KAAA,CAAAc,aAAA,CAACb,IAAI;IAACW,KAAK,EAAE;MAAEc,aAAa,EAAE,KAAK;MAAEC,UAAU,EAAE,QAAQ;MAAEL,SAAS,EAAE;IAAG;EAAE,gBACvEtB,KAAA,CAAAc,aAAA,CAACX,MAAM;IAACyB,IAAI,EAAE,EAAG;IAACjB,SAAS,EAAEA;EAAU,CAAE,CAAC,eAC1CX,KAAA,CAAAc,aAAA,CAACZ,QAAQ;IAACqB,KAAK,EAAC,KAAK;IAACC,MAAM,EAAE,EAAG;IAACZ,KAAK,EAAE;MAAEiB,UAAU,EAAE;IAAE,CAAE;IAAClB,SAAS,EAAEA;EAAU,CAAE,CACjF,CACT,eAEDX,KAAA,CAAAc,aAAA,CAACV,KAAK;IACF0B,YAAY,EAAE,EAAG;IACjBnB,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAE;MAAEU,SAAS,EAAEd,UAAU,GAAG,EAAE,GAAG;IAAG;EAAE,GAE1CO,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAEV;EAAM,CAAC,EAAE,CAACwB,EAAE,EAAEC,SAAS,KAAK;IAC9C,MAAMC,SAAwB,GAAG;MAC7BV,KAAK,EAAES,SAAS,KAAKzB,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM;MAC/CiB,MAAM,EAAE,EAAE;MACVZ,KAAK,EAAE;QAAEU,SAAS,EAAEU,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG;MAAE;IAChD,CAAC;IACD,oBAAOhC,KAAA,CAAAc,aAAA,CAACZ,QAAQ,EAAAgC,QAAA;MAACb,GAAG,EAAEW;IAAU,GAAKC,SAAS,CAAG,CAAC;EACtD,CAAC,CACE,CACL,CACT,CACC,CAAC;AAEf","ignoreList":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { View } from "react-native";
|
|
3
|
+
import Skeleton from "../components/Skeleton";
|
|
4
|
+
const BUBBLE_WIDTHS = ["55%", "70%", "45%", "62%"];
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A ready-made skeleton block mimicking a chat conversation: a series of
|
|
8
|
+
* message bubbles, alternating left/right alignment by default to read as
|
|
9
|
+
* a two-party conversation while loading.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Skeleton.Chat messages={5} />
|
|
13
|
+
*/
|
|
14
|
+
export default function Chat({
|
|
15
|
+
messages = 4,
|
|
16
|
+
alternate = true,
|
|
17
|
+
gap = 12,
|
|
18
|
+
animation,
|
|
19
|
+
style,
|
|
20
|
+
testID
|
|
21
|
+
}) {
|
|
22
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
23
|
+
style: style,
|
|
24
|
+
testID: testID
|
|
25
|
+
}, Array.from({
|
|
26
|
+
length: messages
|
|
27
|
+
}).map((_, index) => {
|
|
28
|
+
const isRight = alternate && index % 2 === 1;
|
|
29
|
+
const width = BUBBLE_WIDTHS[index % BUBBLE_WIDTHS.length];
|
|
30
|
+
const height = 18 + index % 3 * 6;
|
|
31
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
32
|
+
key: index,
|
|
33
|
+
style: {
|
|
34
|
+
flexDirection: "row",
|
|
35
|
+
justifyContent: isRight ? "flex-end" : "flex-start",
|
|
36
|
+
marginTop: index === 0 ? 0 : gap
|
|
37
|
+
}
|
|
38
|
+
}, /*#__PURE__*/React.createElement(Skeleton, {
|
|
39
|
+
width: width,
|
|
40
|
+
height: height,
|
|
41
|
+
borderRadius: 14,
|
|
42
|
+
animation: animation,
|
|
43
|
+
delay: index * 70
|
|
44
|
+
}));
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=Chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","Skeleton","BUBBLE_WIDTHS","Chat","messages","alternate","gap","animation","style","testID","createElement","Array","from","length","map","_","index","isRight","width","height","key","flexDirection","justifyContent","marginTop","borderRadius","delay"],"sourceRoot":"../../../src","sources":["presets/Chat.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,OAAOC,QAAQ,MAAM,wBAAwB;AAG7C,MAAMC,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;;AAElD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,IAAIA,CAAC;EACzBC,QAAQ,GAAG,CAAC;EACZC,SAAS,GAAG,IAAI;EAChBC,GAAG,GAAG,EAAE;EACRC,SAAS;EACTC,KAAK;EACLC;AACqB,CAAC,EAAE;EACxB,oBACIV,KAAA,CAAAW,aAAA,CAACV,IAAI;IAACQ,KAAK,EAAEA,KAAM;IAACC,MAAM,EAAEA;EAAO,GAC9BE,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAET;EAAS,CAAC,CAAC,CAACU,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAK;IAChD,MAAMC,OAAO,GAAGZ,SAAS,IAAIW,KAAK,GAAG,CAAC,KAAK,CAAC;IAC5C,MAAME,KAAK,GAAGhB,aAAa,CAACc,KAAK,GAAGd,aAAa,CAACW,MAAM,CAAC;IACzD,MAAMM,MAAM,GAAG,EAAE,GAAKH,KAAK,GAAG,CAAC,GAAI,CAAE;IAErC,oBACIjB,KAAA,CAAAW,aAAA,CAACV,IAAI;MACDoB,GAAG,EAAEJ,KAAM;MACXR,KAAK,EAAE;QACHa,aAAa,EAAE,KAAK;QACpBC,cAAc,EAAEL,OAAO,GAAG,UAAU,GAAG,YAAY;QACnDM,SAAS,EAAEP,KAAK,KAAK,CAAC,GAAG,CAAC,GAAGV;MACjC;IAAE,gBAEFP,KAAA,CAAAW,aAAA,CAACT,QAAQ;MACLiB,KAAK,EAAEA,KAAM;MACbC,MAAM,EAAEA,MAAO;MACfK,YAAY,EAAE,EAAG;MACjBjB,SAAS,EAAEA,SAAU;MACrBkB,KAAK,EAAET,KAAK,GAAG;IAAG,CACrB,CACC,CAAC;EAEf,CAAC,CACC,CAAC;AAEf","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { View } from "react-native";
|
|
3
|
+
import Skeleton from "../components/Skeleton";
|
|
4
|
+
import { getRecommendedColumns } from "../utils/responsive";
|
|
5
|
+
/**
|
|
6
|
+
* A ready-made skeleton grid mimicking a product listing (e.g. e-commerce
|
|
7
|
+
* catalog or search results): square-ish image, title line, and price line,
|
|
8
|
+
* tiled into a responsive grid.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* <Skeleton.Product count={6} columns={2} />
|
|
12
|
+
*/
|
|
13
|
+
export default function Product({
|
|
14
|
+
imageHeight = 140,
|
|
15
|
+
columns,
|
|
16
|
+
count = 4,
|
|
17
|
+
gap = 16,
|
|
18
|
+
animation,
|
|
19
|
+
style,
|
|
20
|
+
testID
|
|
21
|
+
}) {
|
|
22
|
+
const resolvedColumns = columns ?? getRecommendedColumns();
|
|
23
|
+
const itemWidth = `${100 / resolvedColumns}%`;
|
|
24
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
25
|
+
style: [{
|
|
26
|
+
flexDirection: "row",
|
|
27
|
+
flexWrap: "wrap"
|
|
28
|
+
}, style],
|
|
29
|
+
testID: testID
|
|
30
|
+
}, Array.from({
|
|
31
|
+
length: count
|
|
32
|
+
}).map((_, index) => /*#__PURE__*/React.createElement(View, {
|
|
33
|
+
key: index,
|
|
34
|
+
style: {
|
|
35
|
+
width: itemWidth,
|
|
36
|
+
paddingHorizontal: gap / 2,
|
|
37
|
+
marginBottom: gap
|
|
38
|
+
}
|
|
39
|
+
}, /*#__PURE__*/React.createElement(Skeleton, {
|
|
40
|
+
width: "100%",
|
|
41
|
+
height: imageHeight,
|
|
42
|
+
borderRadius: 10,
|
|
43
|
+
animation: animation,
|
|
44
|
+
delay: index * 40
|
|
45
|
+
}), /*#__PURE__*/React.createElement(Skeleton, {
|
|
46
|
+
width: "80%",
|
|
47
|
+
height: 12,
|
|
48
|
+
style: {
|
|
49
|
+
marginTop: 8
|
|
50
|
+
},
|
|
51
|
+
animation: animation,
|
|
52
|
+
delay: index * 40
|
|
53
|
+
}), /*#__PURE__*/React.createElement(Skeleton, {
|
|
54
|
+
width: "40%",
|
|
55
|
+
height: 12,
|
|
56
|
+
style: {
|
|
57
|
+
marginTop: 6
|
|
58
|
+
},
|
|
59
|
+
animation: animation,
|
|
60
|
+
delay: index * 40
|
|
61
|
+
}))));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=Product.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","Skeleton","getRecommendedColumns","Product","imageHeight","columns","count","gap","animation","style","testID","resolvedColumns","itemWidth","createElement","flexDirection","flexWrap","Array","from","length","map","_","index","key","width","paddingHorizontal","marginBottom","height","borderRadius","delay","marginTop"],"sourceRoot":"../../../src","sources":["presets/Product.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,OAAOC,QAAQ,MAAM,wBAAwB;AAC7C,SAASC,qBAAqB,QAAQ,qBAAqB;AAG3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,OAAOA,CAAC;EAC5BC,WAAW,GAAG,GAAG;EACjBC,OAAO;EACPC,KAAK,GAAG,CAAC;EACTC,GAAG,GAAG,EAAE;EACRC,SAAS;EACTC,KAAK;EACLC;AACwB,CAAC,EAAE;EAC3B,MAAMC,eAAe,GAAGN,OAAO,IAAIH,qBAAqB,CAAC,CAAC;EAC1D,MAAMU,SAAS,GAAG,GAAG,GAAG,GAAGD,eAAe,GAAG;EAE7C,oBACIZ,KAAA,CAAAc,aAAA,CAACb,IAAI;IAACS,KAAK,EAAE,CAAC;MAAEK,aAAa,EAAE,KAAK;MAAEC,QAAQ,EAAE;IAAO,CAAC,EAAEN,KAAK,CAAE;IAACC,MAAM,EAAEA;EAAO,GAC5EM,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAEZ;EAAM,CAAC,CAAC,CAACa,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,kBACxCtB,KAAA,CAAAc,aAAA,CAACb,IAAI;IACDsB,GAAG,EAAED,KAAM;IACXZ,KAAK,EAAE;MACHc,KAAK,EAAEX,SAAgB;MACvBY,iBAAiB,EAAEjB,GAAG,GAAG,CAAC;MAC1BkB,YAAY,EAAElB;IAClB;EAAE,gBAEFR,KAAA,CAAAc,aAAA,CAACZ,QAAQ;IAACsB,KAAK,EAAC,MAAM;IAACG,MAAM,EAAEtB,WAAY;IAACuB,YAAY,EAAE,EAAG;IAACnB,SAAS,EAAEA,SAAU;IAACoB,KAAK,EAAEP,KAAK,GAAG;EAAG,CAAE,CAAC,eACzGtB,KAAA,CAAAc,aAAA,CAACZ,QAAQ;IAACsB,KAAK,EAAC,KAAK;IAACG,MAAM,EAAE,EAAG;IAACjB,KAAK,EAAE;MAAEoB,SAAS,EAAE;IAAE,CAAE;IAACrB,SAAS,EAAEA,SAAU;IAACoB,KAAK,EAAEP,KAAK,GAAG;EAAG,CAAE,CAAC,eACtGtB,KAAA,CAAAc,aAAA,CAACZ,QAAQ;IAACsB,KAAK,EAAC,KAAK;IAACG,MAAM,EAAE,EAAG;IAACjB,KAAK,EAAE;MAAEoB,SAAS,EAAE;IAAE,CAAE;IAACrB,SAAS,EAAEA,SAAU;IAACoB,KAAK,EAAEP,KAAK,GAAG;EAAG,CAAE,CACnG,CACT,CACC,CAAC;AAEf","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { View } from "react-native";
|
|
4
|
+
import Skeleton from "../components/Skeleton";
|
|
5
|
+
import Circle from "../components/Circle";
|
|
6
|
+
import Group from "../components/Group";
|
|
7
|
+
/**
|
|
8
|
+
* A ready-made skeleton block mimicking a profile header: a circular avatar
|
|
9
|
+
* beside a name line and one or more secondary text lines (e.g. handle/bio).
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <Skeleton.Profile avatarSize={56} lines={2} />
|
|
13
|
+
*/
|
|
14
|
+
export default function Profile({
|
|
15
|
+
avatarSize = 56,
|
|
16
|
+
lines = 2,
|
|
17
|
+
count = 1,
|
|
18
|
+
gap = 16,
|
|
19
|
+
animation,
|
|
20
|
+
style,
|
|
21
|
+
testID
|
|
22
|
+
}) {
|
|
23
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
24
|
+
style: style,
|
|
25
|
+
testID: testID
|
|
26
|
+
}, Array.from({
|
|
27
|
+
length: count
|
|
28
|
+
}).map((_, blockIndex) => /*#__PURE__*/React.createElement(View, {
|
|
29
|
+
key: blockIndex,
|
|
30
|
+
style: {
|
|
31
|
+
flexDirection: "row",
|
|
32
|
+
alignItems: "center",
|
|
33
|
+
marginTop: blockIndex === 0 ? 0 : gap
|
|
34
|
+
}
|
|
35
|
+
}, /*#__PURE__*/React.createElement(Circle, {
|
|
36
|
+
size: avatarSize,
|
|
37
|
+
animation: animation
|
|
38
|
+
}), /*#__PURE__*/React.createElement(Group, {
|
|
39
|
+
staggerDelay: 60,
|
|
40
|
+
animation: animation,
|
|
41
|
+
style: {
|
|
42
|
+
marginLeft: 12,
|
|
43
|
+
flex: 1
|
|
44
|
+
}
|
|
45
|
+
}, Array.from({
|
|
46
|
+
length: lines
|
|
47
|
+
}, (__, lineIndex) => {
|
|
48
|
+
const lineProps = {
|
|
49
|
+
width: lineIndex === 0 ? "60%" : `${85 - lineIndex * 15}%`,
|
|
50
|
+
height: lineIndex === 0 ? 16 : 12,
|
|
51
|
+
style: {
|
|
52
|
+
marginTop: lineIndex === 0 ? 0 : 8
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
return /*#__PURE__*/React.createElement(Skeleton, _extends({
|
|
56
|
+
key: lineIndex
|
|
57
|
+
}, lineProps));
|
|
58
|
+
})))));
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=Profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","Skeleton","Circle","Group","Profile","avatarSize","lines","count","gap","animation","style","testID","createElement","Array","from","length","map","_","blockIndex","key","flexDirection","alignItems","marginTop","size","staggerDelay","marginLeft","flex","__","lineIndex","lineProps","width","height","_extends"],"sourceRoot":"../../../src","sources":["presets/Profile.tsx"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,cAAc;AACnC,OAAOC,QAAQ,MAAM,wBAAwB;AAC7C,OAAOC,MAAM,MAAM,sBAAsB;AACzC,OAAOC,KAAK,MAAM,qBAAqB;AAGvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,OAAOA,CAAC;EAC5BC,UAAU,GAAG,EAAE;EACfC,KAAK,GAAG,CAAC;EACTC,KAAK,GAAG,CAAC;EACTC,GAAG,GAAG,EAAE;EACRC,SAAS;EACTC,KAAK;EACLC;AACwB,CAAC,EAAE;EAC3B,oBACIZ,KAAA,CAAAa,aAAA,CAACZ,IAAI;IAACU,KAAK,EAAEA,KAAM;IAACC,MAAM,EAAEA;EAAO,GAC9BE,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAER;EAAM,CAAC,CAAC,CAACS,GAAG,CAAC,CAACC,CAAC,EAAEC,UAAU,kBAC7CnB,KAAA,CAAAa,aAAA,CAACZ,IAAI;IACDmB,GAAG,EAAED,UAAW;IAChBR,KAAK,EAAE;MACHU,aAAa,EAAE,KAAK;MACpBC,UAAU,EAAE,QAAQ;MACpBC,SAAS,EAAEJ,UAAU,KAAK,CAAC,GAAG,CAAC,GAAGV;IACtC;EAAE,gBAEFT,KAAA,CAAAa,aAAA,CAACV,MAAM;IAACqB,IAAI,EAAElB,UAAW;IAACI,SAAS,EAAEA;EAAU,CAAE,CAAC,eAClDV,KAAA,CAAAa,aAAA,CAACT,KAAK;IACFqB,YAAY,EAAE,EAAG;IACjBf,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAE;MAAEe,UAAU,EAAE,EAAE;MAAEC,IAAI,EAAE;IAAE;EAAE,GAElCb,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAET;EAAM,CAAC,EAAE,CAACqB,EAAE,EAAEC,SAAS,KAAK;IAC9C,MAAMC,SAAwB,GAAG;MAC7BC,KAAK,EAAEF,SAAS,KAAK,CAAC,GAAG,KAAK,GAAG,GAAG,EAAE,GAAGA,SAAS,GAAG,EAAE,GAAG;MAC1DG,MAAM,EAAEH,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;MACjClB,KAAK,EAAE;QAAEY,SAAS,EAAEM,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG;MAAE;IAChD,CAAC;IACD,oBAAO7B,KAAA,CAAAa,aAAA,CAACX,QAAQ,EAAA+B,QAAA;MAACb,GAAG,EAAES;IAAU,GAAKC,SAAS,CAAG,CAAC;EACtD,CAAC,CACE,CACL,CACT,CACC,CAAC;AAEf","ignoreList":[]}
|