@fountain-ui/lab 2.0.0-beta.5 → 2.0.0-beta.50

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 (517) hide show
  1. package/build/commonjs/AnimatedY/AnimatedY.js +10 -14
  2. package/build/commonjs/AnimatedY/AnimatedY.js.map +1 -1
  3. package/build/commonjs/AnimatedY/AnimatedYProps.js.map +1 -1
  4. package/build/commonjs/AnimatedY/index.js.map +1 -1
  5. package/build/commonjs/BottomSheet/BottomSheetNative.js +28 -5
  6. package/build/commonjs/BottomSheet/BottomSheetNative.js.map +1 -1
  7. package/build/commonjs/BottomSheet/BottomSheetProps.js.map +1 -1
  8. package/build/commonjs/BottomSheet/BottomSheetWeb.js +26 -15
  9. package/build/commonjs/BottomSheet/BottomSheetWeb.js.map +1 -1
  10. package/build/commonjs/BottomSheet/TransparentBackdrop.js +1 -1
  11. package/build/commonjs/BottomSheet/TransparentBackdrop.js.map +1 -1
  12. package/build/commonjs/BottomSheet/index.js.map +1 -1
  13. package/build/commonjs/BottomSheet/index.native.js.map +1 -1
  14. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js +65 -0
  15. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  16. package/build/commonjs/Carousel/Carousel.js +130 -0
  17. package/build/commonjs/Carousel/Carousel.js.map +1 -0
  18. package/build/commonjs/Carousel/CarouselProps.js.map +1 -1
  19. package/build/commonjs/Carousel/animation/animationUtils.js +9 -0
  20. package/build/commonjs/Carousel/animation/animationUtils.js.map +1 -0
  21. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js +15 -0
  22. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  23. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js +20 -0
  24. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  25. package/build/commonjs/Carousel/animation/index.js +40 -0
  26. package/build/commonjs/Carousel/animation/index.js.map +1 -0
  27. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js +27 -0
  28. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  29. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js +65 -0
  30. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  31. package/build/commonjs/Carousel/components/InternalContext.js +29 -0
  32. package/build/commonjs/Carousel/components/InternalContext.js.map +1 -0
  33. package/build/commonjs/Carousel/components/ItemView.js +66 -0
  34. package/build/commonjs/Carousel/components/ItemView.js.map +1 -0
  35. package/build/commonjs/Carousel/components/RootView.js +86 -0
  36. package/build/commonjs/Carousel/components/RootView.js.map +1 -0
  37. package/build/commonjs/Carousel/components/ScrollViewGesture.js +82 -0
  38. package/build/commonjs/Carousel/components/ScrollViewGesture.js.map +1 -0
  39. package/build/commonjs/Carousel/components/index.js +40 -0
  40. package/build/commonjs/Carousel/components/index.js.map +1 -0
  41. package/build/commonjs/Carousel/components/useItemInterpolation.js +65 -0
  42. package/build/commonjs/Carousel/components/useItemInterpolation.js.map +1 -0
  43. package/build/commonjs/Carousel/hooks/index.js +48 -0
  44. package/build/commonjs/Carousel/hooks/index.js.map +1 -0
  45. package/build/commonjs/Carousel/hooks/useAutoplayController.js +58 -0
  46. package/build/commonjs/Carousel/hooks/useAutoplayController.js.map +1 -0
  47. package/build/commonjs/Carousel/hooks/useIndexController.js +55 -0
  48. package/build/commonjs/Carousel/hooks/useIndexController.js.map +1 -0
  49. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js +95 -0
  50. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  51. package/build/commonjs/Carousel/hooks/useLoopedData.js +33 -0
  52. package/build/commonjs/Carousel/hooks/useLoopedData.js.map +1 -0
  53. package/build/commonjs/Carousel/hooks/usePagingAnimator.js +202 -0
  54. package/build/commonjs/Carousel/hooks/usePagingAnimator.js.map +1 -0
  55. package/build/commonjs/Carousel/index.js +16 -2
  56. package/build/commonjs/Carousel/index.js.map +1 -1
  57. package/build/commonjs/Carousel/tick.js +16 -0
  58. package/build/commonjs/Carousel/tick.js.map +1 -0
  59. package/build/commonjs/Carousel/types.js +8 -0
  60. package/build/commonjs/Carousel/types.js.map +1 -0
  61. package/build/commonjs/ComicViewer/ComicViewer.js +248 -88
  62. package/build/commonjs/ComicViewer/ComicViewer.js.map +1 -1
  63. package/build/commonjs/ComicViewer/ComicViewerProps.js.map +1 -1
  64. package/build/commonjs/ComicViewer/EncodedTile.js +10 -0
  65. package/build/commonjs/ComicViewer/EncodedTile.js.map +1 -0
  66. package/build/commonjs/ComicViewer/FastScroll.js +162 -0
  67. package/build/commonjs/ComicViewer/FastScroll.js.map +1 -0
  68. package/build/commonjs/ComicViewer/{ComicViewerItemProps.js → FastScrollProps.js} +1 -1
  69. package/build/commonjs/ComicViewer/FastScrollProps.js.map +1 -0
  70. package/build/commonjs/ComicViewer/ReloadButton.js +48 -0
  71. package/build/commonjs/ComicViewer/ReloadButton.js.map +1 -0
  72. package/build/commonjs/ComicViewer/ViewerItem.js +51 -58
  73. package/build/commonjs/ComicViewer/ViewerItem.js.map +1 -1
  74. package/build/commonjs/ComicViewer/index.js.map +1 -1
  75. package/build/commonjs/ComicViewer/util.js +27 -0
  76. package/build/commonjs/ComicViewer/util.js.map +1 -0
  77. package/build/commonjs/DateTimePicker/DateTimePicker.js.map +1 -1
  78. package/build/commonjs/DateTimePicker/DateTimePickerProps.js.map +1 -1
  79. package/build/commonjs/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  80. package/build/commonjs/DateTimePicker/YearPicker.js +21 -17
  81. package/build/commonjs/DateTimePicker/YearPicker.js.map +1 -1
  82. package/build/commonjs/DateTimePicker/index.js +4 -4
  83. package/build/commonjs/DateTimePicker/index.js.map +1 -1
  84. package/build/commonjs/DateTimePicker/utils.js +2 -1
  85. package/build/commonjs/DateTimePicker/utils.js.map +1 -1
  86. package/build/commonjs/FlipCard/FlipCard.js +7 -13
  87. package/build/commonjs/FlipCard/FlipCard.js.map +1 -1
  88. package/build/commonjs/FlipCard/FlipCardProps.js.map +1 -1
  89. package/build/commonjs/FlipCard/index.js.map +1 -1
  90. package/build/commonjs/StatusBarProvider/Provider.js +1 -1
  91. package/build/commonjs/StatusBarProvider/Provider.js.map +1 -1
  92. package/build/commonjs/StatusBarProvider/StatusBarProvider.js.map +1 -1
  93. package/build/commonjs/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  94. package/build/commonjs/StatusBarProvider/index.js.map +1 -1
  95. package/build/commonjs/ViewPager/FluxContext.js +13 -0
  96. package/build/commonjs/ViewPager/FluxContext.js.map +1 -0
  97. package/build/commonjs/ViewPager/InternalContext.js +17 -0
  98. package/build/commonjs/ViewPager/InternalContext.js.map +1 -0
  99. package/build/commonjs/ViewPager/PageStateContext.js +16 -0
  100. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -0
  101. package/build/commonjs/ViewPager/ViewPager.js +81 -0
  102. package/build/commonjs/ViewPager/ViewPager.js.map +1 -0
  103. package/build/commonjs/ViewPager/ViewPager.native.js +150 -0
  104. package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -0
  105. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  106. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js +122 -0
  107. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  108. package/build/commonjs/ViewPager/components/FluxStoreProvider.js +37 -0
  109. package/build/commonjs/ViewPager/components/FluxStoreProvider.js.map +1 -0
  110. package/build/commonjs/ViewPager/components/index.js +24 -0
  111. package/build/commonjs/ViewPager/components/index.js.map +1 -0
  112. package/build/commonjs/ViewPager/hooks/index.js +64 -0
  113. package/build/commonjs/ViewPager/hooks/index.js.map +1 -0
  114. package/build/commonjs/ViewPager/hooks/useDispatch.js +22 -0
  115. package/build/commonjs/ViewPager/hooks/useDispatch.js.map +1 -0
  116. package/build/commonjs/ViewPager/hooks/useEagerState.js +24 -0
  117. package/build/commonjs/ViewPager/hooks/useEagerState.js.map +1 -0
  118. package/build/commonjs/ViewPager/hooks/useForceRender.js +16 -0
  119. package/build/commonjs/ViewPager/hooks/useForceRender.js.map +1 -0
  120. package/build/commonjs/ViewPager/hooks/useLazyState.js +45 -0
  121. package/build/commonjs/ViewPager/hooks/useLazyState.js.map +1 -0
  122. package/build/commonjs/ViewPager/hooks/usePageStore.js +35 -0
  123. package/build/commonjs/ViewPager/hooks/usePageStore.js.map +1 -0
  124. package/build/commonjs/ViewPager/hooks/useStore.js +26 -0
  125. package/build/commonjs/ViewPager/hooks/useStore.js.map +1 -0
  126. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js +19 -0
  127. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  128. package/build/commonjs/ViewPager/index.js +42 -2
  129. package/build/commonjs/ViewPager/index.js.map +1 -1
  130. package/build/commonjs/ViewPager/types.js +2 -0
  131. package/build/commonjs/ViewPager/types.js.map +1 -0
  132. package/build/commonjs/ViewPager/utils.js +12 -43
  133. package/build/commonjs/ViewPager/utils.js.map +1 -1
  134. package/build/commonjs/ViewabilityTrackerView/Viewability.js +2 -0
  135. package/build/commonjs/ViewabilityTrackerView/Viewability.js.map +1 -0
  136. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js +45 -0
  137. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  138. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  139. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  140. package/build/commonjs/{Carousel/index.native.js → ViewabilityTrackerView/index.js} +3 -3
  141. package/build/commonjs/ViewabilityTrackerView/index.js.map +1 -0
  142. package/build/commonjs/ViewabilityTrackerView/measureViewability.js +42 -0
  143. package/build/commonjs/ViewabilityTrackerView/measureViewability.js.map +1 -0
  144. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js +88 -0
  145. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  146. package/build/commonjs/hooks/index.js +16 -0
  147. package/build/commonjs/hooks/index.js.map +1 -1
  148. package/build/commonjs/hooks/useAppbarStyles.js.map +1 -1
  149. package/build/commonjs/hooks/useDeferredExecutor.js +45 -0
  150. package/build/commonjs/hooks/useDeferredExecutor.js.map +1 -0
  151. package/build/commonjs/hooks/useElevationStyle.js.map +1 -1
  152. package/build/commonjs/hooks/useHeight.js +7 -6
  153. package/build/commonjs/hooks/useHeight.js.map +1 -1
  154. package/build/commonjs/hooks/useIsMounted.js +22 -0
  155. package/build/commonjs/hooks/useIsMounted.js.map +1 -0
  156. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +58 -61
  157. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  158. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js +9 -11
  159. package/build/commonjs/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  160. package/build/commonjs/index.js +28 -7
  161. package/build/commonjs/index.js.map +1 -1
  162. package/build/module/AnimatedY/AnimatedY.js +11 -10
  163. package/build/module/AnimatedY/AnimatedY.js.map +1 -1
  164. package/build/module/AnimatedY/AnimatedYProps.js.map +1 -1
  165. package/build/module/AnimatedY/index.js.map +1 -1
  166. package/build/module/BottomSheet/BottomSheetNative.js +29 -7
  167. package/build/module/BottomSheet/BottomSheetNative.js.map +1 -1
  168. package/build/module/BottomSheet/BottomSheetProps.js.map +1 -1
  169. package/build/module/BottomSheet/BottomSheetWeb.js +24 -15
  170. package/build/module/BottomSheet/BottomSheetWeb.js.map +1 -1
  171. package/build/module/BottomSheet/TransparentBackdrop.js +1 -1
  172. package/build/module/BottomSheet/TransparentBackdrop.js.map +1 -1
  173. package/build/module/BottomSheet/index.js.map +1 -1
  174. package/build/module/BottomSheet/index.native.js.map +1 -1
  175. package/build/module/BottomSheet/useDynamicSnapPoints.js +52 -0
  176. package/build/module/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  177. package/build/module/Carousel/Carousel.js +109 -0
  178. package/build/module/Carousel/Carousel.js.map +1 -0
  179. package/build/module/Carousel/CarouselProps.js.map +1 -1
  180. package/build/module/Carousel/animation/animationUtils.js +2 -0
  181. package/build/module/Carousel/animation/animationUtils.js.map +1 -0
  182. package/build/module/Carousel/animation/createDefaultItemStyle.js +3 -0
  183. package/build/module/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  184. package/build/module/Carousel/animation/createDefaultScrollAnimation.js +11 -0
  185. package/build/module/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  186. package/build/module/Carousel/animation/index.js +5 -0
  187. package/build/module/Carousel/animation/index.js.map +1 -0
  188. package/build/module/Carousel/animation/normalItemStyleFactory.js +18 -0
  189. package/build/module/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  190. package/build/module/Carousel/animation/parallaxItemStyleFactory.js +55 -0
  191. package/build/module/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  192. package/build/module/Carousel/components/InternalContext.js +19 -0
  193. package/build/module/Carousel/components/InternalContext.js.map +1 -0
  194. package/build/module/Carousel/components/ItemView.js +46 -0
  195. package/build/module/Carousel/components/ItemView.js.map +1 -0
  196. package/build/module/Carousel/components/RootView.js +65 -0
  197. package/build/module/Carousel/components/RootView.js.map +1 -0
  198. package/build/module/Carousel/components/ScrollViewGesture.js +68 -0
  199. package/build/module/Carousel/components/ScrollViewGesture.js.map +1 -0
  200. package/build/module/Carousel/components/index.js +5 -0
  201. package/build/module/Carousel/components/index.js.map +1 -0
  202. package/build/module/Carousel/components/useItemInterpolation.js +51 -0
  203. package/build/module/Carousel/components/useItemInterpolation.js.map +1 -0
  204. package/build/module/Carousel/hooks/index.js +6 -0
  205. package/build/module/Carousel/hooks/index.js.map +1 -0
  206. package/build/module/Carousel/hooks/useAutoplayController.js +48 -0
  207. package/build/module/Carousel/hooks/useAutoplayController.js.map +1 -0
  208. package/build/module/Carousel/hooks/useIndexController.js +44 -0
  209. package/build/module/Carousel/hooks/useIndexController.js.map +1 -0
  210. package/build/module/Carousel/hooks/useItemVisibilityStore.js +86 -0
  211. package/build/module/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  212. package/build/module/Carousel/hooks/useLoopedData.js +24 -0
  213. package/build/module/Carousel/hooks/useLoopedData.js.map +1 -0
  214. package/build/module/Carousel/hooks/usePagingAnimator.js +192 -0
  215. package/build/module/Carousel/hooks/usePagingAnimator.js.map +1 -0
  216. package/build/module/Carousel/index.js +2 -1
  217. package/build/module/Carousel/index.js.map +1 -1
  218. package/build/module/Carousel/tick.js +6 -0
  219. package/build/module/Carousel/tick.js.map +1 -0
  220. package/build/module/Carousel/types.js +4 -0
  221. package/build/module/Carousel/types.js.map +1 -0
  222. package/build/module/ComicViewer/ComicViewer.js +245 -88
  223. package/build/module/ComicViewer/ComicViewer.js.map +1 -1
  224. package/build/module/ComicViewer/ComicViewerProps.js.map +1 -1
  225. package/build/module/ComicViewer/EncodedTile.js +3 -0
  226. package/build/module/ComicViewer/EncodedTile.js.map +1 -0
  227. package/build/module/ComicViewer/FastScroll.js +141 -0
  228. package/build/module/ComicViewer/FastScroll.js.map +1 -0
  229. package/build/module/ComicViewer/FastScrollProps.js +2 -0
  230. package/build/module/ComicViewer/FastScrollProps.js.map +1 -0
  231. package/build/module/ComicViewer/ReloadButton.js +33 -0
  232. package/build/module/ComicViewer/ReloadButton.js.map +1 -0
  233. package/build/module/ComicViewer/ViewerItem.js +51 -59
  234. package/build/module/ComicViewer/ViewerItem.js.map +1 -1
  235. package/build/module/ComicViewer/index.js.map +1 -1
  236. package/build/module/ComicViewer/util.js +15 -0
  237. package/build/module/ComicViewer/util.js.map +1 -0
  238. package/build/module/DateTimePicker/DateTimePicker.js.map +1 -1
  239. package/build/module/DateTimePicker/DateTimePickerProps.js.map +1 -1
  240. package/build/module/DateTimePicker/DateTimePickerProvider.js.map +1 -1
  241. package/build/module/DateTimePicker/YearPicker.js +21 -17
  242. package/build/module/DateTimePicker/YearPicker.js.map +1 -1
  243. package/build/module/DateTimePicker/index.js.map +1 -1
  244. package/build/module/DateTimePicker/utils.js +2 -1
  245. package/build/module/DateTimePicker/utils.js.map +1 -1
  246. package/build/module/FlipCard/FlipCard.js +7 -7
  247. package/build/module/FlipCard/FlipCard.js.map +1 -1
  248. package/build/module/FlipCard/FlipCardProps.js.map +1 -1
  249. package/build/module/FlipCard/index.js.map +1 -1
  250. package/build/module/StatusBarProvider/Provider.js.map +1 -1
  251. package/build/module/StatusBarProvider/StatusBarProvider.js.map +1 -1
  252. package/build/module/StatusBarProvider/StatusBarProviderProps.js.map +1 -1
  253. package/build/module/StatusBarProvider/index.js.map +1 -1
  254. package/build/module/ViewPager/FluxContext.js +4 -0
  255. package/build/module/ViewPager/FluxContext.js.map +1 -0
  256. package/build/module/ViewPager/InternalContext.js +7 -0
  257. package/build/module/ViewPager/InternalContext.js.map +1 -0
  258. package/build/module/ViewPager/PageStateContext.js +7 -0
  259. package/build/module/ViewPager/PageStateContext.js.map +1 -0
  260. package/build/module/ViewPager/ViewPager.js +57 -0
  261. package/build/module/ViewPager/ViewPager.js.map +1 -0
  262. package/build/module/ViewPager/ViewPager.native.js +127 -0
  263. package/build/module/ViewPager/ViewPager.native.js.map +1 -0
  264. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  265. package/build/module/ViewPager/components/ChildrenMemoizedPage.js +101 -0
  266. package/build/module/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  267. package/build/module/ViewPager/components/FluxStoreProvider.js +20 -0
  268. package/build/module/ViewPager/components/FluxStoreProvider.js.map +1 -0
  269. package/build/module/ViewPager/components/index.js +3 -0
  270. package/build/module/ViewPager/components/index.js.map +1 -0
  271. package/build/module/ViewPager/hooks/index.js +8 -0
  272. package/build/module/ViewPager/hooks/index.js.map +1 -0
  273. package/build/module/ViewPager/hooks/useDispatch.js +10 -0
  274. package/build/module/ViewPager/hooks/useDispatch.js.map +1 -0
  275. package/build/module/ViewPager/hooks/useEagerState.js +12 -0
  276. package/build/module/ViewPager/hooks/useEagerState.js.map +1 -0
  277. package/build/module/ViewPager/hooks/useForceRender.js +7 -0
  278. package/build/module/ViewPager/hooks/useForceRender.js.map +1 -0
  279. package/build/module/ViewPager/hooks/useLazyState.js +30 -0
  280. package/build/module/ViewPager/hooks/useLazyState.js.map +1 -0
  281. package/build/module/ViewPager/hooks/usePageStore.js +25 -0
  282. package/build/module/ViewPager/hooks/usePageStore.js.map +1 -0
  283. package/build/module/ViewPager/hooks/useStore.js +14 -0
  284. package/build/module/ViewPager/hooks/useStore.js.map +1 -0
  285. package/build/module/ViewPager/hooks/useViewPagerPageState.js +7 -0
  286. package/build/module/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  287. package/build/module/ViewPager/index.js +3 -1
  288. package/build/module/ViewPager/index.js.map +1 -1
  289. package/build/module/ViewPager/types.js +2 -0
  290. package/build/module/ViewPager/types.js.map +1 -0
  291. package/build/module/ViewPager/utils.js +6 -33
  292. package/build/module/ViewPager/utils.js.map +1 -1
  293. package/build/module/ViewabilityTrackerView/Viewability.js +2 -0
  294. package/build/module/ViewabilityTrackerView/Viewability.js.map +1 -0
  295. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js +28 -0
  296. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  297. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  298. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  299. package/build/module/ViewabilityTrackerView/index.js +2 -0
  300. package/build/module/ViewabilityTrackerView/index.js.map +1 -0
  301. package/build/module/ViewabilityTrackerView/measureViewability.js +34 -0
  302. package/build/module/ViewabilityTrackerView/measureViewability.js.map +1 -0
  303. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js +73 -0
  304. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  305. package/build/module/hooks/index.js +2 -0
  306. package/build/module/hooks/index.js.map +1 -1
  307. package/build/module/hooks/useAppbarStyles.js.map +1 -1
  308. package/build/module/hooks/useDeferredExecutor.js +33 -0
  309. package/build/module/hooks/useDeferredExecutor.js.map +1 -0
  310. package/build/module/hooks/useElevationStyle.js.map +1 -1
  311. package/build/module/hooks/useHeight.js +4 -4
  312. package/build/module/hooks/useHeight.js.map +1 -1
  313. package/build/module/hooks/useIsMounted.js +13 -0
  314. package/build/module/hooks/useIsMounted.js.map +1 -0
  315. package/build/module/hooks/useUnstableCollapsibleAppBar.js +58 -45
  316. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  317. package/build/module/hooks/useUnstableToggleDisplayStyle.js +9 -7
  318. package/build/module/hooks/useUnstableToggleDisplayStyle.js.map +1 -1
  319. package/build/module/index.js +2 -0
  320. package/build/module/index.js.map +1 -1
  321. package/build/typescript/BottomSheet/BottomSheetProps.d.ts +18 -1
  322. package/build/typescript/BottomSheet/useDynamicSnapPoints.d.ts +12 -0
  323. package/build/typescript/Carousel/Carousel.d.ts +5 -0
  324. package/build/typescript/Carousel/CarouselProps.d.ts +33 -48
  325. package/build/typescript/Carousel/animation/animationUtils.d.ts +1 -0
  326. package/build/typescript/Carousel/animation/createDefaultItemStyle.d.ts +2 -0
  327. package/build/typescript/Carousel/animation/createDefaultScrollAnimation.d.ts +2 -0
  328. package/build/typescript/Carousel/animation/index.d.ts +4 -0
  329. package/build/typescript/Carousel/animation/normalItemStyleFactory.d.ts +2 -0
  330. package/build/typescript/Carousel/animation/parallaxItemStyleFactory.d.ts +9 -0
  331. package/build/typescript/Carousel/components/InternalContext.d.ts +14 -0
  332. package/build/typescript/Carousel/components/ItemView.d.ts +9 -0
  333. package/build/typescript/Carousel/components/RootView.d.ts +16 -0
  334. package/build/typescript/Carousel/components/ScrollViewGesture.d.ts +12 -0
  335. package/build/typescript/Carousel/components/index.d.ts +4 -0
  336. package/build/typescript/Carousel/components/useItemInterpolation.d.ts +2 -0
  337. package/build/typescript/Carousel/hooks/index.d.ts +5 -0
  338. package/build/typescript/Carousel/hooks/useAutoplayController.d.ts +7 -0
  339. package/build/typescript/Carousel/hooks/useIndexController.d.ts +10 -0
  340. package/build/typescript/Carousel/hooks/useItemVisibilityStore.d.ts +7 -0
  341. package/build/typescript/Carousel/hooks/useLoopedData.d.ts +1 -0
  342. package/build/typescript/Carousel/hooks/usePagingAnimator.d.ts +17 -0
  343. package/build/typescript/Carousel/index.d.ts +3 -1
  344. package/build/typescript/Carousel/tick.d.ts +2 -0
  345. package/build/typescript/Carousel/types.d.ts +91 -0
  346. package/build/typescript/ComicViewer/ComicViewer.d.ts +1 -1
  347. package/build/typescript/ComicViewer/ComicViewerProps.d.ts +56 -43
  348. package/build/typescript/ComicViewer/EncodedTile.d.ts +2 -0
  349. package/build/typescript/ComicViewer/FastScroll.d.ts +4 -0
  350. package/build/typescript/ComicViewer/FastScrollProps.d.ts +70 -0
  351. package/build/typescript/ComicViewer/ReloadButton.d.ts +7 -0
  352. package/build/typescript/ComicViewer/ViewerItem.d.ts +42 -7
  353. package/build/typescript/ComicViewer/index.d.ts +3 -2
  354. package/build/typescript/ComicViewer/util.d.ts +2 -0
  355. package/build/typescript/ViewPager/FluxContext.d.ts +5 -0
  356. package/build/typescript/ViewPager/InternalContext.d.ts +7 -0
  357. package/build/typescript/ViewPager/PageStateContext.d.ts +6 -0
  358. package/build/typescript/ViewPager/ViewPager.d.ts +5 -0
  359. package/build/typescript/ViewPager/ViewPager.native.d.ts +5 -0
  360. package/build/typescript/ViewPager/ViewPagerProps.d.ts +18 -29
  361. package/build/typescript/ViewPager/components/ChildrenMemoizedPage.d.ts +14 -0
  362. package/build/typescript/ViewPager/components/FluxStoreProvider.d.ts +6 -0
  363. package/build/typescript/ViewPager/components/index.d.ts +2 -0
  364. package/build/typescript/ViewPager/hooks/index.d.ts +7 -0
  365. package/build/typescript/ViewPager/hooks/useDispatch.d.ts +2 -0
  366. package/build/typescript/ViewPager/hooks/useEagerState.d.ts +1 -0
  367. package/build/typescript/ViewPager/hooks/useForceRender.d.ts +2 -0
  368. package/build/typescript/ViewPager/hooks/useLazyState.d.ts +2 -0
  369. package/build/typescript/ViewPager/hooks/usePageStore.d.ts +2 -0
  370. package/build/typescript/ViewPager/hooks/useStore.d.ts +2 -0
  371. package/build/typescript/ViewPager/hooks/useViewPagerPageState.d.ts +1 -0
  372. package/build/typescript/ViewPager/index.d.ts +4 -1
  373. package/build/typescript/ViewPager/types.d.ts +12 -0
  374. package/build/typescript/ViewPager/utils.d.ts +5 -20
  375. package/build/typescript/ViewabilityTrackerView/Viewability.d.ts +3 -0
  376. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerView.d.ts +3 -0
  377. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerViewProps.d.ts +22 -0
  378. package/build/typescript/ViewabilityTrackerView/index.d.ts +2 -0
  379. package/build/typescript/ViewabilityTrackerView/measureViewability.d.ts +11 -0
  380. package/build/typescript/ViewabilityTrackerView/useViewabilityTracker.d.ts +11 -0
  381. package/build/typescript/hooks/index.d.ts +2 -0
  382. package/build/typescript/hooks/useDeferredExecutor.d.ts +11 -0
  383. package/build/typescript/hooks/useIsMounted.d.ts +4 -0
  384. package/build/typescript/hooks/useUnstableCollapsibleAppBar.d.ts +2 -3
  385. package/build/typescript/hooks/useUnstableToggleDisplayStyle.d.ts +2 -2
  386. package/build/typescript/index.d.ts +2 -0
  387. package/package.json +13 -27
  388. package/src/AnimatedY/AnimatedY.tsx +13 -10
  389. package/src/BottomSheet/BottomSheetNative.tsx +30 -3
  390. package/src/BottomSheet/BottomSheetProps.ts +21 -1
  391. package/src/BottomSheet/BottomSheetWeb.tsx +32 -13
  392. package/src/BottomSheet/useDynamicSnapPoints.ts +73 -0
  393. package/src/Carousel/Carousel.tsx +135 -0
  394. package/src/Carousel/CarouselProps.ts +42 -53
  395. package/src/Carousel/animation/animationUtils.ts +1 -0
  396. package/src/Carousel/animation/createDefaultItemStyle.ts +3 -0
  397. package/src/Carousel/animation/createDefaultScrollAnimation.ts +13 -0
  398. package/src/Carousel/animation/index.ts +4 -0
  399. package/src/Carousel/animation/normalItemStyleFactory.ts +19 -0
  400. package/src/Carousel/animation/parallaxItemStyleFactory.ts +79 -0
  401. package/src/Carousel/components/InternalContext.ts +33 -0
  402. package/src/Carousel/components/ItemView.tsx +66 -0
  403. package/src/Carousel/components/RootView.tsx +79 -0
  404. package/src/Carousel/components/ScrollViewGesture.tsx +92 -0
  405. package/src/Carousel/components/index.ts +4 -0
  406. package/src/Carousel/components/useItemInterpolation.ts +107 -0
  407. package/src/Carousel/hooks/index.ts +5 -0
  408. package/src/Carousel/hooks/useAutoplayController.ts +57 -0
  409. package/src/Carousel/hooks/useIndexController.tsx +57 -0
  410. package/src/Carousel/hooks/useItemVisibilityStore.ts +107 -0
  411. package/src/Carousel/hooks/useLoopedData.ts +26 -0
  412. package/src/Carousel/hooks/usePagingAnimator.ts +255 -0
  413. package/src/Carousel/index.ts +4 -2
  414. package/src/Carousel/tick.ts +6 -0
  415. package/src/Carousel/types.ts +114 -0
  416. package/src/ComicViewer/ComicViewer.tsx +283 -104
  417. package/src/ComicViewer/ComicViewerProps.ts +60 -44
  418. package/src/ComicViewer/EncodedTile.ts +3 -0
  419. package/src/ComicViewer/FastScroll.tsx +158 -0
  420. package/src/ComicViewer/FastScrollProps.ts +83 -0
  421. package/src/ComicViewer/ReloadButton.tsx +36 -0
  422. package/src/ComicViewer/ViewerItem.tsx +97 -62
  423. package/src/ComicViewer/index.ts +8 -2
  424. package/src/ComicViewer/util.ts +15 -0
  425. package/src/FlipCard/FlipCard.tsx +8 -8
  426. package/src/ViewPager/FluxContext.ts +8 -0
  427. package/src/ViewPager/InternalContext.ts +13 -0
  428. package/src/ViewPager/PageStateContext.ts +11 -0
  429. package/src/ViewPager/ViewPager.native.tsx +150 -0
  430. package/src/ViewPager/ViewPager.tsx +69 -0
  431. package/src/ViewPager/ViewPagerProps.ts +20 -35
  432. package/src/ViewPager/components/ChildrenMemoizedPage.tsx +124 -0
  433. package/src/ViewPager/components/FluxStoreProvider.tsx +27 -0
  434. package/src/ViewPager/components/index.ts +2 -0
  435. package/src/ViewPager/hooks/index.ts +7 -0
  436. package/src/ViewPager/hooks/useDispatch.ts +11 -0
  437. package/src/ViewPager/hooks/useEagerState.ts +14 -0
  438. package/src/ViewPager/hooks/useForceRender.ts +7 -0
  439. package/src/ViewPager/hooks/useLazyState.ts +32 -0
  440. package/src/ViewPager/hooks/usePageStore.ts +30 -0
  441. package/src/ViewPager/hooks/useStore.ts +15 -0
  442. package/src/ViewPager/hooks/useViewPagerPageState.ts +6 -0
  443. package/src/ViewPager/index.ts +11 -2
  444. package/src/ViewPager/types.ts +15 -0
  445. package/src/ViewPager/utils.tsx +9 -56
  446. package/src/ViewabilityTrackerView/Viewability.ts +3 -0
  447. package/src/ViewabilityTrackerView/ViewabilityTrackerView.tsx +33 -0
  448. package/src/ViewabilityTrackerView/ViewabilityTrackerViewProps.ts +25 -0
  449. package/src/ViewabilityTrackerView/index.ts +2 -0
  450. package/src/ViewabilityTrackerView/measureViewability.ts +54 -0
  451. package/src/ViewabilityTrackerView/useViewabilityTracker.ts +85 -0
  452. package/src/hooks/index.ts +2 -0
  453. package/src/hooks/useDeferredExecutor.ts +46 -0
  454. package/src/hooks/useHeight.ts +3 -4
  455. package/src/hooks/useIsMounted.ts +19 -0
  456. package/src/hooks/useUnstableCollapsibleAppBar.ts +62 -45
  457. package/src/hooks/useUnstableToggleDisplayStyle.ts +8 -6
  458. package/src/index.ts +3 -0
  459. package/yarn-error.log +103 -0
  460. package/build/commonjs/Carousel/CarouselNative.js +0 -72
  461. package/build/commonjs/Carousel/CarouselNative.js.map +0 -1
  462. package/build/commonjs/Carousel/CarouselWeb.js +0 -237
  463. package/build/commonjs/Carousel/CarouselWeb.js.map +0 -1
  464. package/build/commonjs/Carousel/index.native.js.map +0 -1
  465. package/build/commonjs/Carousel/utils.js +0 -19
  466. package/build/commonjs/Carousel/utils.js.map +0 -1
  467. package/build/commonjs/ComicViewer/ComicViewerItemProps.js.map +0 -1
  468. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +0 -49
  469. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  470. package/build/commonjs/ViewPager/ViewPagerNative.js +0 -72
  471. package/build/commonjs/ViewPager/ViewPagerNative.js.map +0 -1
  472. package/build/commonjs/ViewPager/ViewPagerWeb.js +0 -55
  473. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +0 -1
  474. package/build/commonjs/ViewPager/index.native.js +0 -16
  475. package/build/commonjs/ViewPager/index.native.js.map +0 -1
  476. package/build/commonjs/hooks/useWidth.js +0 -29
  477. package/build/commonjs/hooks/useWidth.js.map +0 -1
  478. package/build/module/Carousel/CarouselNative.js +0 -54
  479. package/build/module/Carousel/CarouselNative.js.map +0 -1
  480. package/build/module/Carousel/CarouselWeb.js +0 -215
  481. package/build/module/Carousel/CarouselWeb.js.map +0 -1
  482. package/build/module/Carousel/index.native.js +0 -2
  483. package/build/module/Carousel/index.native.js.map +0 -1
  484. package/build/module/Carousel/utils.js +0 -7
  485. package/build/module/Carousel/utils.js.map +0 -1
  486. package/build/module/ComicViewer/ComicViewerItemProps.js +0 -2
  487. package/build/module/ComicViewer/ComicViewerItemProps.js.map +0 -1
  488. package/build/module/ViewPager/ChildrenMemoizedPage.js +0 -37
  489. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  490. package/build/module/ViewPager/ViewPagerNative.js +0 -53
  491. package/build/module/ViewPager/ViewPagerNative.js.map +0 -1
  492. package/build/module/ViewPager/ViewPagerWeb.js +0 -41
  493. package/build/module/ViewPager/ViewPagerWeb.js.map +0 -1
  494. package/build/module/ViewPager/index.native.js +0 -2
  495. package/build/module/ViewPager/index.native.js.map +0 -1
  496. package/build/module/hooks/useWidth.js +0 -15
  497. package/build/module/hooks/useWidth.js.map +0 -1
  498. package/build/typescript/Carousel/CarouselNative.d.ts +0 -3
  499. package/build/typescript/Carousel/CarouselWeb.d.ts +0 -4
  500. package/build/typescript/Carousel/index.native.d.ts +0 -1
  501. package/build/typescript/Carousel/utils.d.ts +0 -6
  502. package/build/typescript/ComicViewer/ComicViewerItemProps.d.ts +0 -12
  503. package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +0 -4
  504. package/build/typescript/ViewPager/ViewPagerNative.d.ts +0 -3
  505. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +0 -3
  506. package/build/typescript/ViewPager/index.native.d.ts +0 -1
  507. package/build/typescript/hooks/useWidth.d.ts +0 -2
  508. package/src/Carousel/CarouselNative.tsx +0 -67
  509. package/src/Carousel/CarouselWeb.tsx +0 -222
  510. package/src/Carousel/index.native.ts +0 -1
  511. package/src/Carousel/utils.ts +0 -11
  512. package/src/ComicViewer/ComicViewerItemProps.ts +0 -15
  513. package/src/ViewPager/ChildrenMemoizedPage.tsx +0 -36
  514. package/src/ViewPager/ViewPagerNative.tsx +0 -66
  515. package/src/ViewPager/ViewPagerWeb.tsx +0 -52
  516. package/src/ViewPager/index.native.ts +0 -1
  517. package/src/hooks/useWidth.ts +0 -17
