react-native-skelo 0.0.1 → 0.0.2

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 (269) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +147 -20
  3. package/lib/commonjs/Skelo.js +104 -0
  4. package/lib/commonjs/Skelo.js.map +1 -0
  5. package/lib/commonjs/animations/AnimationWrapper.js +76 -0
  6. package/lib/commonjs/animations/AnimationWrapper.js.map +1 -0
  7. package/lib/commonjs/animations/PulseAnimation.js +76 -0
  8. package/lib/commonjs/animations/PulseAnimation.js.map +1 -0
  9. package/lib/commonjs/animations/ShimmerAnimation.js +103 -0
  10. package/lib/commonjs/animations/ShimmerAnimation.js.map +1 -0
  11. package/lib/commonjs/animations/index.js +27 -0
  12. package/lib/commonjs/animations/index.js.map +1 -0
  13. package/lib/commonjs/components/MeasuredBlock.js +64 -0
  14. package/lib/commonjs/components/MeasuredBlock.js.map +1 -0
  15. package/lib/commonjs/components/Skeleton.js +144 -0
  16. package/lib/commonjs/components/Skeleton.js.map +1 -0
  17. package/lib/commonjs/components/SkeletonIgnore.js +30 -0
  18. package/lib/commonjs/components/SkeletonIgnore.js.map +1 -0
  19. package/lib/commonjs/components/SkeletonRenderer.js +270 -0
  20. package/lib/commonjs/components/SkeletonRenderer.js.map +1 -0
  21. package/lib/commonjs/components/primitives/SkeletonBox.js +47 -0
  22. package/lib/commonjs/components/primitives/SkeletonBox.js.map +1 -0
  23. package/lib/commonjs/components/primitives/SkeletonCircle.js +44 -0
  24. package/lib/commonjs/components/primitives/SkeletonCircle.js.map +1 -0
  25. package/lib/commonjs/components/primitives/SkeletonImage.js +46 -0
  26. package/lib/commonjs/components/primitives/SkeletonImage.js.map +1 -0
  27. package/lib/commonjs/components/primitives/SkeletonText.js +60 -0
  28. package/lib/commonjs/components/primitives/SkeletonText.js.map +1 -0
  29. package/lib/commonjs/components/primitives/index.js +34 -0
  30. package/lib/commonjs/components/primitives/index.js.map +1 -0
  31. package/lib/commonjs/components/withSkeleton.js +45 -0
  32. package/lib/commonjs/components/withSkeleton.js.map +1 -0
  33. package/lib/commonjs/constants/defaults.js +43 -0
  34. package/lib/commonjs/constants/defaults.js.map +1 -0
  35. package/lib/commonjs/core/deepRegistry.js +18 -0
  36. package/lib/commonjs/core/deepRegistry.js.map +1 -0
  37. package/lib/commonjs/core/generator/StyleSkeleton.js +101 -0
  38. package/lib/commonjs/core/generator/StyleSkeleton.js.map +1 -0
  39. package/lib/commonjs/core/parser/Parser.js +84 -0
  40. package/lib/commonjs/core/parser/Parser.js.map +1 -0
  41. package/lib/commonjs/core/parser/expandOffline.js +83 -0
  42. package/lib/commonjs/core/parser/expandOffline.js.map +1 -0
  43. package/lib/commonjs/core/parser/hostTreeReconciler.js +228 -0
  44. package/lib/commonjs/core/parser/hostTreeReconciler.js.map +1 -0
  45. package/lib/commonjs/core/parser/index.js +13 -0
  46. package/lib/commonjs/core/parser/index.js.map +1 -0
  47. package/lib/commonjs/core/registry/SkeletonRegistry.js +113 -0
  48. package/lib/commonjs/core/registry/SkeletonRegistry.js.map +1 -0
  49. package/lib/commonjs/core/registry/index.js +19 -0
  50. package/lib/commonjs/core/registry/index.js.map +1 -0
  51. package/lib/commonjs/core/resolver/StyleResolver.js +83 -0
  52. package/lib/commonjs/core/resolver/StyleResolver.js.map +1 -0
  53. package/lib/commonjs/core/resolver/index.js +13 -0
  54. package/lib/commonjs/core/resolver/index.js.map +1 -0
  55. package/lib/commonjs/deep.js +18 -0
  56. package/lib/commonjs/deep.js.map +1 -0
  57. package/lib/commonjs/index.js +66 -0
  58. package/lib/commonjs/index.js.map +1 -0
  59. package/lib/commonjs/plugins/ImagePlugin.js +60 -0
  60. package/lib/commonjs/plugins/ImagePlugin.js.map +1 -0
  61. package/lib/commonjs/plugins/TextPlugin.js +70 -0
  62. package/lib/commonjs/plugins/TextPlugin.js.map +1 -0
  63. package/lib/commonjs/plugins/ViewPlugin.js +71 -0
  64. package/lib/commonjs/plugins/ViewPlugin.js.map +1 -0
  65. package/lib/commonjs/plugins/index.js +27 -0
  66. package/lib/commonjs/plugins/index.js.map +1 -0
  67. package/lib/commonjs/types/index.js +2 -0
  68. package/lib/commonjs/types/index.js.map +1 -0
  69. package/lib/commonjs/types/plugin.js +6 -0
  70. package/lib/commonjs/types/plugin.js.map +1 -0
  71. package/lib/commonjs/types/skeleton.js +6 -0
  72. package/lib/commonjs/types/skeleton.js.map +1 -0
  73. package/lib/commonjs/utils/componentUtils.js +138 -0
  74. package/lib/commonjs/utils/componentUtils.js.map +1 -0
  75. package/lib/commonjs/utils/index.js +62 -0
  76. package/lib/commonjs/utils/index.js.map +1 -0
  77. package/lib/commonjs/utils/styleUtils.js +76 -0
  78. package/lib/commonjs/utils/styleUtils.js.map +1 -0
  79. package/lib/module/Skelo.js +98 -0
  80. package/lib/module/Skelo.js.map +1 -0
  81. package/lib/module/animations/AnimationWrapper.js +69 -0
  82. package/lib/module/animations/AnimationWrapper.js.map +1 -0
  83. package/lib/module/animations/PulseAnimation.js +69 -0
  84. package/lib/module/animations/PulseAnimation.js.map +1 -0
  85. package/lib/module/animations/ShimmerAnimation.js +96 -0
  86. package/lib/module/animations/ShimmerAnimation.js.map +1 -0
  87. package/lib/module/animations/index.js +4 -0
  88. package/lib/module/animations/index.js.map +1 -0
  89. package/lib/module/components/MeasuredBlock.js +57 -0
  90. package/lib/module/components/MeasuredBlock.js.map +1 -0
  91. package/lib/module/components/Skeleton.js +138 -0
  92. package/lib/module/components/Skeleton.js.map +1 -0
  93. package/lib/module/components/SkeletonIgnore.js +23 -0
  94. package/lib/module/components/SkeletonIgnore.js.map +1 -0
  95. package/lib/module/components/SkeletonRenderer.js +264 -0
  96. package/lib/module/components/SkeletonRenderer.js.map +1 -0
  97. package/lib/module/components/primitives/SkeletonBox.js +40 -0
  98. package/lib/module/components/primitives/SkeletonBox.js.map +1 -0
  99. package/lib/module/components/primitives/SkeletonCircle.js +37 -0
  100. package/lib/module/components/primitives/SkeletonCircle.js.map +1 -0
  101. package/lib/module/components/primitives/SkeletonImage.js +39 -0
  102. package/lib/module/components/primitives/SkeletonImage.js.map +1 -0
  103. package/lib/module/components/primitives/SkeletonText.js +53 -0
  104. package/lib/module/components/primitives/SkeletonText.js.map +1 -0
  105. package/lib/module/components/primitives/index.js +5 -0
  106. package/lib/module/components/primitives/index.js.map +1 -0
  107. package/lib/module/components/withSkeleton.js +38 -0
  108. package/lib/module/components/withSkeleton.js.map +1 -0
  109. package/lib/module/constants/defaults.js +37 -0
  110. package/lib/module/constants/defaults.js.map +1 -0
  111. package/lib/module/core/deepRegistry.js +11 -0
  112. package/lib/module/core/deepRegistry.js.map +1 -0
  113. package/lib/module/core/generator/StyleSkeleton.js +95 -0
  114. package/lib/module/core/generator/StyleSkeleton.js.map +1 -0
  115. package/lib/module/core/parser/Parser.js +77 -0
  116. package/lib/module/core/parser/Parser.js.map +1 -0
  117. package/lib/module/core/parser/expandOffline.js +77 -0
  118. package/lib/module/core/parser/expandOffline.js.map +1 -0
  119. package/lib/module/core/parser/hostTreeReconciler.js +222 -0
  120. package/lib/module/core/parser/hostTreeReconciler.js.map +1 -0
  121. package/lib/module/core/parser/index.js +2 -0
  122. package/lib/module/core/parser/index.js.map +1 -0
  123. package/lib/module/core/registry/SkeletonRegistry.js +106 -0
  124. package/lib/module/core/registry/SkeletonRegistry.js.map +1 -0
  125. package/lib/module/core/registry/index.js +2 -0
  126. package/lib/module/core/registry/index.js.map +1 -0
  127. package/lib/module/core/resolver/StyleResolver.js +77 -0
  128. package/lib/module/core/resolver/StyleResolver.js.map +1 -0
  129. package/lib/module/core/resolver/index.js +2 -0
  130. package/lib/module/core/resolver/index.js.map +1 -0
  131. package/lib/module/deep.js +11 -0
  132. package/lib/module/deep.js.map +1 -0
  133. package/lib/module/index.js +21 -0
  134. package/lib/module/index.js.map +1 -0
  135. package/lib/module/plugins/ImagePlugin.js +53 -0
  136. package/lib/module/plugins/ImagePlugin.js.map +1 -0
  137. package/lib/module/plugins/TextPlugin.js +63 -0
  138. package/lib/module/plugins/TextPlugin.js.map +1 -0
  139. package/lib/module/plugins/ViewPlugin.js +64 -0
  140. package/lib/module/plugins/ViewPlugin.js.map +1 -0
  141. package/lib/module/plugins/index.js +4 -0
  142. package/lib/module/plugins/index.js.map +1 -0
  143. package/lib/module/types/index.js +2 -0
  144. package/lib/module/types/index.js.map +1 -0
  145. package/lib/module/types/plugin.js +2 -0
  146. package/lib/module/types/plugin.js.map +1 -0
  147. package/lib/module/types/skeleton.js +2 -0
  148. package/lib/module/types/skeleton.js.map +1 -0
  149. package/lib/module/utils/componentUtils.js +123 -0
  150. package/lib/module/utils/componentUtils.js.map +1 -0
  151. package/lib/module/utils/index.js +3 -0
  152. package/lib/module/utils/index.js.map +1 -0
  153. package/lib/module/utils/styleUtils.js +66 -0
  154. package/lib/module/utils/styleUtils.js.map +1 -0
  155. package/lib/typescript/Skelo.d.ts +76 -0
  156. package/lib/typescript/Skelo.d.ts.map +1 -0
  157. package/lib/typescript/animations/AnimationWrapper.d.ts +66 -0
  158. package/lib/typescript/animations/AnimationWrapper.d.ts.map +1 -0
  159. package/lib/typescript/animations/PulseAnimation.d.ts +59 -0
  160. package/lib/typescript/animations/PulseAnimation.d.ts.map +1 -0
  161. package/lib/typescript/animations/ShimmerAnimation.d.ts +59 -0
  162. package/lib/typescript/animations/ShimmerAnimation.d.ts.map +1 -0
  163. package/lib/typescript/animations/index.d.ts +5 -0
  164. package/lib/typescript/animations/index.d.ts.map +1 -0
  165. package/lib/typescript/components/MeasuredBlock.d.ts +32 -0
  166. package/lib/typescript/components/MeasuredBlock.d.ts.map +1 -0
  167. package/lib/typescript/components/Skeleton.d.ts +37 -0
  168. package/lib/typescript/components/Skeleton.d.ts.map +1 -0
  169. package/lib/typescript/components/SkeletonIgnore.d.ts +26 -0
  170. package/lib/typescript/components/SkeletonIgnore.d.ts.map +1 -0
  171. package/lib/typescript/components/SkeletonRenderer.d.ts +39 -0
  172. package/lib/typescript/components/SkeletonRenderer.d.ts.map +1 -0
  173. package/lib/typescript/components/primitives/SkeletonBox.d.ts +21 -0
  174. package/lib/typescript/components/primitives/SkeletonBox.d.ts.map +1 -0
  175. package/lib/typescript/components/primitives/SkeletonCircle.d.ts +21 -0
  176. package/lib/typescript/components/primitives/SkeletonCircle.d.ts.map +1 -0
  177. package/lib/typescript/components/primitives/SkeletonImage.d.ts +21 -0
  178. package/lib/typescript/components/primitives/SkeletonImage.d.ts.map +1 -0
  179. package/lib/typescript/components/primitives/SkeletonText.d.ts +21 -0
  180. package/lib/typescript/components/primitives/SkeletonText.d.ts.map +1 -0
  181. package/lib/typescript/components/primitives/index.d.ts +5 -0
  182. package/lib/typescript/components/primitives/index.d.ts.map +1 -0
  183. package/lib/typescript/components/withSkeleton.d.ts +37 -0
  184. package/lib/typescript/components/withSkeleton.d.ts.map +1 -0
  185. package/lib/typescript/constants/defaults.d.ts +29 -0
  186. package/lib/typescript/constants/defaults.d.ts.map +1 -0
  187. package/lib/typescript/core/deepRegistry.d.ts +7 -0
  188. package/lib/typescript/core/deepRegistry.d.ts.map +1 -0
  189. package/lib/typescript/core/generator/StyleSkeleton.d.ts +36 -0
  190. package/lib/typescript/core/generator/StyleSkeleton.d.ts.map +1 -0
  191. package/lib/typescript/core/parser/Parser.d.ts +30 -0
  192. package/lib/typescript/core/parser/Parser.d.ts.map +1 -0
  193. package/lib/typescript/core/parser/expandOffline.d.ts +10 -0
  194. package/lib/typescript/core/parser/expandOffline.d.ts.map +1 -0
  195. package/lib/typescript/core/parser/hostTreeReconciler.d.ts +28 -0
  196. package/lib/typescript/core/parser/hostTreeReconciler.d.ts.map +1 -0
  197. package/lib/typescript/core/parser/index.d.ts +2 -0
  198. package/lib/typescript/core/parser/index.d.ts.map +1 -0
  199. package/lib/typescript/core/registry/SkeletonRegistry.d.ts +57 -0
  200. package/lib/typescript/core/registry/SkeletonRegistry.d.ts.map +1 -0
  201. package/lib/typescript/core/registry/index.d.ts +2 -0
  202. package/lib/typescript/core/registry/index.d.ts.map +1 -0
  203. package/lib/typescript/core/resolver/StyleResolver.d.ts +54 -0
  204. package/lib/typescript/core/resolver/StyleResolver.d.ts.map +1 -0
  205. package/lib/typescript/core/resolver/index.d.ts +2 -0
  206. package/lib/typescript/core/resolver/index.d.ts.map +1 -0
  207. package/lib/typescript/deep.d.ts +2 -0
  208. package/lib/typescript/deep.d.ts.map +1 -0
  209. package/lib/typescript/index.d.ts +17 -0
  210. package/lib/typescript/index.d.ts.map +1 -0
  211. package/lib/typescript/plugins/ImagePlugin.d.ts +11 -0
  212. package/lib/typescript/plugins/ImagePlugin.d.ts.map +1 -0
  213. package/lib/typescript/plugins/TextPlugin.d.ts +12 -0
  214. package/lib/typescript/plugins/TextPlugin.d.ts.map +1 -0
  215. package/lib/typescript/plugins/ViewPlugin.d.ts +11 -0
  216. package/lib/typescript/plugins/ViewPlugin.d.ts.map +1 -0
  217. package/lib/typescript/plugins/index.d.ts +4 -0
  218. package/lib/typescript/plugins/index.d.ts.map +1 -0
  219. package/lib/typescript/types/index.d.ts +3 -0
  220. package/lib/typescript/types/index.d.ts.map +1 -0
  221. package/lib/typescript/types/plugin.d.ts +144 -0
  222. package/lib/typescript/types/plugin.d.ts.map +1 -0
  223. package/lib/typescript/types/skeleton.d.ts +176 -0
  224. package/lib/typescript/types/skeleton.d.ts.map +1 -0
  225. package/lib/typescript/utils/componentUtils.d.ts +40 -0
  226. package/lib/typescript/utils/componentUtils.d.ts.map +1 -0
  227. package/lib/typescript/utils/index.d.ts +3 -0
  228. package/lib/typescript/utils/index.d.ts.map +1 -0
  229. package/lib/typescript/utils/styleUtils.d.ts +41 -0
  230. package/lib/typescript/utils/styleUtils.d.ts.map +1 -0
  231. package/package.json +171 -11
  232. package/src/Skelo.ts +103 -0
  233. package/src/animations/AnimationWrapper.tsx +139 -0
  234. package/src/animations/PulseAnimation.tsx +138 -0
  235. package/src/animations/ShimmerAnimation.tsx +169 -0
  236. package/src/animations/index.ts +4 -0
  237. package/src/components/MeasuredBlock.tsx +85 -0
  238. package/src/components/Skeleton.tsx +149 -0
  239. package/src/components/SkeletonIgnore.tsx +27 -0
  240. package/src/components/SkeletonRenderer.tsx +341 -0
  241. package/src/components/primitives/SkeletonBox.tsx +53 -0
  242. package/src/components/primitives/SkeletonCircle.tsx +48 -0
  243. package/src/components/primitives/SkeletonImage.tsx +50 -0
  244. package/src/components/primitives/SkeletonText.tsx +69 -0
  245. package/src/components/primitives/index.ts +4 -0
  246. package/src/components/withSkeleton.tsx +62 -0
  247. package/src/constants/defaults.ts +38 -0
  248. package/src/core/deepRegistry.ts +16 -0
  249. package/src/core/generator/StyleSkeleton.tsx +138 -0
  250. package/src/core/parser/Parser.ts +86 -0
  251. package/src/core/parser/expandOffline.tsx +83 -0
  252. package/src/core/parser/hostTreeReconciler.tsx +271 -0
  253. package/src/core/parser/index.ts +1 -0
  254. package/src/core/registry/SkeletonRegistry.ts +111 -0
  255. package/src/core/registry/index.ts +1 -0
  256. package/src/core/resolver/StyleResolver.ts +80 -0
  257. package/src/core/resolver/index.ts +1 -0
  258. package/src/deep.ts +12 -0
  259. package/src/index.ts +30 -0
  260. package/src/plugins/ImagePlugin.tsx +65 -0
  261. package/src/plugins/TextPlugin.tsx +71 -0
  262. package/src/plugins/ViewPlugin.tsx +67 -0
  263. package/src/plugins/index.ts +3 -0
  264. package/src/types/index.ts +14 -0
  265. package/src/types/plugin.ts +164 -0
  266. package/src/types/skeleton.ts +197 -0
  267. package/src/utils/componentUtils.ts +166 -0
  268. package/src/utils/index.ts +9 -0
  269. package/src/utils/styleUtils.ts +72 -0
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MeasuredBlock = MeasuredBlock;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _animations = require("../animations");
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
+ /**
12
+ * Renders an opaque (non-host) component hidden so it lays out at its real
13
+ * size, measures that size via `onLayout`, then overlays a shimmer block of
14
+ * exactly those dimensions.
15
+ *
16
+ * This is Skelo's runtime-measurement fallback: when the parser can't
17
+ * introspect a component (e.g. a user-defined function component), we can't
18
+ * know its internal View/Text/Image structure without native view-tree access,
19
+ * but we *can* render it off-screen and reproduce its footprint accurately.
20
+ *
21
+ * The result is a single, correctly-sized skeleton block rather than a
22
+ * misleading fixed-size placeholder.
23
+ */
24
+ function MeasuredBlock({
25
+ children,
26
+ config
27
+ }) {
28
+ const [size, setSize] = (0, _react.useState)(null);
29
+ const handleLayout = event => {
30
+ const {
31
+ width,
32
+ height
33
+ } = event.nativeEvent.layout;
34
+ setSize(prev => prev && prev.width === width && prev.height === height ? prev : {
35
+ width,
36
+ height
37
+ });
38
+ };
39
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, null, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
40
+ style: styles.hidden,
41
+ pointerEvents: "none",
42
+ importantForAccessibility: "no-hide-descendants",
43
+ accessibilityElementsHidden: true,
44
+ onLayout: handleLayout
45
+ }, children), size && size.width > 0 && size.height > 0 && /*#__PURE__*/_react.default.createElement(_reactNative.View, {
46
+ style: _reactNative.StyleSheet.absoluteFill,
47
+ pointerEvents: "none"
48
+ }, /*#__PURE__*/_react.default.createElement(_animations.AnimationWrapper, {
49
+ animation: config.animation,
50
+ width: size.width,
51
+ height: size.height,
52
+ baseColor: config.baseColor,
53
+ highlightColor: config.highlightColor,
54
+ duration: config.duration,
55
+ borderRadius: config.borderRadius
56
+ })));
57
+ }
58
+ const styles = _reactNative.StyleSheet.create({
59
+ hidden: {
60
+ opacity: 0
61
+ }
62
+ });
63
+ MeasuredBlock.displayName = 'Skeleton.MeasuredBlock';
64
+ //# sourceMappingURL=MeasuredBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_animations","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","MeasuredBlock","children","config","size","setSize","useState","handleLayout","event","width","height","nativeEvent","layout","prev","createElement","View","style","styles","hidden","pointerEvents","importantForAccessibility","accessibilityElementsHidden","onLayout","StyleSheet","absoluteFill","AnimationWrapper","animation","baseColor","highlightColor","duration","borderRadius","create","opacity","displayName"],"sourceRoot":"../../../src","sources":["components/MeasuredBlock.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Skeleton = Skeleton;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _parser = require("../core/parser");
9
+ var _SkeletonRenderer = require("./SkeletonRenderer");
10
+ var _SkeletonIgnore = require("./SkeletonIgnore");
11
+ var _StyleSkeleton = require("../core/generator/StyleSkeleton");
12
+ var _deepRegistry = require("../core/deepRegistry");
13
+ var _defaults = require("../constants/defaults");
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
+ /**
16
+ * Main Skeleton component
17
+ *
18
+ * Automatically generates skeleton loading states for your React Native components.
19
+ * Wraps your UI and shows skeleton placeholders while loading.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * <Skeleton loading={isLoading}>
24
+ * <ProfileScreen />
25
+ * </Skeleton>
26
+ * ```
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * <Skeleton
31
+ * loading={isLoading}
32
+ * animation="pulse"
33
+ * baseColor="#f0f0f0"
34
+ * highlightColor="#ffffff"
35
+ * >
36
+ * <View>
37
+ * <Text>Hello World</Text>
38
+ * <Image source={avatar} />
39
+ * </View>
40
+ * </Skeleton>
41
+ * ```
42
+ */
43
+ function Skeleton({
44
+ loading,
45
+ children,
46
+ styles,
47
+ excludeStyles,
48
+ deep = false,
49
+ animation = _defaults.DEFAULT_CONFIG.animation,
50
+ duration = _defaults.DEFAULT_CONFIG.duration,
51
+ baseColor = _defaults.DEFAULT_CONFIG.baseColor,
52
+ highlightColor = _defaults.DEFAULT_CONFIG.highlightColor,
53
+ borderRadius = _defaults.DEFAULT_CONFIG.borderRadius,
54
+ accessible = true,
55
+ accessibilityLabel = 'Loading content',
56
+ debug = false
57
+ }) {
58
+ // Parse component tree and generate skeleton.
59
+ // Hooks must run unconditionally (rules of hooks), but parsing stays lazy:
60
+ // we skip the work entirely when not loading or in styles-driven mode.
61
+ const skeletonTree = (0, _react.useMemo)(() => {
62
+ if (!loading || styles) {
63
+ return [];
64
+ }
65
+ if (__DEV__ && debug) {
66
+ console.log('[Skelo] Parsing component tree...');
67
+ }
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.
72
+ 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.");
84
+ }
85
+ }
86
+ const parsed = _parser.Parser.parse(children);
87
+ if (__DEV__ && debug) {
88
+ // Log a lightweight summary: the raw nodes hold React elements
89
+ // (`element`) and arbitrary props that aren't safely serializable.
90
+ const summarize = nodes => nodes.map(node => ({
91
+ type: node.type,
92
+ style: node.style,
93
+ children: summarize(node.children)
94
+ }));
95
+ console.log('[Skelo] Parsed tree:', JSON.stringify(summarize(parsed), null, 2));
96
+ }
97
+ return parsed;
98
+ } catch (error) {
99
+ if (__DEV__) {
100
+ console.error('[Skelo] Failed to parse component tree:', error);
101
+ }
102
+ return [];
103
+ }
104
+ }, [loading, styles, deep, children, debug]);
105
+
106
+ // Create skeleton config
107
+ const config = (0, _react.useMemo)(() => ({
108
+ animation,
109
+ duration,
110
+ baseColor,
111
+ highlightColor,
112
+ borderRadius
113
+ }), [animation, duration, baseColor, highlightColor, borderRadius]);
114
+
115
+ // If not loading, render the real children directly.
116
+ if (!loading) {
117
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
118
+ }
119
+
120
+ // Styles-driven mode: derive the skeleton from the provided styles instead of
121
+ // introspecting the child tree (useful when children are opaque components).
122
+ if (styles) {
123
+ return /*#__PURE__*/_react.default.createElement(_StyleSkeleton.StyleSkeleton, {
124
+ styles: styles,
125
+ config: config,
126
+ exclude: excludeStyles
127
+ });
128
+ }
129
+ return /*#__PURE__*/_react.default.createElement(_SkeletonRenderer.SkeletonRenderer, {
130
+ tree: skeletonTree,
131
+ config: config,
132
+ accessible: accessible,
133
+ accessibilityLabel: accessibilityLabel,
134
+ debug: debug
135
+ });
136
+ }
137
+ Skeleton.displayName = 'Skeleton';
138
+
139
+ /**
140
+ * Escape hatch to keep children as real content inside a loading `<Skeleton>`.
141
+ * @see SkeletonIgnore
142
+ */
143
+ Skeleton.Ignore = _SkeletonIgnore.SkeletonIgnore;
144
+ //# sourceMappingURL=Skeleton.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SkeletonIgnore = SkeletonIgnore;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /**
10
+ * Escape hatch that renders its children as real content, even inside a
11
+ * loading `<Skeleton>`. Use it for elements that should stay visible during
12
+ * loading — section headings, static labels, action buttons, etc.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <Skeleton loading={loading}>
17
+ * <Skeleton.Ignore>
18
+ * <Text>Profile</Text> // stays as real text
19
+ * </Skeleton.Ignore>
20
+ * <ProfileCard /> // becomes a skeleton
21
+ * </Skeleton>
22
+ * ```
23
+ */
24
+ function SkeletonIgnore({
25
+ children
26
+ }) {
27
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
28
+ }
29
+ SkeletonIgnore.displayName = 'Skeleton.Ignore';
30
+ //# sourceMappingURL=SkeletonIgnore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","e","__esModule","default","SkeletonIgnore","children","createElement","Fragment","displayName"],"sourceRoot":"../../../src","sources":["components/SkeletonIgnore.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA0B,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAO1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,cAAcA,CAAC;EAAEC;AAA8B,CAAC,EAAE;EAChE,oBAAOP,MAAA,CAAAK,OAAA,CAAAG,aAAA,CAAAR,MAAA,CAAAK,OAAA,CAAAI,QAAA,QAAGF,QAAW,CAAC;AACxB;AAEAD,cAAc,CAACI,WAAW,GAAG,iBAAiB","ignoreList":[]}
@@ -0,0 +1,270 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SkeletonRenderer = SkeletonRenderer;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _registry = require("../core/registry");
10
+ var _primitives = require("./primitives");
11
+ var _MeasuredBlock = require("./MeasuredBlock");
12
+ var _styleUtils = require("../utils/styleUtils");
13
+ var _componentUtils = require("../utils/componentUtils");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ /**
16
+ * Host component types the renderer knows how to skeletonize directly.
17
+ * Anything else is treated as an opaque component and measured at runtime.
18
+ */
19
+ const HOST_CONTAINER_TYPES = new Set(['View', 'ScrollView', 'SafeAreaView', 'KeyboardAvoidingView', 'TouchableOpacity', 'TouchableHighlight', 'TouchableWithoutFeedback', 'TouchableNativeFeedback', 'Pressable', 'Fragment']);
20
+ const HOST_LIST_TYPES = new Set(['FlatList', 'SectionList', 'VirtualizedList']);
21
+
22
+ // Track which opaque component names we've already warned about (dev only).
23
+ const warnedOpaqueTypes = new Set();
24
+ /**
25
+ * Renders skeleton from parsed component tree
26
+ *
27
+ * Uses plugins to transform components into skeleton equivalents:
28
+ * - View -> SkeletonBox
29
+ * - Text -> SkeletonText
30
+ * - Image -> SkeletonImage
31
+ * - Custom components -> Plugin strategies
32
+ */
33
+ function SkeletonRenderer({
34
+ tree,
35
+ config,
36
+ accessible,
37
+ accessibilityLabel,
38
+ debug
39
+ }) {
40
+ /**
41
+ * Render a single component node
42
+ */
43
+ const renderNode = (node, index) => {
44
+ if (__DEV__ && debug) {
45
+ console.log(`[Skelo] Rendering node: ${node.type}`, node);
46
+ }
47
+
48
+ // Skeleton.Ignore escape hatch: render the real children untouched.
49
+ if (node.type === 'Skeleton.Ignore') {
50
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
51
+ key: index
52
+ }, node.props?.children);
53
+ }
54
+
55
+ // Check for registered plugin
56
+ const plugin = _registry.registry.getPluginByName(node.type);
57
+ if (plugin) {
58
+ try {
59
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
60
+ key: index
61
+ }, plugin.strategy(node.props, {
62
+ config,
63
+ theme: 'light',
64
+ // TODO: Add theme detection
65
+ parseChildren: children => {
66
+ const parsed = typeof children === 'object' && children !== null ? [children] : [];
67
+ return parsed.map((child, i) => renderNode(child, i));
68
+ },
69
+ primitives: {
70
+ Box: _primitives.SkeletonBox,
71
+ Text: _primitives.SkeletonText,
72
+ Image: _primitives.SkeletonImage,
73
+ Circle: _primitives.SkeletonCircle
74
+ },
75
+ utils: {
76
+ resolveStyle: _styleUtils.resolveStyle,
77
+ extractDimensions: _styleUtils.extractDimensions,
78
+ randomWidth: _componentUtils.randomWidth
79
+ }
80
+ }));
81
+ } catch (error) {
82
+ if (__DEV__) {
83
+ console.error(`[Skelo] Plugin "${plugin.name}" failed:`, error);
84
+ }
85
+ }
86
+ }
87
+
88
+ // Built-in host component handling
89
+ switch (node.type) {
90
+ case 'Text':
91
+ return renderText(node, index);
92
+ case 'Image':
93
+ return renderImage(node, index);
94
+ }
95
+ if (HOST_LIST_TYPES.has(node.type) || node.type === 'ScrollView') {
96
+ return renderScrollableView(node, index);
97
+ }
98
+ if (HOST_CONTAINER_TYPES.has(node.type)) {
99
+ return renderView(node, index);
100
+ }
101
+
102
+ // Opaque component: the parser can't see inside it (a user-defined
103
+ // function/class component). Render it hidden and measure its real size,
104
+ // then overlay a size-matched shimmer.
105
+ return renderOpaque(node, index);
106
+ };
107
+
108
+ /**
109
+ * Render an opaque (non-host) component via runtime measurement.
110
+ */
111
+ const renderOpaque = (node, index) => {
112
+ if (__DEV__ && !warnedOpaqueTypes.has(node.type)) {
113
+ warnedOpaqueTypes.add(node.type);
114
+ console.warn(`[Skelo] "${node.type}" is a custom component, so Skelo can't inspect ` + `its internal View/Text/Image structure. It will be measured and ` + `shown as a single size-matched skeleton block.\n` + `For a structured skeleton, either compose "${node.type}" from host ` + `elements directly inside <Skeleton>, register a plugin via ` + `Skelo.register(${node.type}, ...), or provide a manual skeleton.`);
115
+ }
116
+
117
+ // If we still have the original element, measure it. Otherwise fall back
118
+ // to a container/box render.
119
+ if (node.element) {
120
+ return /*#__PURE__*/_react.default.createElement(_MeasuredBlock.MeasuredBlock, {
121
+ key: index,
122
+ config: config
123
+ }, node.element);
124
+ }
125
+ return renderView(node, index);
126
+ };
127
+
128
+ /**
129
+ * Render View component
130
+ */
131
+ const renderView = (node, index) => {
132
+ const {
133
+ width,
134
+ height
135
+ } = node.style;
136
+ const hasChildren = node.children && node.children.length > 0;
137
+
138
+ // If View has explicit dimensions, render as box
139
+ if (width && height) {
140
+ return /*#__PURE__*/_react.default.createElement(_primitives.SkeletonBox, {
141
+ key: index,
142
+ width: width,
143
+ height: height,
144
+ borderRadius: node.style.borderRadius ?? config.borderRadius,
145
+ animation: config.animation,
146
+ baseColor: config.baseColor,
147
+ highlightColor: config.highlightColor,
148
+ duration: config.duration,
149
+ style: node.style
150
+ });
151
+ }
152
+
153
+ // If View has children, render container with children
154
+ if (hasChildren) {
155
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
156
+ key: index,
157
+ style: node.style
158
+ }, node.children.map((child, i) => renderNode(child, i)));
159
+ }
160
+
161
+ // Empty View with no dimensions - render as small box
162
+ return /*#__PURE__*/_react.default.createElement(_primitives.SkeletonBox, {
163
+ key: index,
164
+ width: width ?? 100,
165
+ height: height ?? 20,
166
+ borderRadius: node.style.borderRadius ?? config.borderRadius,
167
+ animation: config.animation,
168
+ baseColor: config.baseColor,
169
+ highlightColor: config.highlightColor,
170
+ duration: config.duration,
171
+ style: node.style
172
+ });
173
+ };
174
+
175
+ /**
176
+ * Render Text component
177
+ */
178
+ const renderText = (node, index) => {
179
+ const fontSize = node.style.fontSize ?? 14;
180
+ const lineHeight = node.style.lineHeight ?? fontSize * 1.4;
181
+
182
+ // Estimate number of lines from text content
183
+ const textContent = node.props.children;
184
+ const estimatedLines = estimateTextLines(textContent);
185
+ return /*#__PURE__*/_react.default.createElement(_primitives.SkeletonText, {
186
+ key: index,
187
+ lines: estimatedLines,
188
+ fontSize: fontSize,
189
+ lineHeight: lineHeight,
190
+ width: node.style.width ?? '100%',
191
+ animation: config.animation,
192
+ baseColor: config.baseColor,
193
+ highlightColor: config.highlightColor,
194
+ duration: config.duration,
195
+ style: node.style
196
+ });
197
+ };
198
+
199
+ /**
200
+ * Render Image component
201
+ */
202
+ const renderImage = (node, index) => {
203
+ const width = node.style.width ?? 100;
204
+ const height = node.style.height ?? 100;
205
+ const borderRadius = node.style.borderRadius ?? 0;
206
+
207
+ // Check if it's a circular image (avatar)
208
+ const isCircle = typeof width === 'number' && typeof height === 'number' && width === height && borderRadius === width / 2;
209
+ if (isCircle) {
210
+ return /*#__PURE__*/_react.default.createElement(_primitives.SkeletonCircle, {
211
+ key: index,
212
+ size: width,
213
+ animation: config.animation,
214
+ baseColor: config.baseColor,
215
+ highlightColor: config.highlightColor,
216
+ duration: config.duration,
217
+ style: node.style
218
+ });
219
+ }
220
+ return /*#__PURE__*/_react.default.createElement(_primitives.SkeletonImage, {
221
+ key: index,
222
+ width: width,
223
+ height: height,
224
+ borderRadius: borderRadius,
225
+ animation: config.animation,
226
+ baseColor: config.baseColor,
227
+ highlightColor: config.highlightColor,
228
+ duration: config.duration,
229
+ style: node.style
230
+ });
231
+ };
232
+
233
+ /**
234
+ * Render scrollable views
235
+ */
236
+ const renderScrollableView = (node, index) => {
237
+ // For scrollable views, render their children
238
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
239
+ key: index,
240
+ style: node.style
241
+ }, node.children.map((child, i) => renderNode(child, i)));
242
+ };
243
+
244
+ /**
245
+ * Estimate number of lines from text content
246
+ */
247
+ const estimateTextLines = children => {
248
+ if (!children) return 1;
249
+ if (typeof children === 'string' || typeof children === 'number') {
250
+ const text = String(children);
251
+ const avgCharsPerLine = 40;
252
+ const estimatedLines = Math.ceil(text.length / avgCharsPerLine);
253
+ return Math.max(1, Math.min(estimatedLines, 5)); // Cap at 5 lines
254
+ }
255
+ if (Array.isArray(children)) {
256
+ // Multiple text nodes - count as separate lines
257
+ return Math.min(children.length, 5);
258
+ }
259
+ return 1;
260
+ };
261
+
262
+ // Render the skeleton tree
263
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
264
+ accessible: accessible,
265
+ accessibilityLabel: accessibilityLabel,
266
+ accessibilityRole: "progressbar"
267
+ }, tree.map((node, index) => renderNode(node, index)));
268
+ }
269
+ SkeletonRenderer.displayName = 'SkeletonRenderer';
270
+ //# sourceMappingURL=SkeletonRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_registry","_primitives","_MeasuredBlock","_styleUtils","_componentUtils","e","__esModule","default","HOST_CONTAINER_TYPES","Set","HOST_LIST_TYPES","warnedOpaqueTypes","SkeletonRenderer","tree","config","accessible","accessibilityLabel","debug","renderNode","node","index","__DEV__","console","log","type","createElement","Fragment","key","props","children","plugin","registry","getPluginByName","strategy","theme","parseChildren","parsed","map","child","i","primitives","Box","SkeletonBox","Text","SkeletonText","Image","SkeletonImage","Circle","SkeletonCircle","utils","resolveStyle","extractDimensions","randomWidth","error","name","renderText","renderImage","has","renderScrollableView","renderView","renderOpaque","add","warn","element","MeasuredBlock","width","height","style","hasChildren","length","borderRadius","animation","baseColor","highlightColor","duration","View","fontSize","lineHeight","textContent","estimatedLines","estimateTextLines","lines","isCircle","size","text","String","avgCharsPerLine","Math","ceil","max","min","Array","isArray","accessibilityRole","displayName"],"sourceRoot":"../../../src","sources":["components/SkeletonRenderer.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SkeletonBox = SkeletonBox;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _animations = require("../../animations");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ /**
12
+ * Basic box skeleton primitive
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <SkeletonBox width={100} height={50} borderRadius={8} />
17
+ * ```
18
+ */
19
+ function SkeletonBox({
20
+ width,
21
+ height,
22
+ borderRadius = 4,
23
+ style,
24
+ children,
25
+ animation = 'shimmer',
26
+ baseColor,
27
+ highlightColor,
28
+ duration
29
+ }) {
30
+ return /*#__PURE__*/_react.default.createElement(_animations.AnimationWrapper, {
31
+ animation: animation,
32
+ width: width,
33
+ height: height,
34
+ borderRadius: borderRadius,
35
+ baseColor: baseColor,
36
+ highlightColor: highlightColor,
37
+ duration: duration,
38
+ style: [styles.box, style]
39
+ }, children);
40
+ }
41
+ const styles = _reactNative.StyleSheet.create({
42
+ box: {
43
+ overflow: 'hidden'
44
+ }
45
+ });
46
+ SkeletonBox.displayName = 'Skeleton.Box';
47
+ //# sourceMappingURL=SkeletonBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_animations","e","__esModule","default","SkeletonBox","width","height","borderRadius","style","children","animation","baseColor","highlightColor","duration","createElement","AnimationWrapper","styles","box","StyleSheet","create","overflow","displayName"],"sourceRoot":"../../../../src","sources":["components/primitives/SkeletonBox.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,WAAA,GAAAF,OAAA;AAAoD,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,WAAWA,CAAC;EAC1BC,KAAK;EACLC,MAAM;EACNC,YAAY,GAAG,CAAC;EAChBC,KAAK;EACLC,QAAQ;EACRC,SAAS,GAAG,SAAS;EACrBC,SAAS;EACTC,cAAc;EACdC;AAMF,CAAC,EAAE;EACD,oBACEjB,MAAA,CAAAO,OAAA,CAAAW,aAAA,CAACd,WAAA,CAAAe,gBAAgB;IACfL,SAAS,EAAEA,SAAU;IACrBL,KAAK,EAAEA,KAAM;IACbC,MAAM,EAAEA,MAAO;IACfC,YAAY,EAAEA,YAAa;IAC3BI,SAAS,EAAEA,SAAU;IACrBC,cAAc,EAAEA,cAAe;IAC/BC,QAAQ,EAAEA,QAAS;IACnBL,KAAK,EAAE,CAACQ,MAAM,CAACC,GAAG,EAAET,KAAK;EAAE,GAE1BC,QACe,CAAC;AAEvB;AAEA,MAAMO,MAAM,GAAGE,uBAAU,CAACC,MAAM,CAAC;EAC/BF,GAAG,EAAE;IACHG,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAEFhB,WAAW,CAACiB,WAAW,GAAG,cAAc","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SkeletonCircle = SkeletonCircle;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _animations = require("../../animations");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ /**
12
+ * Circle skeleton primitive (useful for avatars)
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <SkeletonCircle size={40} />
17
+ * ```
18
+ */
19
+ function SkeletonCircle({
20
+ size = 40,
21
+ style,
22
+ animation = 'shimmer',
23
+ baseColor,
24
+ highlightColor,
25
+ duration
26
+ }) {
27
+ return /*#__PURE__*/_react.default.createElement(_animations.AnimationWrapper, {
28
+ animation: animation,
29
+ width: size,
30
+ height: size,
31
+ borderRadius: size / 2,
32
+ baseColor: baseColor,
33
+ highlightColor: highlightColor,
34
+ duration: duration,
35
+ style: [styles.circle, style]
36
+ });
37
+ }
38
+ const styles = _reactNative.StyleSheet.create({
39
+ circle: {
40
+ overflow: 'hidden'
41
+ }
42
+ });
43
+ SkeletonCircle.displayName = 'Skeleton.Circle';
44
+ //# sourceMappingURL=SkeletonCircle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_animations","e","__esModule","default","SkeletonCircle","size","style","animation","baseColor","highlightColor","duration","createElement","AnimationWrapper","width","height","borderRadius","styles","circle","StyleSheet","create","overflow","displayName"],"sourceRoot":"../../../../src","sources":["components/primitives/SkeletonCircle.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,WAAA,GAAAF,OAAA;AAAoD,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,cAAcA,CAAC;EAC7BC,IAAI,GAAG,EAAE;EACTC,KAAK;EACLC,SAAS,GAAG,SAAS;EACrBC,SAAS;EACTC,cAAc;EACdC;AAMF,CAAC,EAAE;EACD,oBACEd,MAAA,CAAAO,OAAA,CAAAQ,aAAA,CAACX,WAAA,CAAAY,gBAAgB;IACfL,SAAS,EAAEA,SAAU;IACrBM,KAAK,EAAER,IAAK;IACZS,MAAM,EAAET,IAAK;IACbU,YAAY,EAAEV,IAAI,GAAG,CAAE;IACvBG,SAAS,EAAEA,SAAU;IACrBC,cAAc,EAAEA,cAAe;IAC/BC,QAAQ,EAAEA,QAAS;IACnBJ,KAAK,EAAE,CAACU,MAAM,CAACC,MAAM,EAAEX,KAAK;EAAE,CAC/B,CAAC;AAEN;AAEA,MAAMU,MAAM,GAAGE,uBAAU,CAACC,MAAM,CAAC;EAC/BF,MAAM,EAAE;IACNG,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;AAEFhB,cAAc,CAACiB,WAAW,GAAG,iBAAiB","ignoreList":[]}