@@ -0,0 +1,34 @@
1
+ import { clamp } from '@fountain-ui/utils';
2
+
3
+ const computeRectSize = rect => (rect.bottom - rect.top) * (rect.right - rect.left);
4
+
5
+ const normalizePagePosition = value => value != null && Number.isFinite(value) ? value : Number.MAX_SAFE_INTEGER;
6
+
7
+ const normalizeViewSize = size => Number.isFinite(size) && size > 0 ? size : Number.MAX_SAFE_INTEGER;
8
+
9
+ export default function measureViewability(_ref) {
10
+ let {
11
+ view,
12
+ windowWidth,
13
+ windowHeight,
14
+ onViewabilityDetailMeasured
15
+ } = _ref;
16
+ view.measure((x, y, width, height, pageX, pageY) => {
17
+ const safePageX = normalizePagePosition(pageX);
18
+ const safePageY = normalizePagePosition(pageY);
19
+ const visibleRect = {
20
+ top: clamp(safePageY, 0, windowHeight),
21
+ bottom: clamp(safePageY + height, 0, windowHeight),
22
+ left: clamp(safePageX, 0, windowWidth),
23
+ right: clamp(safePageX + width, 0, windowWidth)
24
+ };
25
+ const visibleRectSize = computeRectSize(visibleRect);
26
+ const viewSize = normalizeViewSize(width * height);
27
+ const visiblePercent = Math.round(visibleRectSize / viewSize * 100);
28
+ onViewabilityDetailMeasured === null || onViewabilityDetailMeasured === void 0 ? void 0 : onViewabilityDetailMeasured({
29
+ visiblePercent
30
+ });
31
+ });
32
+ }
33
+ ;
34
+ //# sourceMappingURL=measureViewability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["clamp","computeRectSize","rect","bottom","top","right","left","normalizePagePosition","value","Number","isFinite","MAX_SAFE_INTEGER","normalizeViewSize","size","measureViewability","view","windowWidth","windowHeight","onViewabilityDetailMeasured","measure","x","y","width","height","pageX","pageY","safePageX","safePageY","visibleRect","visibleRectSize","viewSize","visiblePercent","Math","round"],"sources":["measureViewability.ts"],"sourcesContent":["import type { View } from 'react-native';\nimport { clamp } from '@fountain-ui/utils';\n\ninterface Rect {\n top: number,\n bottom: number;\n left: number;\n right: number;\n}\n\nexport interface ViewabilityDetail {\n visiblePercent: number;\n}\n\nexport interface MeasureViewabilityParameters {\n view: View;\n windowWidth: number;\n windowHeight: number;\n onViewabilityDetailMeasured: (detail: ViewabilityDetail) => void;\n}\n\nconst computeRectSize = (rect: Rect): number =>\n (rect.bottom - rect.top) * (rect.right - rect.left);\n\nconst normalizePagePosition = (value?: number): number =>\n (value != null && Number.isFinite(value)) ? value : Number.MAX_SAFE_INTEGER;\n\nconst normalizeViewSize = (size: number): number =>\n Number.isFinite(size) && size > 0 ? size : Number.MAX_SAFE_INTEGER;\n\nexport default function measureViewability({\n view,\n windowWidth,\n windowHeight,\n onViewabilityDetailMeasured,\n}: MeasureViewabilityParameters) {\n view.measure((x, y, width, height, pageX?: number, pageY?: number) => {\n const safePageX = normalizePagePosition(pageX);\n const safePageY = normalizePagePosition(pageY);\n\n const visibleRect: Rect = {\n top: clamp(safePageY, 0, windowHeight),\n bottom: clamp(safePageY + height, 0, windowHeight),\n left: clamp(safePageX, 0, windowWidth),\n right: clamp(safePageX + width, 0, windowWidth),\n };\n\n const visibleRectSize = computeRectSize(visibleRect);\n const viewSize = normalizeViewSize(width * height);\n const visiblePercent = Math.round(visibleRectSize / viewSize * 100);\n\n onViewabilityDetailMeasured?.({ visiblePercent });\n });\n};\n"],"mappings":"AACA,SAASA,KAAT,QAAsB,oBAAtB;;AAoBA,MAAMC,eAAe,GAAIC,IAAD,IACpB,CAACA,IAAI,CAACC,MAAL,GAAcD,IAAI,CAACE,GAApB,KAA4BF,IAAI,CAACG,KAAL,GAAaH,IAAI,CAACI,IAA9C,CADJ;;AAGA,MAAMC,qBAAqB,GAAIC,KAAD,IACzBA,KAAK,IAAI,IAAT,IAAiBC,MAAM,CAACC,QAAP,CAAgBF,KAAhB,CAAlB,GAA4CA,KAA5C,GAAoDC,MAAM,CAACE,gBAD/D;;AAGA,MAAMC,iBAAiB,GAAIC,IAAD,IACtBJ,MAAM,CAACC,QAAP,CAAgBG,IAAhB,KAAyBA,IAAI,GAAG,CAAhC,GAAoCA,IAApC,GAA2CJ,MAAM,CAACE,gBADtD;;AAGA,eAAe,SAASG,kBAAT,OAKkB;EAAA,IALU;IACvCC,IADuC;IAEvCC,WAFuC;IAGvCC,YAHuC;IAIvCC;EAJuC,CAKV;EAC7BH,IAAI,CAACI,OAAL,CAAa,CAACC,CAAD,EAAIC,CAAJ,EAAOC,KAAP,EAAcC,MAAd,EAAsBC,KAAtB,EAAsCC,KAAtC,KAAyD;IAClE,MAAMC,SAAS,GAAGnB,qBAAqB,CAACiB,KAAD,CAAvC;IACA,MAAMG,SAAS,GAAGpB,qBAAqB,CAACkB,KAAD,CAAvC;IAEA,MAAMG,WAAiB,GAAG;MACtBxB,GAAG,EAAEJ,KAAK,CAAC2B,SAAD,EAAY,CAAZ,EAAeV,YAAf,CADY;MAEtBd,MAAM,EAAEH,KAAK,CAAC2B,SAAS,GAAGJ,MAAb,EAAqB,CAArB,EAAwBN,YAAxB,CAFS;MAGtBX,IAAI,EAAEN,KAAK,CAAC0B,SAAD,EAAY,CAAZ,EAAeV,WAAf,CAHW;MAItBX,KAAK,EAAEL,KAAK,CAAC0B,SAAS,GAAGJ,KAAb,EAAoB,CAApB,EAAuBN,WAAvB;IAJU,CAA1B;IAOA,MAAMa,eAAe,GAAG5B,eAAe,CAAC2B,WAAD,CAAvC;IACA,MAAME,QAAQ,GAAGlB,iBAAiB,CAACU,KAAK,GAAGC,MAAT,CAAlC;IACA,MAAMQ,cAAc,GAAGC,IAAI,CAACC,KAAL,CAAWJ,eAAe,GAAGC,QAAlB,GAA6B,GAAxC,CAAvB;IAEAZ,2BAA2B,SAA3B,IAAAA,2BAA2B,WAA3B,YAAAA,2BAA2B,CAAG;MAAEa;IAAF,CAAH,CAA3B;EACH,CAhBD;AAiBH;AAAA"}
@@ -0,0 +1,73 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { useValidWindowDimensions } from '@fountain-ui/core';
3
+ import { useDeferredExecutor } from '../hooks';
4
+ import measureViewability from './measureViewability';
5
+ const initialViewability = {
6
+ visible: false
7
+ };
8
+ export default function useViewabilityTracker(config) {
9
+ const {
10
+ enabled,
11
+ measurementIntervalMillis,
12
+ onViewabilityChange,
13
+ viewRef,
14
+ visiblePercentThreshold
15
+ } = config;
16
+ const viewabilityRef = useRef(initialViewability);
17
+ const executor = useDeferredExecutor();
18
+ const window = useValidWindowDimensions();
19
+
20
+ const maybeMeasureRecursive = () => {
21
+ if (!enabled) {
22
+ return;
23
+ }
24
+
25
+ const mapViewabilityDetailToViewability = detail => {
26
+ return {
27
+ visible: detail.visiblePercent >= visiblePercentThreshold
28
+ };
29
+ };
30
+
31
+ const isViewabilityEquals = (a, b) => {
32
+ return a.visible === b.visible;
33
+ };
34
+
35
+ const dispatchViewabilityChanged = viewability => {
36
+ executor.execute(() => onViewabilityChange === null || onViewabilityChange === void 0 ? void 0 : onViewabilityChange(viewability));
37
+ };
38
+
39
+ const onViewabilityDetailMeasured = detail => {
40
+ const nextViewability = mapViewabilityDetailToViewability(detail);
41
+
42
+ if (!isViewabilityEquals(viewabilityRef.current, nextViewability)) {
43
+ viewabilityRef.current = nextViewability;
44
+ dispatchViewabilityChanged(nextViewability);
45
+ }
46
+
47
+ maybeMeasureRecursive();
48
+ };
49
+
50
+ const maybeMeasure = () => {
51
+ if (viewRef.current) {
52
+ measureViewability({
53
+ view: viewRef.current,
54
+ windowWidth: window.width,
55
+ windowHeight: window.height,
56
+ onViewabilityDetailMeasured
57
+ });
58
+ }
59
+ };
60
+
61
+ executor.execute(maybeMeasure, measurementIntervalMillis);
62
+ };
63
+
64
+ useEffect(() => {
65
+ if (enabled) {
66
+ maybeMeasureRecursive();
67
+ } else {
68
+ executor.cancel();
69
+ }
70
+ }, [enabled]);
71
+ }
72
+ ;
73
+ //# sourceMappingURL=useViewabilityTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","useValidWindowDimensions","useDeferredExecutor","measureViewability","initialViewability","visible","useViewabilityTracker","config","enabled","measurementIntervalMillis","onViewabilityChange","viewRef","visiblePercentThreshold","viewabilityRef","executor","window","maybeMeasureRecursive","mapViewabilityDetailToViewability","detail","visiblePercent","isViewabilityEquals","a","b","dispatchViewabilityChanged","viewability","execute","onViewabilityDetailMeasured","nextViewability","current","maybeMeasure","view","windowWidth","width","windowHeight","height","cancel"],"sources":["useViewabilityTracker.ts"],"sourcesContent":["import type { RefObject } from 'react';\nimport { useEffect, useRef } from 'react';\nimport type { View } from 'react-native';\nimport { useValidWindowDimensions } from '@fountain-ui/core';\nimport { useDeferredExecutor } from '../hooks';\nimport type { ViewabilityDetail } from './measureViewability';\nimport measureViewability from './measureViewability';\nimport type Viewability from './Viewability';\n\nexport interface ViewabilityTrackerConfig {\n enabled: boolean;\n measurementIntervalMillis: number;\n onViewabilityChange?: (viewability: Viewability) => void;\n viewRef: RefObject<View>;\n visiblePercentThreshold: number;\n}\n\nconst initialViewability: Readonly<Viewability> = { visible: false };\n\nexport default function useViewabilityTracker(config: ViewabilityTrackerConfig) {\n const {\n enabled,\n measurementIntervalMillis,\n onViewabilityChange,\n viewRef,\n visiblePercentThreshold,\n } = config;\n\n const viewabilityRef = useRef<Viewability>(initialViewability);\n\n const executor = useDeferredExecutor();\n\n const window = useValidWindowDimensions();\n\n const maybeMeasureRecursive = () => {\n if (!enabled) {\n return;\n }\n\n const mapViewabilityDetailToViewability = (detail: ViewabilityDetail): Viewability => {\n return { visible: detail.visiblePercent >= visiblePercentThreshold };\n };\n\n const isViewabilityEquals = (a: Viewability, b: Viewability): boolean => {\n return a.visible === b.visible;\n };\n\n const dispatchViewabilityChanged = (viewability: Viewability) => {\n executor.execute(() => onViewabilityChange?.(viewability));\n };\n\n const onViewabilityDetailMeasured = (detail: ViewabilityDetail) => {\n const nextViewability = mapViewabilityDetailToViewability(detail);\n\n if (!isViewabilityEquals(viewabilityRef.current, nextViewability)) {\n viewabilityRef.current = nextViewability;\n\n dispatchViewabilityChanged(nextViewability);\n }\n\n maybeMeasureRecursive();\n };\n\n const maybeMeasure = () => {\n if (viewRef.current) {\n measureViewability({\n view: viewRef.current,\n windowWidth: window.width,\n windowHeight: window.height,\n onViewabilityDetailMeasured,\n });\n }\n };\n\n executor.execute(maybeMeasure, measurementIntervalMillis);\n };\n\n useEffect(() => {\n if (enabled) {\n maybeMeasureRecursive();\n } else {\n executor.cancel();\n }\n }, [enabled]);\n};\n"],"mappings":"AACA,SAASA,SAAT,EAAoBC,MAApB,QAAkC,OAAlC;AAEA,SAASC,wBAAT,QAAyC,mBAAzC;AACA,SAASC,mBAAT,QAAoC,UAApC;AAEA,OAAOC,kBAAP,MAA+B,sBAA/B;AAWA,MAAMC,kBAAyC,GAAG;EAAEC,OAAO,EAAE;AAAX,CAAlD;AAEA,eAAe,SAASC,qBAAT,CAA+BC,MAA/B,EAAiE;EAC5E,MAAM;IACFC,OADE;IAEFC,yBAFE;IAGFC,mBAHE;IAIFC,OAJE;IAKFC;EALE,IAMFL,MANJ;EAQA,MAAMM,cAAc,GAAGb,MAAM,CAAcI,kBAAd,CAA7B;EAEA,MAAMU,QAAQ,GAAGZ,mBAAmB,EAApC;EAEA,MAAMa,MAAM,GAAGd,wBAAwB,EAAvC;;EAEA,MAAMe,qBAAqB,GAAG,MAAM;IAChC,IAAI,CAACR,OAAL,EAAc;MACV;IACH;;IAED,MAAMS,iCAAiC,GAAIC,MAAD,IAA4C;MAClF,OAAO;QAAEb,OAAO,EAAEa,MAAM,CAACC,cAAP,IAAyBP;MAApC,CAAP;IACH,CAFD;;IAIA,MAAMQ,mBAAmB,GAAG,CAACC,CAAD,EAAiBC,CAAjB,KAA6C;MACrE,OAAOD,CAAC,CAAChB,OAAF,KAAciB,CAAC,CAACjB,OAAvB;IACH,CAFD;;IAIA,MAAMkB,0BAA0B,GAAIC,WAAD,IAA8B;MAC7DV,QAAQ,CAACW,OAAT,CAAiB,MAAMf,mBAAN,aAAMA,mBAAN,uBAAMA,mBAAmB,CAAGc,WAAH,CAA1C;IACH,CAFD;;IAIA,MAAME,2BAA2B,GAAIR,MAAD,IAA+B;MAC/D,MAAMS,eAAe,GAAGV,iCAAiC,CAACC,MAAD,CAAzD;;MAEA,IAAI,CAACE,mBAAmB,CAACP,cAAc,CAACe,OAAhB,EAAyBD,eAAzB,CAAxB,EAAmE;QAC/Dd,cAAc,CAACe,OAAf,GAAyBD,eAAzB;QAEAJ,0BAA0B,CAACI,eAAD,CAA1B;MACH;;MAEDX,qBAAqB;IACxB,CAVD;;IAYA,MAAMa,YAAY,GAAG,MAAM;MACvB,IAAIlB,OAAO,CAACiB,OAAZ,EAAqB;QACjBzB,kBAAkB,CAAC;UACf2B,IAAI,EAAEnB,OAAO,CAACiB,OADC;UAEfG,WAAW,EAAEhB,MAAM,CAACiB,KAFL;UAGfC,YAAY,EAAElB,MAAM,CAACmB,MAHN;UAIfR;QAJe,CAAD,CAAlB;MAMH;IACJ,CATD;;IAWAZ,QAAQ,CAACW,OAAT,CAAiBI,YAAjB,EAA+BpB,yBAA/B;EACH,CAzCD;;EA2CAV,SAAS,CAAC,MAAM;IACZ,IAAIS,OAAJ,EAAa;MACTQ,qBAAqB;IACxB,CAFD,MAEO;MACHF,QAAQ,CAACqB,MAAT;IACH;EACJ,CANQ,EAMN,CAAC3B,OAAD,CANM,CAAT;AAOH;AAAA"}
@@ -1,3 +1,5 @@
1
+ export { default as useDeferredExecutor } from './useDeferredExecutor';
2
+ export { default as useIsMounted } from './useIsMounted';
1
3
  export { default as useUnstableCollapsibleAppBar } from './useUnstableCollapsibleAppBar';
2
4
  export { default as useUnstableToggleDisplayStyle } from './useUnstableToggleDisplayStyle';
3
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["default","useUnstableCollapsibleAppBar","useUnstableToggleDisplayStyle"],"mappings":"AAAA,SAASA,OAAO,IAAIC,4BAApB,QAAwD,gCAAxD;AACA,SAASD,OAAO,IAAIE,6BAApB,QAAyD,iCAAzD","sourcesContent":["export { default as useUnstableCollapsibleAppBar } from './useUnstableCollapsibleAppBar';\nexport { default as useUnstableToggleDisplayStyle } from './useUnstableToggleDisplayStyle';\n\n"]}
1
+ {"version":3,"names":["default","useDeferredExecutor","useIsMounted","useUnstableCollapsibleAppBar","useUnstableToggleDisplayStyle"],"sources":["index.ts"],"sourcesContent":["export { default as useDeferredExecutor } from './useDeferredExecutor';\nexport { default as useIsMounted } from './useIsMounted';\nexport { default as useUnstableCollapsibleAppBar } from './useUnstableCollapsibleAppBar';\nexport { default as useUnstableToggleDisplayStyle } from './useUnstableToggleDisplayStyle';\n\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,mBAApB,QAA+C,uBAA/C;AACA,SAASD,OAAO,IAAIE,YAApB,QAAwC,gBAAxC;AACA,SAASF,OAAO,IAAIG,4BAApB,QAAwD,gCAAxD;AACA,SAASH,OAAO,IAAII,6BAApB,QAAyD,iCAAzD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["useAppbarStyles.ts"],"names":["useAppBarStyles","floating","position","top","left","right"],"mappings":"AAIA,MAAMA,eAAwC,GAAG,YAA0B;AACvE,SAAO;AACHC,IAAAA,QAAQ,EAAE;AACNC,MAAAA,QAAQ,EAAE,UADJ;AAENC,MAAAA,GAAG,EAAE,CAFC;AAGNC,MAAAA,IAAI,EAAE,CAHA;AAINC,MAAAA,KAAK,EAAE;AAJD;AADP,GAAP;AAQH,CATD;;AAWA,eAAeL,eAAf","sourcesContent":["import { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\n\ntype AppBarStyles = NamedStylesStringUnion<'floating'>;\n\nconst useAppBarStyles: UseStyles<AppBarStyles> = function (): AppBarStyles {\n return {\n floating: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n },\n };\n};\n\nexport default useAppBarStyles;"]}
1
+ {"version":3,"names":["useAppBarStyles","floating","position","top","left","right"],"sources":["useAppbarStyles.ts"],"sourcesContent":["import { NamedStylesStringUnion, UseStyles } from '@fountain-ui/styles';\n\ntype AppBarStyles = NamedStylesStringUnion<'floating'>;\n\nconst useAppBarStyles: UseStyles<AppBarStyles> = function (): AppBarStyles {\n return {\n floating: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n },\n };\n};\n\nexport default useAppBarStyles;"],"mappings":"AAIA,MAAMA,eAAwC,GAAG,YAA0B;EACvE,OAAO;IACHC,QAAQ,EAAE;MACNC,QAAQ,EAAE,UADJ;MAENC,GAAG,EAAE,CAFC;MAGNC,IAAI,EAAE,CAHA;MAINC,KAAK,EAAE;IAJD;EADP,CAAP;AAQH,CATD;;AAWA,eAAeL,eAAf"}
@@ -0,0 +1,33 @@
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+ import useIsMounted from './useIsMounted';
3
+ export default function useDeferredExecutor() {
4
+ const isMounted = useIsMounted();
5
+ const timeoutIdRef = useRef(null);
6
+ const cancel = useCallback(() => {
7
+ if (timeoutIdRef.current) {
8
+ clearTimeout(timeoutIdRef.current);
9
+ }
10
+ }, []);
11
+ useEffect(() => {
12
+ return cancel;
13
+ }, []);
14
+ const execute = useCallback((runnable, delay) => {
15
+ if (!isMounted()) {
16
+ return;
17
+ }
18
+
19
+ cancel();
20
+
21
+ if (Number.isFinite(delay)) {
22
+ timeoutIdRef.current = setTimeout(() => runnable(), delay);
23
+ } else {
24
+ runnable();
25
+ }
26
+ }, []);
27
+ return {
28
+ cancel,
29
+ execute
30
+ };
31
+ }
32
+ ;
33
+ //# sourceMappingURL=useDeferredExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useIsMounted","useDeferredExecutor","isMounted","timeoutIdRef","cancel","current","clearTimeout","execute","runnable","delay","Number","isFinite","setTimeout"],"sources":["useDeferredExecutor.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport useIsMounted from './useIsMounted';\n\nexport interface Runnable {\n (): void;\n}\n\nexport interface DeferredExecute {\n (runnable: Runnable, delay?: number): void;\n}\n\nexport interface DeferredExecutor {\n cancel: () => void;\n execute: DeferredExecute;\n}\n\nexport default function useDeferredExecutor(): DeferredExecutor {\n const isMounted = useIsMounted();\n const timeoutIdRef = useRef<NodeJS.Timer | null>(null);\n\n const cancel = useCallback(() => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n }\n }, []);\n\n useEffect(() => {\n return cancel;\n }, []);\n\n const execute = useCallback<DeferredExecute>((runnable, delay) => {\n if (!isMounted()) {\n return;\n }\n\n cancel();\n\n if (Number.isFinite(delay)) {\n timeoutIdRef.current = setTimeout(() => runnable(), delay);\n } else {\n runnable();\n }\n }, []);\n\n return { cancel, execute };\n};\n"],"mappings":"AAAA,SAASA,WAAT,EAAsBC,SAAtB,EAAiCC,MAAjC,QAA+C,OAA/C;AACA,OAAOC,YAAP,MAAyB,gBAAzB;AAeA,eAAe,SAASC,mBAAT,GAAiD;EAC5D,MAAMC,SAAS,GAAGF,YAAY,EAA9B;EACA,MAAMG,YAAY,GAAGJ,MAAM,CAAsB,IAAtB,CAA3B;EAEA,MAAMK,MAAM,GAAGP,WAAW,CAAC,MAAM;IAC7B,IAAIM,YAAY,CAACE,OAAjB,EAA0B;MACtBC,YAAY,CAACH,YAAY,CAACE,OAAd,CAAZ;IACH;EACJ,CAJyB,EAIvB,EAJuB,CAA1B;EAMAP,SAAS,CAAC,MAAM;IACZ,OAAOM,MAAP;EACH,CAFQ,EAEN,EAFM,CAAT;EAIA,MAAMG,OAAO,GAAGV,WAAW,CAAkB,CAACW,QAAD,EAAWC,KAAX,KAAqB;IAC9D,IAAI,CAACP,SAAS,EAAd,EAAkB;MACd;IACH;;IAEDE,MAAM;;IAEN,IAAIM,MAAM,CAACC,QAAP,CAAgBF,KAAhB,CAAJ,EAA4B;MACxBN,YAAY,CAACE,OAAb,GAAuBO,UAAU,CAAC,MAAMJ,QAAQ,EAAf,EAAmBC,KAAnB,CAAjC;IACH,CAFD,MAEO;MACHD,QAAQ;IACX;EACJ,CAZ0B,EAYxB,EAZwB,CAA3B;EAcA,OAAO;IAAEJ,MAAF;IAAUG;EAAV,CAAP;AACH;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["useElevationStyle.ts"],"names":["Platform","useTheme","useElevationStyle","elevation","theme","shadow","select","android","ios","web","boxShadow"],"mappings":"AAAA,SAASA,QAAT,QAAyB,cAAzB;AAEA,SAASC,QAAT,QAAyB,qBAAzB;AAEA,eAAe,SAASC,iBAAT,CAA2BC,SAA3B,EAAiD;AAC5D,QAAMC,KAAK,GAAGH,QAAQ,EAAtB;AACA,QAAMI,MAAM,GAAGD,KAAK,CAACC,MAAN,CAAaF,SAAb,CAAf;AAEA,SAAOH,QAAQ,CAACM,MAAT,CAAqB;AACxBC,IAAAA,OAAO,EAAEF,MAAF,aAAEA,MAAF,uBAAEA,MAAM,CAAEF,SADO;AAExBK,IAAAA,GAAG,EAAEH,MAAF,aAAEA,MAAF,uBAAEA,MAAM,CAAEA,MAFW;AAGxBI,IAAAA,GAAG,EAAEJ,MAAF,aAAEA,MAAF,uBAAEA,MAAM,CAAEK;AAHW,GAArB,CAAP;AAKH;AAAA","sourcesContent":["import { Platform } from 'react-native';\nimport type { Elevation } from '@fountain-ui/styles';\nimport { useTheme } from '@fountain-ui/styles';\n\nexport default function useElevationStyle(elevation: Elevation) {\n const theme = useTheme();\n const shadow = theme.shadow[elevation];\n\n return Platform.select<any>({\n android: shadow?.elevation,\n ios: shadow?.shadow,\n web: shadow?.boxShadow,\n });\n};\n"]}
1
+ {"version":3,"names":["Platform","useTheme","useElevationStyle","elevation","theme","shadow","select","android","ios","web","boxShadow"],"sources":["useElevationStyle.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport type { Elevation } from '@fountain-ui/styles';\nimport { useTheme } from '@fountain-ui/styles';\n\nexport default function useElevationStyle(elevation: Elevation) {\n const theme = useTheme();\n const shadow = theme.shadow[elevation];\n\n return Platform.select<any>({\n android: shadow?.elevation,\n ios: shadow?.shadow,\n web: shadow?.boxShadow,\n });\n};\n"],"mappings":"AAAA,SAASA,QAAT,QAAyB,cAAzB;AAEA,SAASC,QAAT,QAAyB,qBAAzB;AAEA,eAAe,SAASC,iBAAT,CAA2BC,SAA3B,EAAiD;EAC5D,MAAMC,KAAK,GAAGH,QAAQ,EAAtB;EACA,MAAMI,MAAM,GAAGD,KAAK,CAACC,MAAN,CAAaF,SAAb,CAAf;EAEA,OAAOH,QAAQ,CAACM,MAAT,CAAqB;IACxBC,OAAO,EAAEF,MAAF,aAAEA,MAAF,uBAAEA,MAAM,CAAEF,SADO;IAExBK,GAAG,EAAEH,MAAF,aAAEA,MAAF,uBAAEA,MAAM,CAAEA,MAFW;IAGxBI,GAAG,EAAEJ,MAAF,aAAEA,MAAF,uBAAEA,MAAM,CAAEK;EAHW,CAArB,CAAP;AAKH;AAAA"}
@@ -1,8 +1,8 @@
1
- import React from 'react';
2
- import Animated from 'react-native-reanimated';
3
- export default function useHeight(initialHeight = 0) {
1
+ import React, { useCallback } from 'react';
2
+ export default function useHeight() {
3
+ let initialHeight = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
4
4
  const [height, setHeight] = React.useState(initialHeight);
5
- const onLayout = Animated.useWorkletCallback(e => {
5
+ const onLayout = useCallback(e => {
6
6
  setHeight(e.nativeEvent.layout.height);
7
7
  }, []);
8
8
  return [height, onLayout];
@@ -1 +1 @@
1
- {"version":3,"sources":["useHeight.ts"],"names":["React","Animated","useHeight","initialHeight","height","setHeight","useState","onLayout","useWorkletCallback","e","nativeEvent","layout"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,OAAOC,QAAP,MAAqB,yBAArB;AAIA,eAAe,SAASC,SAAT,CAAmBC,aAAa,GAAG,CAAnC,EAAkE;AAC7E,QAAM,CAACC,MAAD,EAASC,SAAT,IAAsBL,KAAK,CAACM,QAAN,CAAuBH,aAAvB,CAA5B;AAEA,QAAMI,QAAQ,GAAGN,QAAQ,CAACO,kBAAT,CAA6BC,CAAD,IAAO;AAChDJ,IAAAA,SAAS,CAACI,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBP,MAAtB,CAAT;AACH,GAFgB,EAEd,EAFc,CAAjB;AAIA,SAAO,CAACA,MAAD,EAASG,QAAT,CAAP;AACH;AAAA","sourcesContent":["import React from 'react';\nimport { ViewProps } from 'react-native';\nimport Animated from 'react-native-reanimated';\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport default function useHeight(initialHeight = 0): [number, OnLayoutCallback] {\n const [height, setHeight] = React.useState<number>(initialHeight);\n\n const onLayout = Animated.useWorkletCallback((e) => {\n setHeight(e.nativeEvent.layout.height);\n }, []);\n\n return [height, onLayout];\n};\n"]}
1
+ {"version":3,"names":["React","useCallback","useHeight","initialHeight","height","setHeight","useState","onLayout","e","nativeEvent","layout"],"sources":["useHeight.ts"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { LayoutChangeEvent, ViewProps } from 'react-native';\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport default function useHeight(initialHeight = 0): [number, OnLayoutCallback] {\n const [height, setHeight] = React.useState<number>(initialHeight);\n\n const onLayout = useCallback((e: LayoutChangeEvent) => {\n setHeight(e.nativeEvent.layout.height);\n }, []);\n\n return [height, onLayout];\n};\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,QAAmC,OAAnC;AAKA,eAAe,SAASC,SAAT,GAAkE;EAAA,IAA/CC,aAA+C,uEAA/B,CAA+B;EAC7E,MAAM,CAACC,MAAD,EAASC,SAAT,IAAsBL,KAAK,CAACM,QAAN,CAAuBH,aAAvB,CAA5B;EAEA,MAAMI,QAAQ,GAAGN,WAAW,CAAEO,CAAD,IAA0B;IACnDH,SAAS,CAACG,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBN,MAAtB,CAAT;EACH,CAF2B,EAEzB,EAFyB,CAA5B;EAIA,OAAO,CAACA,MAAD,EAASG,QAAT,CAAP;AACH;AAAA"}
@@ -0,0 +1,13 @@
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+ export default function useIsMounted() {
3
+ const mountedRef = useRef(false);
4
+ useEffect(() => {
5
+ mountedRef.current = true;
6
+ return () => {
7
+ mountedRef.current = false;
8
+ };
9
+ }, []);
10
+ return useCallback(() => mountedRef.current, []);
11
+ }
12
+ ;
13
+ //# sourceMappingURL=useIsMounted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useIsMounted","mountedRef","current"],"sources":["useIsMounted.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nexport interface UseIsMounted {\n (): boolean;\n}\n\nexport default function useIsMounted(): UseIsMounted {\n const mountedRef = useRef<boolean>(false);\n\n useEffect(() => {\n mountedRef.current = true;\n\n return () => {\n mountedRef.current = false;\n };\n }, []);\n\n return useCallback(() => mountedRef.current, []);\n};\n"],"mappings":"AAAA,SAASA,WAAT,EAAsBC,SAAtB,EAAiCC,MAAjC,QAA+C,OAA/C;AAMA,eAAe,SAASC,YAAT,GAAsC;EACjD,MAAMC,UAAU,GAAGF,MAAM,CAAU,KAAV,CAAzB;EAEAD,SAAS,CAAC,MAAM;IACZG,UAAU,CAACC,OAAX,GAAqB,IAArB;IAEA,OAAO,MAAM;MACTD,UAAU,CAACC,OAAX,GAAqB,KAArB;IACH,CAFD;EAGH,CANQ,EAMN,EANM,CAAT;EAQA,OAAOL,WAAW,CAAC,MAAMI,UAAU,CAACC,OAAlB,EAA2B,EAA3B,CAAlB;AACH;AAAA"}
@@ -1,12 +1,11 @@
1
- import React, { useRef } from 'react';
1
+ import { useCallback, useRef } from 'react';
2
2
  import { Platform } from 'react-native';
3
- import Animated from 'react-native-reanimated';
3
+ import { useAnimatedScrollHandler, useAnimatedStyle, useDerivedValue, useSharedValue, withTiming } from 'react-native-reanimated';
4
4
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
5
5
  import useAppbarStyles from './useAppbarStyles';
6
6
  import useElevationStyle from './useElevationStyle';
7
7
  import useHeight from './useHeight';
8
8
  const defaultOptions = {
9
- translucent: false,
10
9
  shouldTranslateYReset: false
11
10
  };
12
11
  const ANIMATION_DURATION_MILLIS = 100;
@@ -19,9 +18,9 @@ function useLargerValueOfLastTwoValues(value) {
19
18
  return Math.max(...refLatestTwoValues.current);
20
19
  }
21
20
 
22
- export default function useUnstableCollapsibleAppBar(userOptions = defaultOptions) {
21
+ export default function useUnstableCollapsibleAppBar() {
22
+ let userOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultOptions;
23
23
  const {
24
- translucent,
25
24
  shouldTranslateYReset
26
25
  } = { ...defaultOptions,
27
26
  ...userOptions
@@ -31,42 +30,57 @@ export default function useUnstableCollapsibleAppBar(userOptions = defaultOption
31
30
  const [appBarHeight, onAppBarLayout] = useHeight();
32
31
  const appBarMaxHeight = useLargerValueOfLastTwoValues(appBarHeight);
33
32
  const [collapsibleToolbarHeight, onCollapsibleToolbarLayout] = useHeight();
34
- const maxTranslateY = Animated.useDerivedValue(() => -collapsibleToolbarHeight);
35
- const translateY = Animated.useSharedValue(0);
36
- const lastTranslateY = Animated.useSharedValue(0);
37
- const lastOffsetY = Animated.useSharedValue(0);
38
- const prevOffsetY = Animated.useSharedValue(0);
39
- const overlapped = Animated.useSharedValue(false);
40
- const vectorY = Animated.useSharedValue(0);
33
+ const maxTranslateY = useDerivedValue(() => -collapsibleToolbarHeight, [collapsibleToolbarHeight]);
34
+ const translateY = useSharedValue(0);
35
+ const lastTranslateY = useSharedValue(0);
36
+ const lastOffsetY = useSharedValue(0);
37
+ const prevOffsetY = useSharedValue(0);
38
+ const overlapped = useSharedValue(false);
39
+ const vectorY = useSharedValue(0);
41
40
  const elevationStyle = useElevationStyle(4);
42
- const animatedStyle = Animated.useAnimatedStyle(() => {
43
- return Platform.OS === 'web' ? {
44
- transform: [{
45
- translateY: translateY.value
46
- }],
47
- boxShadow: overlapped.value ? elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.boxShadow : 0
48
- } : {
49
- transform: [{
50
- translateY: translateY.value
51
- }],
52
- elevation: overlapped.value ? elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.elevation : 0,
53
- shadowColor: elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.shadowColor,
54
- shadowOffset: elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.shadowOffset,
55
- shadowRadius: elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.shadowRadius,
56
- shadowOpacity: overlapped.value ? elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.shadowOpacity : 0
57
- };
58
- });
59
- const indexRef = React.useRef(0);
60
- const offsetsRef = React.useRef([]);
41
+ const animatedStyle = useAnimatedStyle(() => {
42
+ const transform = [{
43
+ translateY: translateY.value
44
+ }];
61
45
 
62
- const onScrollViewChanged = nextIndex => {
63
- var _offsetsRef$current$n;
46
+ if (Platform.OS === 'web') {
47
+ return {
48
+ transform,
49
+ boxShadow: overlapped.value ? elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.boxShadow : 0
50
+ };
51
+ }
52
+
53
+ if (Platform.OS === 'android') {
54
+ return {
55
+ transform,
56
+ elevation: overlapped.value ? elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.elevation : 0
57
+ };
58
+ }
64
59
 
60
+ if (Platform.OS === 'ios') {
61
+ return {
62
+ transform,
63
+ shadowColor: elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.shadowColor,
64
+ shadowOffset: elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.shadowOffset,
65
+ shadowRadius: elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.shadowRadius,
66
+ shadowOpacity: overlapped.value ? elevationStyle === null || elevationStyle === void 0 ? void 0 : elevationStyle.shadowOpacity : 0
67
+ };
68
+ }
69
+
70
+ return {};
71
+ }, [
72
+ /**
73
+ * FIXME: Consider add `elevationStyle` to dependencies.
74
+ */
75
+ ]);
76
+ const indexRef = useRef(0);
77
+ const offsetsRef = useRef([]);
78
+ const onScrollViewChanged = useCallback(nextIndex => {
65
79
  const prevIndex = indexRef.current;
66
80
 
67
81
  if (prevIndex === nextIndex) {
68
82
  if (shouldTranslateYReset) {
69
- translateY.value = Animated.withTiming(0, {
83
+ translateY.value = withTiming(0, {
70
84
  duration: ANIMATION_DURATION_MILLIS
71
85
  });
72
86
  vectorY.value = 0;
@@ -78,21 +92,20 @@ export default function useUnstableCollapsibleAppBar(userOptions = defaultOption
78
92
  }
79
93
 
80
94
  offsetsRef.current[prevIndex] = lastOffsetY.value;
81
- const savedOffsetY = (_offsetsRef$current$n = offsetsRef.current[nextIndex]) !== null && _offsetsRef$current$n !== void 0 ? _offsetsRef$current$n : 0;
95
+ const savedOffsetY = offsetsRef.current[nextIndex] ?? 0;
82
96
  lastOffsetY.value = savedOffsetY;
83
97
  indexRef.current = nextIndex; // Determine whether to overlap every time index is changed.
84
98
 
85
99
  overlapped.value = savedOffsetY > 0; // If next ScrollView's offset is too short, expand app bar.
86
100
 
87
101
  if (translateY.value < 0 && savedOffsetY < appBarHeight) {
88
- translateY.value = Animated.withTiming(0, {
102
+ translateY.value = withTiming(0, {
89
103
  duration: ANIMATION_DURATION_MILLIS
90
104
  });
91
105
  vectorY.value = 0;
92
106
  }
93
- };
94
-
95
- const scrollHandler = Animated.useAnimatedScrollHandler({
107
+ }, [appBarHeight]);
108
+ const scrollHandler = useAnimatedScrollHandler({
96
109
  onBeginDrag: () => {
97
110
  lastTranslateY.value = translateY.value;
98
111
  },
@@ -114,13 +127,13 @@ export default function useUnstableCollapsibleAppBar(userOptions = defaultOption
114
127
  } else {
115
128
  if (offsetY > -maxTy) {
116
129
  if (ty === 0) {
117
- translateY.value = Animated.withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {
130
+ translateY.value = withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {
118
131
  duration: ANIMATION_DURATION_MILLIS
119
132
  });
120
133
  }
121
134
  } else {
122
135
  if (ty === maxTy) {
123
- translateY.value = Animated.withTiming(0, {
136
+ translateY.value = withTiming(0, {
124
137
  duration: ANIMATION_DURATION_MILLIS
125
138
  });
126
139
  }
@@ -146,15 +159,15 @@ export default function useUnstableCollapsibleAppBar(userOptions = defaultOption
146
159
  const threshold = maxTy * 0.5;
147
160
  const nextTranslateY = ty > threshold || offsetY < appBarHeight ? 0 : maxTy;
148
161
  overlapped.value = offsetY + nextTranslateY > 0;
149
- translateY.value = Animated.withTiming(nextTranslateY, {
162
+ translateY.value = withTiming(nextTranslateY, {
150
163
  duration: ANIMATION_DURATION_MILLIS
151
164
  });
152
165
  }
153
- });
166
+ }, [appBarHeight]);
154
167
  const hasCollapsible = collapsibleToolbarHeight > 0;
155
- const appBarStyle = [animatedStyle, translucent ? {
168
+ const appBarStyle = [animatedStyle, {
156
169
  paddingTop: safeAreaInsets.top
157
- } : undefined, hasCollapsible ? styles.floating : undefined];
170
+ }, hasCollapsible ? styles.floating : undefined];
158
171
  return {
159
172
  appBarStyle,
160
173
  vectorY,
@@ -1 +1 @@
1
- {"version":3,"sources":["useUnstableCollapsibleAppBar.ts"],"names":["React","useRef","Platform","Animated","useSafeAreaInsets","useAppbarStyles","useElevationStyle","useHeight","defaultOptions","translucent","shouldTranslateYReset","ANIMATION_DURATION_MILLIS","SUPPORTS_DRAG_DETECTION","OS","useLargerValueOfLastTwoValues","value","refLatestTwoValues","current","shift","push","Math","max","useUnstableCollapsibleAppBar","userOptions","styles","safeAreaInsets","appBarHeight","onAppBarLayout","appBarMaxHeight","collapsibleToolbarHeight","onCollapsibleToolbarLayout","maxTranslateY","useDerivedValue","translateY","useSharedValue","lastTranslateY","lastOffsetY","prevOffsetY","overlapped","vectorY","elevationStyle","animatedStyle","useAnimatedStyle","transform","boxShadow","elevation","shadowColor","shadowOffset","shadowRadius","shadowOpacity","indexRef","offsetsRef","onScrollViewChanged","nextIndex","prevIndex","withTiming","duration","savedOffsetY","scrollHandler","useAnimatedScrollHandler","onBeginDrag","onMomentumBegin","onScroll","event","offsetY","contentOffset","y","ty","maxTy","deltaY","dy","min","onEndDrag","onMomentumEnd","threshold","nextTranslateY","hasCollapsible","appBarStyle","paddingTop","top","undefined","floating","scrollContentInsets"],"mappings":"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","sourcesContent":["import React, { useRef } from 'react';\nimport { Falsy, Platform, RegisteredStyle, ScrollViewProps, ViewProps, ViewStyle } from 'react-native';\nimport Animated from 'react-native-reanimated';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport useAppbarStyles from './useAppbarStyles';\nimport useElevationStyle from './useElevationStyle';\nimport useHeight from './useHeight';\n\ntype WebOnlyStyle = { boxShadow: any };\n\ntype ViewStyleProp = Array<ViewStyle | RegisteredStyle<ViewStyle> | WebOnlyStyle | Falsy>;\n\ntype OnScroll = ScrollViewProps['onScroll'];\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport interface ContentInsets {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n}\n\nexport interface Options {\n translucent?: boolean;\n shouldTranslateYReset?: boolean;\n}\n\nexport interface CollapsibleAppBar {\n appBarStyle: ViewStyleProp;\n vectorY: Animated.SharedValue<number>;\n onAppBarLayout: OnLayoutCallback;\n onCollapsibleToolbarLayout: OnLayoutCallback;\n onScroll: OnScroll;\n onScrollViewChanged: (index: number) => void;\n scrollContentInsets: ContentInsets;\n}\n\nconst defaultOptions: Required<Options> = {\n translucent: false,\n shouldTranslateYReset: false,\n};\n\nconst ANIMATION_DURATION_MILLIS = 100;\n\nconst SUPPORTS_DRAG_DETECTION = Platform.OS !== 'web';\n\n\nfunction useLargerValueOfLastTwoValues(value: number) {\n const refLatestTwoValues = useRef([0, 0]);\n\n refLatestTwoValues.current.shift();\n refLatestTwoValues.current.push(value);\n\n return Math.max(...refLatestTwoValues.current);\n}\n\n\nexport default function useUnstableCollapsibleAppBar(userOptions: Options = defaultOptions): CollapsibleAppBar {\n const {\n translucent,\n shouldTranslateYReset,\n }: Required<Options> = {\n ...defaultOptions,\n ...userOptions,\n };\n\n const styles = useAppbarStyles();\n\n const safeAreaInsets = useSafeAreaInsets();\n\n const [appBarHeight, onAppBarLayout] = useHeight();\n const appBarMaxHeight = useLargerValueOfLastTwoValues(appBarHeight);\n const [collapsibleToolbarHeight, onCollapsibleToolbarLayout] = useHeight();\n\n const maxTranslateY = Animated.useDerivedValue(() => -collapsibleToolbarHeight);\n\n const translateY = Animated.useSharedValue<number>(0);\n const lastTranslateY = Animated.useSharedValue<number>(0);\n const lastOffsetY = Animated.useSharedValue<number>(0);\n const prevOffsetY = Animated.useSharedValue<number>(0);\n const overlapped = Animated.useSharedValue<boolean>(false);\n const vectorY = Animated.useSharedValue<number>(0);\n\n const elevationStyle = useElevationStyle(4);\n const animatedStyle = Animated.useAnimatedStyle(() => {\n return Platform.OS === 'web' ? ({\n transform: [{ translateY: translateY.value }],\n boxShadow: overlapped.value ? elevationStyle?.boxShadow : 0,\n }) : ({\n transform: [{ translateY: translateY.value }],\n elevation: overlapped.value ? elevationStyle?.elevation : 0,\n shadowColor: elevationStyle?.shadowColor,\n shadowOffset: elevationStyle?.shadowOffset,\n shadowRadius: elevationStyle?.shadowRadius,\n shadowOpacity: overlapped.value ? elevationStyle?.shadowOpacity : 0,\n });\n });\n\n const indexRef = React.useRef<number>(0);\n const offsetsRef = React.useRef<Array<number>>([]);\n\n const onScrollViewChanged = (nextIndex: number) => {\n const prevIndex = indexRef.current;\n if (prevIndex === nextIndex) {\n if (shouldTranslateYReset) {\n translateY.value = Animated.withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n\n vectorY.value = 0;\n offsetsRef.current = [];\n overlapped.value = false;\n }\n\n return;\n }\n\n offsetsRef.current[prevIndex] = lastOffsetY.value;\n\n const savedOffsetY = offsetsRef.current[nextIndex] ?? 0;\n lastOffsetY.value = savedOffsetY;\n\n indexRef.current = nextIndex;\n\n // Determine whether to overlap every time index is changed.\n overlapped.value = savedOffsetY > 0;\n\n // If next ScrollView's offset is too short, expand app bar.\n if (translateY.value < 0 && savedOffsetY < appBarHeight) {\n translateY.value = Animated.withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n\n vectorY.value = 0;\n }\n };\n\n const scrollHandler = Animated.useAnimatedScrollHandler({\n onBeginDrag: () => {\n lastTranslateY.value = translateY.value;\n },\n onMomentumBegin: () => {\n lastTranslateY.value = translateY.value;\n },\n onScroll: (event) => {\n const offsetY = event.contentOffset.y;\n\n const ty = translateY.value;\n const maxTy = maxTranslateY.value;\n\n const deltaY = offsetY - prevOffsetY.value;\n vectorY.value = (vectorY.value * deltaY >= 0 && offsetY > 0) ? vectorY.value + deltaY : deltaY;\n prevOffsetY.value = offsetY;\n\n if (SUPPORTS_DRAG_DETECTION) {\n const dy = offsetY - lastOffsetY.value;\n\n translateY.value = offsetY <= 0 ? 0 : Math.min(Math.max(lastTranslateY.value - dy, maxTy), 0);\n\n overlapped.value = offsetY + translateY.value > 0;\n } else {\n if (offsetY > -maxTy) {\n if (ty === 0) {\n translateY.value = Animated.withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n } else {\n if (ty === maxTy) {\n translateY.value = Animated.withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n }\n\n overlapped.value = offsetY > 0;\n\n lastOffsetY.value = offsetY;\n }\n },\n onEndDrag: (event) => {\n lastOffsetY.value = event.contentOffset.y;\n },\n onMomentumEnd: (event) => {\n const offsetY = event.contentOffset.y;\n\n lastOffsetY.value = offsetY;\n\n const ty = translateY.value;\n const maxTy = maxTranslateY.value;\n\n // If toolbar is already positioned on edge, do nothing.\n if (ty <= maxTy || ty >= 0) {\n return;\n }\n\n const threshold = maxTy * 0.5;\n\n const nextTranslateY = (ty > threshold || offsetY < appBarHeight) ? 0 : maxTy;\n\n overlapped.value = offsetY + nextTranslateY > 0;\n\n translateY.value = Animated.withTiming(nextTranslateY, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n },\n });\n\n const hasCollapsible = collapsibleToolbarHeight > 0;\n\n const appBarStyle = [\n animatedStyle,\n translucent ? { paddingTop: safeAreaInsets.top } : undefined,\n hasCollapsible ? styles.floating : undefined,\n ];\n\n return {\n appBarStyle,\n vectorY,\n onAppBarLayout,\n onCollapsibleToolbarLayout,\n onScroll: scrollHandler,\n onScrollViewChanged,\n scrollContentInsets: { top: hasCollapsible ? appBarMaxHeight : 0 },\n };\n};\n"]}
1
+ {"version":3,"names":["useCallback","useRef","Platform","useAnimatedScrollHandler","useAnimatedStyle","useDerivedValue","useSharedValue","withTiming","useSafeAreaInsets","useAppbarStyles","useElevationStyle","useHeight","defaultOptions","shouldTranslateYReset","ANIMATION_DURATION_MILLIS","SUPPORTS_DRAG_DETECTION","OS","useLargerValueOfLastTwoValues","value","refLatestTwoValues","current","shift","push","Math","max","useUnstableCollapsibleAppBar","userOptions","styles","safeAreaInsets","appBarHeight","onAppBarLayout","appBarMaxHeight","collapsibleToolbarHeight","onCollapsibleToolbarLayout","maxTranslateY","translateY","lastTranslateY","lastOffsetY","prevOffsetY","overlapped","vectorY","elevationStyle","animatedStyle","transform","boxShadow","elevation","shadowColor","shadowOffset","shadowRadius","shadowOpacity","indexRef","offsetsRef","onScrollViewChanged","nextIndex","prevIndex","duration","savedOffsetY","scrollHandler","onBeginDrag","onMomentumBegin","onScroll","event","offsetY","contentOffset","y","ty","maxTy","deltaY","dy","min","onEndDrag","onMomentumEnd","threshold","nextTranslateY","hasCollapsible","appBarStyle","paddingTop","top","floating","undefined","scrollContentInsets"],"sources":["useUnstableCollapsibleAppBar.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\nimport { Falsy, Platform, RegisteredStyle, ScrollViewProps, ViewProps, ViewStyle } from 'react-native';\nimport type { SharedValue } from 'react-native-reanimated';\nimport {\n useAnimatedScrollHandler,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport useAppbarStyles from './useAppbarStyles';\nimport useElevationStyle from './useElevationStyle';\nimport useHeight from './useHeight';\n\ntype WebOnlyStyle = { boxShadow: any };\n\ntype ViewStyleProp = Array<ViewStyle | RegisteredStyle<ViewStyle> | WebOnlyStyle | Falsy>;\n\ntype OnScroll = ScrollViewProps['onScroll'];\n\ntype OnLayoutCallback = ViewProps['onLayout'];\n\nexport interface ContentInsets {\n top?: number;\n bottom?: number;\n left?: number;\n right?: number;\n}\n\nexport interface Options {\n shouldTranslateYReset?: boolean;\n}\n\nexport interface CollapsibleAppBar {\n appBarStyle: ViewStyleProp;\n vectorY: SharedValue<number>;\n onAppBarLayout: OnLayoutCallback;\n onCollapsibleToolbarLayout: OnLayoutCallback;\n onScroll: OnScroll;\n onScrollViewChanged: (index: number) => void;\n scrollContentInsets: ContentInsets;\n}\n\nconst defaultOptions: Required<Options> = {\n shouldTranslateYReset: false,\n};\n\nconst ANIMATION_DURATION_MILLIS = 100;\n\nconst SUPPORTS_DRAG_DETECTION = Platform.OS !== 'web';\n\nfunction useLargerValueOfLastTwoValues(value: number) {\n const refLatestTwoValues = useRef([0, 0]);\n\n refLatestTwoValues.current.shift();\n refLatestTwoValues.current.push(value);\n\n return Math.max(...refLatestTwoValues.current);\n}\n\nexport default function useUnstableCollapsibleAppBar(userOptions: Options = defaultOptions): CollapsibleAppBar {\n const { shouldTranslateYReset }: Required<Options> = {\n ...defaultOptions,\n ...userOptions,\n };\n\n const styles = useAppbarStyles();\n\n const safeAreaInsets = useSafeAreaInsets();\n\n const [appBarHeight, onAppBarLayout] = useHeight();\n const appBarMaxHeight = useLargerValueOfLastTwoValues(appBarHeight);\n const [collapsibleToolbarHeight, onCollapsibleToolbarLayout] = useHeight();\n\n const maxTranslateY = useDerivedValue(() => -collapsibleToolbarHeight, [collapsibleToolbarHeight]);\n\n const translateY = useSharedValue<number>(0);\n const lastTranslateY = useSharedValue<number>(0);\n const lastOffsetY = useSharedValue<number>(0);\n const prevOffsetY = useSharedValue<number>(0);\n const overlapped = useSharedValue<boolean>(false);\n const vectorY = useSharedValue<number>(0);\n\n const elevationStyle = useElevationStyle(4);\n const animatedStyle = useAnimatedStyle(() => {\n const transform = [{ translateY: translateY.value }];\n\n if (Platform.OS === 'web') {\n return {\n transform,\n boxShadow: overlapped.value ? elevationStyle?.boxShadow : 0,\n };\n }\n if (Platform.OS === 'android') {\n return {\n transform,\n elevation: overlapped.value ? elevationStyle?.elevation : 0,\n };\n }\n if (Platform.OS === 'ios') {\n return {\n transform,\n shadowColor: elevationStyle?.shadowColor,\n shadowOffset: elevationStyle?.shadowOffset,\n shadowRadius: elevationStyle?.shadowRadius,\n shadowOpacity: overlapped.value ? elevationStyle?.shadowOpacity : 0,\n };\n }\n return {};\n }, [\n /**\n * FIXME: Consider add `elevationStyle` to dependencies.\n */\n ]);\n\n const indexRef = useRef<number>(0);\n const offsetsRef = useRef<Array<number>>([]);\n\n const onScrollViewChanged = useCallback((nextIndex: number) => {\n const prevIndex = indexRef.current;\n if (prevIndex === nextIndex) {\n if (shouldTranslateYReset) {\n translateY.value = withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n\n vectorY.value = 0;\n offsetsRef.current = [];\n overlapped.value = false;\n }\n\n return;\n }\n\n offsetsRef.current[prevIndex] = lastOffsetY.value;\n\n const savedOffsetY = offsetsRef.current[nextIndex] ?? 0;\n lastOffsetY.value = savedOffsetY;\n\n indexRef.current = nextIndex;\n\n // Determine whether to overlap every time index is changed.\n overlapped.value = savedOffsetY > 0;\n\n // If next ScrollView's offset is too short, expand app bar.\n if (translateY.value < 0 && savedOffsetY < appBarHeight) {\n translateY.value = withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n\n vectorY.value = 0;\n }\n }, [appBarHeight]);\n\n const scrollHandler = useAnimatedScrollHandler({\n onBeginDrag: () => {\n lastTranslateY.value = translateY.value;\n },\n onMomentumBegin: () => {\n lastTranslateY.value = translateY.value;\n },\n onScroll: (event) => {\n const offsetY = event.contentOffset.y;\n\n const ty = translateY.value;\n const maxTy = maxTranslateY.value;\n\n const deltaY = offsetY - prevOffsetY.value;\n vectorY.value = (vectorY.value * deltaY >= 0 && offsetY > 0) ? vectorY.value + deltaY : deltaY;\n prevOffsetY.value = offsetY;\n\n if (SUPPORTS_DRAG_DETECTION) {\n const dy = offsetY - lastOffsetY.value;\n\n translateY.value = offsetY <= 0 ? 0 : Math.min(Math.max(lastTranslateY.value - dy, maxTy), 0);\n\n overlapped.value = offsetY + translateY.value > 0;\n } else {\n if (offsetY > -maxTy) {\n if (ty === 0) {\n translateY.value = withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n } else {\n if (ty === maxTy) {\n translateY.value = withTiming(0, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n }\n }\n\n overlapped.value = offsetY > 0;\n\n lastOffsetY.value = offsetY;\n }\n },\n onEndDrag: (event) => {\n lastOffsetY.value = event.contentOffset.y;\n },\n onMomentumEnd: (event) => {\n const offsetY = event.contentOffset.y;\n\n lastOffsetY.value = offsetY;\n\n const ty = translateY.value;\n const maxTy = maxTranslateY.value;\n\n // If toolbar is already positioned on edge, do nothing.\n if (ty <= maxTy || ty >= 0) {\n return;\n }\n\n const threshold = maxTy * 0.5;\n\n const nextTranslateY = (ty > threshold || offsetY < appBarHeight) ? 0 : maxTy;\n\n overlapped.value = offsetY + nextTranslateY > 0;\n\n translateY.value = withTiming(nextTranslateY, {\n duration: ANIMATION_DURATION_MILLIS,\n });\n },\n }, [appBarHeight]);\n\n const hasCollapsible = collapsibleToolbarHeight > 0;\n\n const appBarStyle = [\n animatedStyle,\n { paddingTop: safeAreaInsets.top },\n hasCollapsible ? styles.floating : undefined,\n ];\n\n return {\n appBarStyle,\n vectorY,\n onAppBarLayout,\n onCollapsibleToolbarLayout,\n onScroll: scrollHandler,\n onScrollViewChanged,\n scrollContentInsets: { top: hasCollapsible ? appBarMaxHeight : 0 },\n };\n};\n"],"mappings":"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"}
@@ -1,16 +1,18 @@
1
- import Animated from 'react-native-reanimated';
2
- export default function useAnimatedDisplayStyle(vectorY, threshold = 200, defaultDisplay = 'flex') {
3
- const display = Animated.useSharedValue(defaultDisplay);
4
- Animated.useAnimatedReaction(() => vectorY.value, vy => {
1
+ import { useAnimatedReaction, useAnimatedStyle, useSharedValue } from 'react-native-reanimated';
2
+ export default function useAnimatedDisplayStyle(vectorY) {
3
+ let threshold = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;
4
+ let defaultDisplay = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'flex';
5
+ const display = useSharedValue(defaultDisplay);
6
+ useAnimatedReaction(() => vectorY.value, vy => {
5
7
  if (vy >= threshold) {
6
8
  display.value = 'none';
7
9
  } else if (vy < threshold) {
8
10
  display.value = 'flex';
9
11
  }
10
- });
11
- return Animated.useAnimatedStyle(() => ({
12
+ }, [threshold]);
13
+ return useAnimatedStyle(() => ({
12
14
  display: display.value
13
- }));
15
+ }), []);
14
16
  }
15
17
  ;
16
18
  //# sourceMappingURL=useUnstableToggleDisplayStyle.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["useUnstableToggleDisplayStyle.ts"],"names":["Animated","useAnimatedDisplayStyle","vectorY","threshold","defaultDisplay","display","useSharedValue","useAnimatedReaction","value","vy","useAnimatedStyle"],"mappings":"AAAA,OAAOA,QAAP,MAAqB,yBAArB;AAEA,eAAe,SAASC,uBAAT,CACXC,OADW,EAEXC,SAAiB,GAAG,GAFT,EAGXC,cAA+B,GAAG,MAHvB,EAIb;AACE,QAAMC,OAAO,GAAGL,QAAQ,CAACM,cAAT,CAAwBF,cAAxB,CAAhB;AAEAJ,EAAAA,QAAQ,CAACO,mBAAT,CACI,MAAML,OAAO,CAACM,KADlB,EAEKC,EAAD,IAAQ;AACJ,QAAIA,EAAE,IAAIN,SAAV,EAAqB;AACjBE,MAAAA,OAAO,CAACG,KAAR,GAAgB,MAAhB;AACH,KAFD,MAEO,IAAIC,EAAE,GAAGN,SAAT,EAAoB;AACvBE,MAAAA,OAAO,CAACG,KAAR,GAAgB,MAAhB;AACH;AACJ,GARL;AAWA,SAAOR,QAAQ,CAACU,gBAAT,CAA0B,OAAO;AACpCL,IAAAA,OAAO,EAAEA,OAAO,CAACG;AADmB,GAAP,CAA1B,CAAP;AAGH;AAAA","sourcesContent":["import Animated from 'react-native-reanimated';\n\nexport default function useAnimatedDisplayStyle(\n vectorY: Animated.SharedValue<number>,\n threshold: number = 200,\n defaultDisplay: 'flex' | 'none' = 'flex',\n) {\n const display = Animated.useSharedValue(defaultDisplay);\n\n Animated.useAnimatedReaction(\n () => vectorY.value,\n (vy) => {\n if (vy >= threshold) {\n display.value = 'none';\n } else if (vy < threshold) {\n display.value = 'flex';\n }\n },\n );\n\n return Animated.useAnimatedStyle(() => ({\n display: display.value,\n }));\n};\n"]}
1
+ {"version":3,"names":["useAnimatedReaction","useAnimatedStyle","useSharedValue","useAnimatedDisplayStyle","vectorY","threshold","defaultDisplay","display","value","vy"],"sources":["useUnstableToggleDisplayStyle.ts"],"sourcesContent":["import type { SharedValue } from 'react-native-reanimated';\nimport { useAnimatedReaction, useAnimatedStyle, useSharedValue } from 'react-native-reanimated';\n\nexport default function useAnimatedDisplayStyle(\n vectorY: SharedValue<number>,\n threshold: number = 200,\n defaultDisplay: 'flex' | 'none' = 'flex',\n) {\n const display = useSharedValue(defaultDisplay);\n\n useAnimatedReaction(\n () => vectorY.value,\n (vy) => {\n if (vy >= threshold) {\n display.value = 'none';\n } else if (vy < threshold) {\n display.value = 'flex';\n }\n },\n [threshold],\n );\n\n return useAnimatedStyle(() => ({\n display: display.value,\n }), []);\n};\n"],"mappings":"AACA,SAASA,mBAAT,EAA8BC,gBAA9B,EAAgDC,cAAhD,QAAsE,yBAAtE;AAEA,eAAe,SAASC,uBAAT,CACXC,OADW,EAIb;EAAA,IAFEC,SAEF,uEAFsB,GAEtB;EAAA,IADEC,cACF,uEADoC,MACpC;EACE,MAAMC,OAAO,GAAGL,cAAc,CAACI,cAAD,CAA9B;EAEAN,mBAAmB,CACf,MAAMI,OAAO,CAACI,KADC,EAEdC,EAAD,IAAQ;IACJ,IAAIA,EAAE,IAAIJ,SAAV,EAAqB;MACjBE,OAAO,CAACC,KAAR,GAAgB,MAAhB;IACH,CAFD,MAEO,IAAIC,EAAE,GAAGJ,SAAT,EAAoB;MACvBE,OAAO,CAACC,KAAR,GAAgB,MAAhB;IACH;EACJ,CARc,EASf,CAACH,SAAD,CATe,CAAnB;EAYA,OAAOJ,gBAAgB,CAAC,OAAO;IAC3BM,OAAO,EAAEA,OAAO,CAACC;EADU,CAAP,CAAD,EAEnB,EAFmB,CAAvB;AAGH;AAAA"}
@@ -12,5 +12,7 @@ export { default as ComicViewer } from './ComicViewer';
12
12
  export * from './ComicViewer';
13
13
  export { default as StatusBarProvider, useStatusBarContext } from './StatusBarProvider';
14
14
  export * from './StatusBarProvider';
15
+ export { default as ViewabilityTrackerView } from './ViewabilityTrackerView';
16
+ export * from './ViewabilityTrackerView';
15
17
  export * from './hooks';
16
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["default","BottomSheet","Carousel","DateTimePicker","FlipCard","ViewPager","ComicViewer","StatusBarProvider","useStatusBarContext"],"mappings":"AAAA,SAASA,OAAO,IAAIC,WAApB,QAAuC,eAAvC;AACA,cAAc,eAAd;AAEA,SAASD,OAAO,IAAIE,QAApB,QAAoC,YAApC;AACA,cAAc,YAAd;AAEA,SAASF,OAAO,IAAIG,cAApB,QAA0C,kBAA1C;AACA,cAAc,kBAAd;AAEA,SAASH,OAAO,IAAII,QAApB,QAAoC,YAApC;AACA,cAAc,YAAd;AAEA,SAASJ,OAAO,IAAIK,SAApB,QAAqC,aAArC;AACA,cAAc,aAAd;AAEA,SAASL,OAAO,IAAIM,WAApB,QAAuC,eAAvC;AACA,cAAc,eAAd;AAEA,SAASN,OAAO,IAAIO,iBAApB,EAAuCC,mBAAvC,QAAkE,qBAAlE;AACA,cAAc,qBAAd;AAEA,cAAc,SAAd","sourcesContent":["export { default as BottomSheet } from './BottomSheet';\nexport * from './BottomSheet';\n\nexport { default as Carousel } from './Carousel';\nexport * from './Carousel';\n\nexport { default as DateTimePicker } from './DateTimePicker';\nexport * from './DateTimePicker';\n\nexport { default as FlipCard } from './FlipCard';\nexport * from './FlipCard';\n\nexport { default as ViewPager } from './ViewPager';\nexport * from './ViewPager';\n\nexport { default as ComicViewer } from './ComicViewer';\nexport * from './ComicViewer';\n\nexport { default as StatusBarProvider, useStatusBarContext } from './StatusBarProvider';\nexport * from './StatusBarProvider';\n\nexport * from './hooks';\n"]}
1
+ {"version":3,"names":["default","BottomSheet","Carousel","DateTimePicker","FlipCard","ViewPager","ComicViewer","StatusBarProvider","useStatusBarContext","ViewabilityTrackerView"],"sources":["index.ts"],"sourcesContent":["export { default as BottomSheet } from './BottomSheet';\nexport * from './BottomSheet';\n\nexport { default as Carousel } from './Carousel';\nexport * from './Carousel';\n\nexport { default as DateTimePicker } from './DateTimePicker';\nexport * from './DateTimePicker';\n\nexport { default as FlipCard } from './FlipCard';\nexport * from './FlipCard';\n\nexport { default as ViewPager } from './ViewPager';\nexport * from './ViewPager';\n\nexport { default as ComicViewer } from './ComicViewer';\nexport * from './ComicViewer';\n\nexport { default as StatusBarProvider, useStatusBarContext } from './StatusBarProvider';\nexport * from './StatusBarProvider';\n\nexport { default as ViewabilityTrackerView } from './ViewabilityTrackerView';\nexport * from './ViewabilityTrackerView';\n\nexport * from './hooks';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,WAApB,QAAuC,eAAvC;AACA,cAAc,eAAd;AAEA,SAASD,OAAO,IAAIE,QAApB,QAAoC,YAApC;AACA,cAAc,YAAd;AAEA,SAASF,OAAO,IAAIG,cAApB,QAA0C,kBAA1C;AACA,cAAc,kBAAd;AAEA,SAASH,OAAO,IAAII,QAApB,QAAoC,YAApC;AACA,cAAc,YAAd;AAEA,SAASJ,OAAO,IAAIK,SAApB,QAAqC,aAArC;AACA,cAAc,aAAd;AAEA,SAASL,OAAO,IAAIM,WAApB,QAAuC,eAAvC;AACA,cAAc,eAAd;AAEA,SAASN,OAAO,IAAIO,iBAApB,EAAuCC,mBAAvC,QAAkE,qBAAlE;AACA,cAAc,qBAAd;AAEA,SAASR,OAAO,IAAIS,sBAApB,QAAkD,0BAAlD;AACA,cAAc,0BAAd;AAEA,cAAc,SAAd"}
@@ -10,10 +10,25 @@ export default interface BottomSheetProps extends ComponentProps<{
10
10
  * BottomSheet children, usually the included sub-components.
11
11
  */
12
12
  children?: React.ReactNode;
13
+ /**
14
+ * Enable dynamic sizing for content size.
15
+ * @default true
16
+ */
17
+ enableDynamicSizing?: boolean;
18
+ /**
19
+ * Area to be fixed on the top of the bottom sheet.
20
+ */
21
+ header?: React.ReactNode;
13
22
  /**
14
23
  * Snap index. You could also provide -1 to bottom sheet in closed state.
15
24
  */
16
25
  index: number;
26
+ /**
27
+ * Maximum height(normalized value) of dialog
28
+ * ex. 30% => 0.3 / 90% => 0.9
29
+ * @default 0.9
30
+ */
31
+ maxHeightNormalizedRatio?: number;
17
32
  /**
18
33
  * Callback fired when the index is changed.
19
34
  * Important! Use memoized value.
@@ -22,7 +37,9 @@ export default interface BottomSheetProps extends ComponentProps<{
22
37
  /**
23
38
  * Points for the bottom sheet to snap to, points should be sorted from bottom to top.
24
39
  * Important! Use memoized value.
40
+ * Only number type or string type(~% format) can be used.
41
+ * @default []
25
42
  */
26
- snapPoints: Array<number>;
43
+ snapPoints?: Array<number | string>;
27
44
  }> {
28
45
  }
@@ -0,0 +1,12 @@
1
+ interface UseDynamicSnapPointsParams {
2
+ enableDynamicSizing: boolean;
3
+ maxHeightNormalizedRatio: number;
4
+ snapPoints: (number | string)[];
5
+ }
6
+ interface UseDynamicSnapPointsReturns {
7
+ convertedSnapPoints: number[];
8
+ handleContentSizeChange: (w: number, h: number) => void;
9
+ highestSnapPoint: number;
10
+ }
11
+ export default function useDynamicSnapPoints(params: UseDynamicSnapPointsParams): UseDynamicSnapPointsReturns;
12
+ export {};
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type CarouselProps from './CarouselProps';
3
+ import type { CarouselInstance } from './types';
4
+ declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<Pick<CarouselProps<any>, "style" | "data" | "scrollEnabled" | "autoplay" | "autoplayInterval" | "createItemStyle" | "createScrollAnimation" | "disableSmartAutoplay" | "initialIndex" | "itemHeight" | "itemWidth" | "loop" | "onIndexChange" | "renderItem" | "windowSize"> & React.RefAttributes<CarouselInstance>>>;
5
+ export default _default;