@fountain-ui/lab 2.0.0-beta.9 → 3.0.0-alpha.10

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 (480) hide show
  1. package/build/commonjs/BottomSheet/BottomSheetNative.js +97 -30
  2. package/build/commonjs/BottomSheet/BottomSheetNative.js.map +1 -1
  3. package/build/commonjs/BottomSheet/BottomSheetProps.js.map +1 -1
  4. package/build/commonjs/BottomSheet/BottomSheetWeb.js +64 -17
  5. package/build/commonjs/BottomSheet/BottomSheetWeb.js.map +1 -1
  6. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js +79 -0
  7. package/build/commonjs/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  8. package/build/commonjs/BottomSheet/useDynamicSnapPoints.native.js +22 -0
  9. package/build/commonjs/BottomSheet/useDynamicSnapPoints.native.js.map +1 -0
  10. package/build/commonjs/Carousel/Carousel.js +130 -0
  11. package/build/commonjs/Carousel/Carousel.js.map +1 -0
  12. package/build/commonjs/Carousel/CarouselProps.js.map +1 -1
  13. package/build/commonjs/Carousel/animation/animationUtils.js +9 -0
  14. package/build/commonjs/Carousel/animation/animationUtils.js.map +1 -0
  15. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js +15 -0
  16. package/build/commonjs/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  17. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js +26 -0
  18. package/build/commonjs/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  19. package/build/commonjs/Carousel/animation/index.js +40 -0
  20. package/build/commonjs/Carousel/animation/index.js.map +1 -0
  21. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js +27 -0
  22. package/build/commonjs/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  23. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js +65 -0
  24. package/build/commonjs/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  25. package/build/commonjs/Carousel/components/InternalContext.js +29 -0
  26. package/build/commonjs/Carousel/components/InternalContext.js.map +1 -0
  27. package/build/commonjs/Carousel/components/ItemView.js +66 -0
  28. package/build/commonjs/Carousel/components/ItemView.js.map +1 -0
  29. package/build/commonjs/Carousel/components/RootView.js +86 -0
  30. package/build/commonjs/Carousel/components/RootView.js.map +1 -0
  31. package/build/commonjs/Carousel/components/ScrollViewGesture.js +84 -0
  32. package/build/commonjs/Carousel/components/ScrollViewGesture.js.map +1 -0
  33. package/build/commonjs/Carousel/components/index.js +40 -0
  34. package/build/commonjs/Carousel/components/index.js.map +1 -0
  35. package/build/commonjs/Carousel/components/useItemInterpolation.js +65 -0
  36. package/build/commonjs/Carousel/components/useItemInterpolation.js.map +1 -0
  37. package/build/commonjs/Carousel/hooks/index.js +48 -0
  38. package/build/commonjs/Carousel/hooks/index.js.map +1 -0
  39. package/build/commonjs/Carousel/hooks/useAutoplayController.js +58 -0
  40. package/build/commonjs/Carousel/hooks/useAutoplayController.js.map +1 -0
  41. package/build/commonjs/Carousel/hooks/useIndexController.js +55 -0
  42. package/build/commonjs/Carousel/hooks/useIndexController.js.map +1 -0
  43. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js +95 -0
  44. package/build/commonjs/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  45. package/build/commonjs/Carousel/hooks/useLoopedData.js +33 -0
  46. package/build/commonjs/Carousel/hooks/useLoopedData.js.map +1 -0
  47. package/build/commonjs/Carousel/hooks/usePagingAnimator.js +202 -0
  48. package/build/commonjs/Carousel/hooks/usePagingAnimator.js.map +1 -0
  49. package/build/commonjs/Carousel/index.js +16 -2
  50. package/build/commonjs/Carousel/index.js.map +1 -1
  51. package/build/commonjs/Carousel/tick.js +16 -0
  52. package/build/commonjs/Carousel/tick.js.map +1 -0
  53. package/build/commonjs/Carousel/types.js +8 -0
  54. package/build/commonjs/Carousel/types.js.map +1 -0
  55. package/build/commonjs/ComicViewer/ComicViewer.js +230 -92
  56. package/build/commonjs/ComicViewer/ComicViewer.js.map +1 -1
  57. package/build/commonjs/ComicViewer/ComicViewerProps.js.map +1 -1
  58. package/build/commonjs/ComicViewer/EncodedTile.js +10 -0
  59. package/build/commonjs/ComicViewer/EncodedTile.js.map +1 -0
  60. package/build/commonjs/ComicViewer/FastScroll.js +175 -0
  61. package/build/commonjs/ComicViewer/FastScroll.js.map +1 -0
  62. package/build/commonjs/ComicViewer/{ComicViewerItemProps.js → FastScrollProps.js} +1 -1
  63. package/build/commonjs/ComicViewer/FastScrollProps.js.map +1 -0
  64. package/build/commonjs/ComicViewer/ReloadButton.js +48 -0
  65. package/build/commonjs/ComicViewer/ReloadButton.js.map +1 -0
  66. package/build/commonjs/ComicViewer/ViewerItem.js +53 -59
  67. package/build/commonjs/ComicViewer/ViewerItem.js.map +1 -1
  68. package/build/commonjs/ComicViewer/index.js.map +1 -1
  69. package/build/commonjs/ComicViewer/util.js +27 -0
  70. package/build/commonjs/ComicViewer/util.js.map +1 -0
  71. package/build/commonjs/DateTimePicker/DateTimePicker.js +12 -3
  72. package/build/commonjs/DateTimePicker/DateTimePicker.js.map +1 -1
  73. package/build/commonjs/DateTimePicker/YearPicker.js +2 -2
  74. package/build/commonjs/DateTimePicker/YearPicker.js.map +1 -1
  75. package/build/commonjs/StatusBarProvider/Provider.js.map +1 -1
  76. package/build/commonjs/StatusBarProvider/StatusBarProvider.js +111 -2
  77. package/build/commonjs/StatusBarProvider/StatusBarProvider.js.map +1 -1
  78. package/build/commonjs/ViewPager/FluxContext.js +13 -0
  79. package/build/commonjs/ViewPager/FluxContext.js.map +1 -0
  80. package/build/commonjs/ViewPager/InternalContext.js +17 -0
  81. package/build/commonjs/ViewPager/InternalContext.js.map +1 -0
  82. package/build/commonjs/ViewPager/PageStateContext.js +14 -0
  83. package/build/commonjs/ViewPager/PageStateContext.js.map +1 -0
  84. package/build/commonjs/ViewPager/ViewPager.js +81 -0
  85. package/build/commonjs/ViewPager/ViewPager.js.map +1 -0
  86. package/build/commonjs/ViewPager/ViewPager.native.js +152 -0
  87. package/build/commonjs/ViewPager/ViewPager.native.js.map +1 -0
  88. package/build/commonjs/ViewPager/ViewPagerProps.js.map +1 -1
  89. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js +122 -0
  90. package/build/commonjs/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  91. package/build/commonjs/ViewPager/components/FluxStoreProvider.js +37 -0
  92. package/build/commonjs/ViewPager/components/FluxStoreProvider.js.map +1 -0
  93. package/build/commonjs/ViewPager/components/index.js +24 -0
  94. package/build/commonjs/ViewPager/components/index.js.map +1 -0
  95. package/build/commonjs/ViewPager/hooks/index.js +64 -0
  96. package/build/commonjs/ViewPager/hooks/index.js.map +1 -0
  97. package/build/commonjs/ViewPager/hooks/useDispatch.js +22 -0
  98. package/build/commonjs/ViewPager/hooks/useDispatch.js.map +1 -0
  99. package/build/commonjs/ViewPager/hooks/useEagerState.js +24 -0
  100. package/build/commonjs/ViewPager/hooks/useEagerState.js.map +1 -0
  101. package/build/commonjs/ViewPager/hooks/useForceRender.js +16 -0
  102. package/build/commonjs/ViewPager/hooks/useForceRender.js.map +1 -0
  103. package/build/commonjs/ViewPager/hooks/useLazyState.js +43 -0
  104. package/build/commonjs/ViewPager/hooks/useLazyState.js.map +1 -0
  105. package/build/commonjs/ViewPager/hooks/usePageStore.js +35 -0
  106. package/build/commonjs/ViewPager/hooks/usePageStore.js.map +1 -0
  107. package/build/commonjs/ViewPager/hooks/useStore.js +26 -0
  108. package/build/commonjs/ViewPager/hooks/useStore.js.map +1 -0
  109. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js +19 -0
  110. package/build/commonjs/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  111. package/build/commonjs/ViewPager/index.js +42 -2
  112. package/build/commonjs/ViewPager/index.js.map +1 -1
  113. package/build/commonjs/ViewPager/types.js +2 -0
  114. package/build/commonjs/ViewPager/types.js.map +1 -0
  115. package/build/commonjs/ViewPager/utils.js +12 -45
  116. package/build/commonjs/ViewPager/utils.js.map +1 -1
  117. package/build/commonjs/ViewabilityTrackerView/Viewability.js +2 -0
  118. package/build/commonjs/ViewabilityTrackerView/Viewability.js.map +1 -0
  119. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js +45 -0
  120. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  121. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  122. package/build/commonjs/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  123. package/build/commonjs/{Carousel/index.native.js → ViewabilityTrackerView/index.js} +3 -3
  124. package/build/commonjs/ViewabilityTrackerView/index.js.map +1 -0
  125. package/build/commonjs/ViewabilityTrackerView/measureViewability.js +42 -0
  126. package/build/commonjs/ViewabilityTrackerView/measureViewability.js.map +1 -0
  127. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js +88 -0
  128. package/build/commonjs/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  129. package/build/commonjs/hooks/index.js +16 -0
  130. package/build/commonjs/hooks/index.js.map +1 -1
  131. package/build/commonjs/hooks/useDeferredExecutor.js +45 -0
  132. package/build/commonjs/hooks/useDeferredExecutor.js.map +1 -0
  133. package/build/commonjs/hooks/useHeight.js +4 -4
  134. package/build/commonjs/hooks/useHeight.js.map +1 -1
  135. package/build/commonjs/hooks/useIsMounted.js +22 -0
  136. package/build/commonjs/hooks/useIsMounted.js.map +1 -0
  137. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js +3 -5
  138. package/build/commonjs/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  139. package/build/commonjs/index.js +22 -1
  140. package/build/commonjs/index.js.map +1 -1
  141. package/build/module/BottomSheet/BottomSheetNative.js +91 -25
  142. package/build/module/BottomSheet/BottomSheetNative.js.map +1 -1
  143. package/build/module/BottomSheet/BottomSheetProps.js.map +1 -1
  144. package/build/module/BottomSheet/BottomSheetWeb.js +59 -18
  145. package/build/module/BottomSheet/BottomSheetWeb.js.map +1 -1
  146. package/build/module/BottomSheet/useDynamicSnapPoints.js +65 -0
  147. package/build/module/BottomSheet/useDynamicSnapPoints.js.map +1 -0
  148. package/build/module/BottomSheet/useDynamicSnapPoints.native.js +14 -0
  149. package/build/module/BottomSheet/useDynamicSnapPoints.native.js.map +1 -0
  150. package/build/module/Carousel/Carousel.js +109 -0
  151. package/build/module/Carousel/Carousel.js.map +1 -0
  152. package/build/module/Carousel/CarouselProps.js.map +1 -1
  153. package/build/module/Carousel/animation/animationUtils.js +2 -0
  154. package/build/module/Carousel/animation/animationUtils.js.map +1 -0
  155. package/build/module/Carousel/animation/createDefaultItemStyle.js +3 -0
  156. package/build/module/Carousel/animation/createDefaultItemStyle.js.map +1 -0
  157. package/build/module/Carousel/animation/createDefaultScrollAnimation.js +12 -0
  158. package/build/module/Carousel/animation/createDefaultScrollAnimation.js.map +1 -0
  159. package/build/module/Carousel/animation/index.js +5 -0
  160. package/build/module/Carousel/animation/index.js.map +1 -0
  161. package/build/module/Carousel/animation/normalItemStyleFactory.js +18 -0
  162. package/build/module/Carousel/animation/normalItemStyleFactory.js.map +1 -0
  163. package/build/module/Carousel/animation/parallaxItemStyleFactory.js +55 -0
  164. package/build/module/Carousel/animation/parallaxItemStyleFactory.js.map +1 -0
  165. package/build/module/Carousel/components/InternalContext.js +19 -0
  166. package/build/module/Carousel/components/InternalContext.js.map +1 -0
  167. package/build/module/Carousel/components/ItemView.js +46 -0
  168. package/build/module/Carousel/components/ItemView.js.map +1 -0
  169. package/build/module/Carousel/components/RootView.js +65 -0
  170. package/build/module/Carousel/components/RootView.js.map +1 -0
  171. package/build/module/Carousel/components/ScrollViewGesture.js +69 -0
  172. package/build/module/Carousel/components/ScrollViewGesture.js.map +1 -0
  173. package/build/module/Carousel/components/index.js +5 -0
  174. package/build/module/Carousel/components/index.js.map +1 -0
  175. package/build/module/Carousel/components/useItemInterpolation.js +51 -0
  176. package/build/module/Carousel/components/useItemInterpolation.js.map +1 -0
  177. package/build/module/Carousel/hooks/index.js +6 -0
  178. package/build/module/Carousel/hooks/index.js.map +1 -0
  179. package/build/module/Carousel/hooks/useAutoplayController.js +48 -0
  180. package/build/module/Carousel/hooks/useAutoplayController.js.map +1 -0
  181. package/build/module/Carousel/hooks/useIndexController.js +44 -0
  182. package/build/module/Carousel/hooks/useIndexController.js.map +1 -0
  183. package/build/module/Carousel/hooks/useItemVisibilityStore.js +86 -0
  184. package/build/module/Carousel/hooks/useItemVisibilityStore.js.map +1 -0
  185. package/build/module/Carousel/hooks/useLoopedData.js +24 -0
  186. package/build/module/Carousel/hooks/useLoopedData.js.map +1 -0
  187. package/build/module/Carousel/hooks/usePagingAnimator.js +192 -0
  188. package/build/module/Carousel/hooks/usePagingAnimator.js.map +1 -0
  189. package/build/module/Carousel/index.js +2 -1
  190. package/build/module/Carousel/index.js.map +1 -1
  191. package/build/module/Carousel/tick.js +6 -0
  192. package/build/module/Carousel/tick.js.map +1 -0
  193. package/build/module/Carousel/types.js +4 -0
  194. package/build/module/Carousel/types.js.map +1 -0
  195. package/build/module/ComicViewer/ComicViewer.js +229 -93
  196. package/build/module/ComicViewer/ComicViewer.js.map +1 -1
  197. package/build/module/ComicViewer/ComicViewerProps.js.map +1 -1
  198. package/build/module/ComicViewer/EncodedTile.js +3 -0
  199. package/build/module/ComicViewer/EncodedTile.js.map +1 -0
  200. package/build/module/ComicViewer/FastScroll.js +152 -0
  201. package/build/module/ComicViewer/FastScroll.js.map +1 -0
  202. package/build/module/ComicViewer/FastScrollProps.js +2 -0
  203. package/build/module/ComicViewer/FastScrollProps.js.map +1 -0
  204. package/build/module/ComicViewer/ReloadButton.js +33 -0
  205. package/build/module/ComicViewer/ReloadButton.js.map +1 -0
  206. package/build/module/ComicViewer/ViewerItem.js +53 -60
  207. package/build/module/ComicViewer/ViewerItem.js.map +1 -1
  208. package/build/module/ComicViewer/index.js.map +1 -1
  209. package/build/module/ComicViewer/util.js +15 -0
  210. package/build/module/ComicViewer/util.js.map +1 -0
  211. package/build/module/DateTimePicker/DateTimePicker.js +13 -4
  212. package/build/module/DateTimePicker/DateTimePicker.js.map +1 -1
  213. package/build/module/DateTimePicker/YearPicker.js +2 -2
  214. package/build/module/DateTimePicker/YearPicker.js.map +1 -1
  215. package/build/module/StatusBarProvider/Provider.js.map +1 -1
  216. package/build/module/StatusBarProvider/StatusBarProvider.js +105 -2
  217. package/build/module/StatusBarProvider/StatusBarProvider.js.map +1 -1
  218. package/build/module/ViewPager/FluxContext.js +4 -0
  219. package/build/module/ViewPager/FluxContext.js.map +1 -0
  220. package/build/module/ViewPager/InternalContext.js +7 -0
  221. package/build/module/ViewPager/InternalContext.js.map +1 -0
  222. package/build/module/ViewPager/PageStateContext.js +5 -0
  223. package/build/module/ViewPager/PageStateContext.js.map +1 -0
  224. package/build/module/ViewPager/ViewPager.js +57 -0
  225. package/build/module/ViewPager/ViewPager.js.map +1 -0
  226. package/build/module/ViewPager/ViewPager.native.js +129 -0
  227. package/build/module/ViewPager/ViewPager.native.js.map +1 -0
  228. package/build/module/ViewPager/ViewPagerProps.js.map +1 -1
  229. package/build/module/ViewPager/components/ChildrenMemoizedPage.js +101 -0
  230. package/build/module/ViewPager/components/ChildrenMemoizedPage.js.map +1 -0
  231. package/build/module/ViewPager/components/FluxStoreProvider.js +20 -0
  232. package/build/module/ViewPager/components/FluxStoreProvider.js.map +1 -0
  233. package/build/module/ViewPager/components/index.js +3 -0
  234. package/build/module/ViewPager/components/index.js.map +1 -0
  235. package/build/module/ViewPager/hooks/index.js +8 -0
  236. package/build/module/ViewPager/hooks/index.js.map +1 -0
  237. package/build/module/ViewPager/hooks/useDispatch.js +10 -0
  238. package/build/module/ViewPager/hooks/useDispatch.js.map +1 -0
  239. package/build/module/ViewPager/hooks/useEagerState.js +12 -0
  240. package/build/module/ViewPager/hooks/useEagerState.js.map +1 -0
  241. package/build/module/ViewPager/hooks/useForceRender.js +7 -0
  242. package/build/module/ViewPager/hooks/useForceRender.js.map +1 -0
  243. package/build/module/ViewPager/hooks/useLazyState.js +28 -0
  244. package/build/module/ViewPager/hooks/useLazyState.js.map +1 -0
  245. package/build/module/ViewPager/hooks/usePageStore.js +25 -0
  246. package/build/module/ViewPager/hooks/usePageStore.js.map +1 -0
  247. package/build/module/ViewPager/hooks/useStore.js +14 -0
  248. package/build/module/ViewPager/hooks/useStore.js.map +1 -0
  249. package/build/module/ViewPager/hooks/useViewPagerPageState.js +7 -0
  250. package/build/module/ViewPager/hooks/useViewPagerPageState.js.map +1 -0
  251. package/build/module/ViewPager/index.js +3 -1
  252. package/build/module/ViewPager/index.js.map +1 -1
  253. package/build/module/ViewPager/types.js +2 -0
  254. package/build/module/ViewPager/types.js.map +1 -0
  255. package/build/module/ViewPager/utils.js +6 -34
  256. package/build/module/ViewPager/utils.js.map +1 -1
  257. package/build/module/ViewabilityTrackerView/Viewability.js +2 -0
  258. package/build/module/ViewabilityTrackerView/Viewability.js.map +1 -0
  259. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js +28 -0
  260. package/build/module/ViewabilityTrackerView/ViewabilityTrackerView.js.map +1 -0
  261. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js +2 -0
  262. package/build/module/ViewabilityTrackerView/ViewabilityTrackerViewProps.js.map +1 -0
  263. package/build/module/ViewabilityTrackerView/index.js +2 -0
  264. package/build/module/ViewabilityTrackerView/index.js.map +1 -0
  265. package/build/module/ViewabilityTrackerView/measureViewability.js +34 -0
  266. package/build/module/ViewabilityTrackerView/measureViewability.js.map +1 -0
  267. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js +73 -0
  268. package/build/module/ViewabilityTrackerView/useViewabilityTracker.js.map +1 -0
  269. package/build/module/hooks/index.js +2 -0
  270. package/build/module/hooks/index.js.map +1 -1
  271. package/build/module/hooks/useDeferredExecutor.js +33 -0
  272. package/build/module/hooks/useDeferredExecutor.js.map +1 -0
  273. package/build/module/hooks/useHeight.js +2 -3
  274. package/build/module/hooks/useHeight.js.map +1 -1
  275. package/build/module/hooks/useIsMounted.js +13 -0
  276. package/build/module/hooks/useIsMounted.js.map +1 -0
  277. package/build/module/hooks/useUnstableCollapsibleAppBar.js +4 -6
  278. package/build/module/hooks/useUnstableCollapsibleAppBar.js.map +1 -1
  279. package/build/module/index.js +2 -0
  280. package/build/module/index.js.map +1 -1
  281. package/build/typescript/AnimatedY/AnimatedY.d.ts +1 -0
  282. package/build/typescript/BottomSheet/BottomSheetNative.d.ts +1 -0
  283. package/build/typescript/BottomSheet/BottomSheetProps.d.ts +31 -2
  284. package/build/typescript/BottomSheet/BottomSheetWeb.d.ts +1 -0
  285. package/build/typescript/BottomSheet/TransparentBackdrop.d.ts +1 -0
  286. package/build/typescript/BottomSheet/useDynamicSnapPoints.d.ts +13 -0
  287. package/build/typescript/BottomSheet/useDynamicSnapPoints.native.d.ts +21 -0
  288. package/build/typescript/Carousel/Carousel.d.ts +5 -0
  289. package/build/typescript/Carousel/CarouselProps.d.ts +33 -48
  290. package/build/typescript/Carousel/animation/animationUtils.d.ts +1 -0
  291. package/build/typescript/Carousel/animation/createDefaultItemStyle.d.ts +2 -0
  292. package/build/typescript/Carousel/animation/createDefaultScrollAnimation.d.ts +2 -0
  293. package/build/typescript/Carousel/animation/index.d.ts +4 -0
  294. package/build/typescript/Carousel/animation/normalItemStyleFactory.d.ts +2 -0
  295. package/build/typescript/Carousel/animation/parallaxItemStyleFactory.d.ts +9 -0
  296. package/build/typescript/Carousel/components/InternalContext.d.ts +14 -0
  297. package/build/typescript/Carousel/components/ItemView.d.ts +9 -0
  298. package/build/typescript/Carousel/components/RootView.d.ts +16 -0
  299. package/build/typescript/Carousel/components/ScrollViewGesture.d.ts +12 -0
  300. package/build/typescript/Carousel/components/index.d.ts +4 -0
  301. package/build/typescript/Carousel/components/useItemInterpolation.d.ts +2 -0
  302. package/build/typescript/Carousel/hooks/index.d.ts +5 -0
  303. package/build/typescript/Carousel/hooks/useAutoplayController.d.ts +7 -0
  304. package/build/typescript/Carousel/hooks/useIndexController.d.ts +10 -0
  305. package/build/typescript/Carousel/hooks/useItemVisibilityStore.d.ts +7 -0
  306. package/build/typescript/Carousel/hooks/useLoopedData.d.ts +1 -0
  307. package/build/typescript/Carousel/hooks/usePagingAnimator.d.ts +17 -0
  308. package/build/typescript/Carousel/index.d.ts +3 -1
  309. package/build/typescript/Carousel/tick.d.ts +2 -0
  310. package/build/typescript/Carousel/types.d.ts +91 -0
  311. package/build/typescript/ComicViewer/ComicViewer.d.ts +2 -1
  312. package/build/typescript/ComicViewer/ComicViewerProps.d.ts +61 -43
  313. package/build/typescript/ComicViewer/EncodedTile.d.ts +2 -0
  314. package/build/typescript/ComicViewer/FastScroll.d.ts +4 -0
  315. package/build/typescript/ComicViewer/FastScrollProps.d.ts +74 -0
  316. package/build/typescript/ComicViewer/ReloadButton.d.ts +7 -0
  317. package/build/typescript/ComicViewer/ViewerItem.d.ts +46 -7
  318. package/build/typescript/ComicViewer/index.d.ts +3 -2
  319. package/build/typescript/ComicViewer/util.d.ts +2 -0
  320. package/build/typescript/DateTimePicker/DateTimePicker.d.ts +1 -0
  321. package/build/typescript/DateTimePicker/YearPicker.d.ts +1 -0
  322. package/build/typescript/FlipCard/FlipCard.d.ts +1 -0
  323. package/build/typescript/StatusBarProvider/Provider.d.ts +13 -0
  324. package/build/typescript/StatusBarProvider/StatusBarProvider.d.ts +1 -0
  325. package/build/typescript/ViewPager/FluxContext.d.ts +5 -0
  326. package/build/typescript/ViewPager/InternalContext.d.ts +7 -0
  327. package/build/typescript/ViewPager/PageStateContext.d.ts +6 -0
  328. package/build/typescript/ViewPager/ViewPager.d.ts +5 -0
  329. package/build/typescript/ViewPager/ViewPager.native.d.ts +5 -0
  330. package/build/typescript/ViewPager/ViewPagerProps.d.ts +21 -27
  331. package/build/typescript/ViewPager/components/ChildrenMemoizedPage.d.ts +14 -0
  332. package/build/typescript/ViewPager/components/FluxStoreProvider.d.ts +6 -0
  333. package/build/typescript/ViewPager/components/index.d.ts +2 -0
  334. package/build/typescript/ViewPager/hooks/index.d.ts +7 -0
  335. package/build/typescript/ViewPager/hooks/useDispatch.d.ts +2 -0
  336. package/build/typescript/ViewPager/hooks/useEagerState.d.ts +1 -0
  337. package/build/typescript/ViewPager/hooks/useForceRender.d.ts +2 -0
  338. package/build/typescript/ViewPager/hooks/useLazyState.d.ts +2 -0
  339. package/build/typescript/ViewPager/hooks/usePageStore.d.ts +2 -0
  340. package/build/typescript/ViewPager/hooks/useStore.d.ts +2 -0
  341. package/build/typescript/ViewPager/hooks/useViewPagerPageState.d.ts +1 -0
  342. package/build/typescript/ViewPager/index.d.ts +4 -1
  343. package/build/typescript/ViewPager/types.d.ts +12 -0
  344. package/build/typescript/ViewPager/utils.d.ts +5 -20
  345. package/build/typescript/ViewabilityTrackerView/Viewability.d.ts +3 -0
  346. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerView.d.ts +3 -0
  347. package/build/typescript/ViewabilityTrackerView/ViewabilityTrackerViewProps.d.ts +22 -0
  348. package/build/typescript/ViewabilityTrackerView/index.d.ts +2 -0
  349. package/build/typescript/ViewabilityTrackerView/measureViewability.d.ts +11 -0
  350. package/build/typescript/ViewabilityTrackerView/useViewabilityTracker.d.ts +11 -0
  351. package/build/typescript/hooks/index.d.ts +2 -0
  352. package/build/typescript/hooks/useDeferredExecutor.d.ts +11 -0
  353. package/build/typescript/hooks/useIsMounted.d.ts +4 -0
  354. package/build/typescript/index.d.ts +2 -0
  355. package/package.json +10 -25
  356. package/src/BottomSheet/BottomSheetNative.tsx +103 -24
  357. package/src/BottomSheet/BottomSheetProps.ts +37 -2
  358. package/src/BottomSheet/BottomSheetWeb.tsx +69 -24
  359. package/src/BottomSheet/useDynamicSnapPoints.native.ts +15 -0
  360. package/src/BottomSheet/useDynamicSnapPoints.ts +87 -0
  361. package/src/Carousel/Carousel.tsx +135 -0
  362. package/src/Carousel/CarouselProps.ts +42 -53
  363. package/src/Carousel/animation/animationUtils.ts +1 -0
  364. package/src/Carousel/animation/createDefaultItemStyle.ts +3 -0
  365. package/src/Carousel/animation/createDefaultScrollAnimation.ts +14 -0
  366. package/src/Carousel/animation/index.ts +4 -0
  367. package/src/Carousel/animation/normalItemStyleFactory.ts +19 -0
  368. package/src/Carousel/animation/parallaxItemStyleFactory.ts +79 -0
  369. package/src/Carousel/components/InternalContext.ts +33 -0
  370. package/src/Carousel/components/ItemView.tsx +66 -0
  371. package/src/Carousel/components/RootView.tsx +79 -0
  372. package/src/Carousel/components/ScrollViewGesture.tsx +93 -0
  373. package/src/Carousel/components/index.ts +4 -0
  374. package/src/Carousel/components/useItemInterpolation.ts +107 -0
  375. package/src/Carousel/hooks/index.ts +5 -0
  376. package/src/Carousel/hooks/useAutoplayController.ts +57 -0
  377. package/src/Carousel/hooks/useIndexController.tsx +57 -0
  378. package/src/Carousel/hooks/useItemVisibilityStore.ts +107 -0
  379. package/src/Carousel/hooks/useLoopedData.ts +26 -0
  380. package/src/Carousel/hooks/usePagingAnimator.ts +255 -0
  381. package/src/Carousel/index.ts +4 -2
  382. package/src/Carousel/tick.ts +6 -0
  383. package/src/Carousel/types.ts +114 -0
  384. package/src/ComicViewer/ComicViewer.tsx +268 -106
  385. package/src/ComicViewer/ComicViewerProps.ts +66 -44
  386. package/src/ComicViewer/EncodedTile.ts +3 -0
  387. package/src/ComicViewer/FastScroll.tsx +176 -0
  388. package/src/ComicViewer/FastScrollProps.ts +88 -0
  389. package/src/ComicViewer/ReloadButton.tsx +36 -0
  390. package/src/ComicViewer/ViewerItem.tsx +104 -62
  391. package/src/ComicViewer/index.ts +8 -2
  392. package/src/ComicViewer/util.ts +15 -0
  393. package/src/DateTimePicker/DateTimePicker.tsx +11 -3
  394. package/src/DateTimePicker/YearPicker.tsx +2 -2
  395. package/src/StatusBarProvider/Provider.ts +14 -0
  396. package/src/StatusBarProvider/StatusBarProvider.tsx +103 -1
  397. package/src/ViewPager/FluxContext.ts +8 -0
  398. package/src/ViewPager/InternalContext.ts +13 -0
  399. package/src/ViewPager/PageStateContext.ts +11 -0
  400. package/src/ViewPager/ViewPager.native.tsx +152 -0
  401. package/src/ViewPager/ViewPager.tsx +69 -0
  402. package/src/ViewPager/ViewPagerProps.ts +25 -34
  403. package/src/ViewPager/components/ChildrenMemoizedPage.tsx +124 -0
  404. package/src/ViewPager/components/FluxStoreProvider.tsx +27 -0
  405. package/src/ViewPager/components/index.ts +2 -0
  406. package/src/ViewPager/hooks/index.ts +7 -0
  407. package/src/ViewPager/hooks/useDispatch.ts +11 -0
  408. package/src/ViewPager/hooks/useEagerState.ts +14 -0
  409. package/src/ViewPager/hooks/useForceRender.ts +7 -0
  410. package/src/ViewPager/hooks/useLazyState.ts +32 -0
  411. package/src/ViewPager/hooks/usePageStore.ts +30 -0
  412. package/src/ViewPager/hooks/useStore.ts +15 -0
  413. package/src/ViewPager/hooks/useViewPagerPageState.ts +6 -0
  414. package/src/ViewPager/index.ts +11 -2
  415. package/src/ViewPager/types.ts +15 -0
  416. package/src/ViewPager/utils.tsx +9 -56
  417. package/src/ViewabilityTrackerView/Viewability.ts +3 -0
  418. package/src/ViewabilityTrackerView/ViewabilityTrackerView.tsx +33 -0
  419. package/src/ViewabilityTrackerView/ViewabilityTrackerViewProps.ts +25 -0
  420. package/src/ViewabilityTrackerView/index.ts +2 -0
  421. package/src/ViewabilityTrackerView/measureViewability.ts +54 -0
  422. package/src/ViewabilityTrackerView/useViewabilityTracker.ts +85 -0
  423. package/src/hooks/index.ts +2 -0
  424. package/src/hooks/useDeferredExecutor.ts +46 -0
  425. package/src/hooks/useHeight.ts +3 -4
  426. package/src/hooks/useIsMounted.ts +19 -0
  427. package/src/hooks/useUnstableCollapsibleAppBar.ts +4 -4
  428. package/src/index.ts +3 -0
  429. package/build/commonjs/Carousel/CarouselNative.js +0 -72
  430. package/build/commonjs/Carousel/CarouselNative.js.map +0 -1
  431. package/build/commonjs/Carousel/CarouselWeb.js +0 -237
  432. package/build/commonjs/Carousel/CarouselWeb.js.map +0 -1
  433. package/build/commonjs/Carousel/index.native.js.map +0 -1
  434. package/build/commonjs/Carousel/utils.js +0 -19
  435. package/build/commonjs/Carousel/utils.js.map +0 -1
  436. package/build/commonjs/ComicViewer/ComicViewerItemProps.js.map +0 -1
  437. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js +0 -49
  438. package/build/commonjs/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  439. package/build/commonjs/ViewPager/ViewPagerNative.js +0 -75
  440. package/build/commonjs/ViewPager/ViewPagerNative.js.map +0 -1
  441. package/build/commonjs/ViewPager/ViewPagerWeb.js +0 -55
  442. package/build/commonjs/ViewPager/ViewPagerWeb.js.map +0 -1
  443. package/build/commonjs/ViewPager/index.native.js +0 -16
  444. package/build/commonjs/ViewPager/index.native.js.map +0 -1
  445. package/build/module/Carousel/CarouselNative.js +0 -54
  446. package/build/module/Carousel/CarouselNative.js.map +0 -1
  447. package/build/module/Carousel/CarouselWeb.js +0 -215
  448. package/build/module/Carousel/CarouselWeb.js.map +0 -1
  449. package/build/module/Carousel/index.native.js +0 -2
  450. package/build/module/Carousel/index.native.js.map +0 -1
  451. package/build/module/Carousel/utils.js +0 -7
  452. package/build/module/Carousel/utils.js.map +0 -1
  453. package/build/module/ComicViewer/ComicViewerItemProps.js +0 -2
  454. package/build/module/ComicViewer/ComicViewerItemProps.js.map +0 -1
  455. package/build/module/ViewPager/ChildrenMemoizedPage.js +0 -37
  456. package/build/module/ViewPager/ChildrenMemoizedPage.js.map +0 -1
  457. package/build/module/ViewPager/ViewPagerNative.js +0 -58
  458. package/build/module/ViewPager/ViewPagerNative.js.map +0 -1
  459. package/build/module/ViewPager/ViewPagerWeb.js +0 -41
  460. package/build/module/ViewPager/ViewPagerWeb.js.map +0 -1
  461. package/build/module/ViewPager/index.native.js +0 -2
  462. package/build/module/ViewPager/index.native.js.map +0 -1
  463. package/build/typescript/Carousel/CarouselNative.d.ts +0 -2
  464. package/build/typescript/Carousel/CarouselWeb.d.ts +0 -4
  465. package/build/typescript/Carousel/index.native.d.ts +0 -1
  466. package/build/typescript/Carousel/utils.d.ts +0 -6
  467. package/build/typescript/ComicViewer/ComicViewerItemProps.d.ts +0 -12
  468. package/build/typescript/ViewPager/ChildrenMemoizedPage.d.ts +0 -4
  469. package/build/typescript/ViewPager/ViewPagerNative.d.ts +0 -2
  470. package/build/typescript/ViewPager/ViewPagerWeb.d.ts +0 -2
  471. package/build/typescript/ViewPager/index.native.d.ts +0 -1
  472. package/src/Carousel/CarouselNative.tsx +0 -67
  473. package/src/Carousel/CarouselWeb.tsx +0 -222
  474. package/src/Carousel/index.native.ts +0 -1
  475. package/src/Carousel/utils.ts +0 -11
  476. package/src/ComicViewer/ComicViewerItemProps.ts +0 -15
  477. package/src/ViewPager/ChildrenMemoizedPage.tsx +0 -36
  478. package/src/ViewPager/ViewPagerNative.tsx +0 -73
  479. package/src/ViewPager/ViewPagerWeb.tsx +0 -52
  480. package/src/ViewPager/index.native.ts +0 -1
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useDeferredExecutor;
7
+
8
+ var _react = require("react");
9
+
10
+ var _useIsMounted = _interopRequireDefault(require("./useIsMounted"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function useDeferredExecutor() {
15
+ const isMounted = (0, _useIsMounted.default)();
16
+ const timeoutIdRef = (0, _react.useRef)(null);
17
+ const cancel = (0, _react.useCallback)(() => {
18
+ if (timeoutIdRef.current) {
19
+ clearTimeout(timeoutIdRef.current);
20
+ }
21
+ }, []);
22
+ (0, _react.useEffect)(() => {
23
+ return cancel;
24
+ }, []);
25
+ const execute = (0, _react.useCallback)((runnable, delay) => {
26
+ if (!isMounted()) {
27
+ return;
28
+ }
29
+
30
+ cancel();
31
+
32
+ if (Number.isFinite(delay)) {
33
+ timeoutIdRef.current = setTimeout(() => runnable(), delay);
34
+ } else {
35
+ runnable();
36
+ }
37
+ }, []);
38
+ return {
39
+ cancel,
40
+ execute
41
+ };
42
+ }
43
+
44
+ ;
45
+ //# sourceMappingURL=useDeferredExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useDeferredExecutor","isMounted","useIsMounted","timeoutIdRef","useRef","cancel","useCallback","current","clearTimeout","useEffect","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;;AACA;;;;AAee,SAASA,mBAAT,GAAiD;EAC5D,MAAMC,SAAS,GAAG,IAAAC,qBAAA,GAAlB;EACA,MAAMC,YAAY,GAAG,IAAAC,aAAA,EAA4B,IAA5B,CAArB;EAEA,MAAMC,MAAM,GAAG,IAAAC,kBAAA,EAAY,MAAM;IAC7B,IAAIH,YAAY,CAACI,OAAjB,EAA0B;MACtBC,YAAY,CAACL,YAAY,CAACI,OAAd,CAAZ;IACH;EACJ,CAJc,EAIZ,EAJY,CAAf;EAMA,IAAAE,gBAAA,EAAU,MAAM;IACZ,OAAOJ,MAAP;EACH,CAFD,EAEG,EAFH;EAIA,MAAMK,OAAO,GAAG,IAAAJ,kBAAA,EAA6B,CAACK,QAAD,EAAWC,KAAX,KAAqB;IAC9D,IAAI,CAACX,SAAS,EAAd,EAAkB;MACd;IACH;;IAEDI,MAAM;;IAEN,IAAIQ,MAAM,CAACC,QAAP,CAAgBF,KAAhB,CAAJ,EAA4B;MACxBT,YAAY,CAACI,OAAb,GAAuBQ,UAAU,CAAC,MAAMJ,QAAQ,EAAf,EAAmBC,KAAnB,CAAjC;IACH,CAFD,MAEO;MACHD,QAAQ;IACX;EACJ,CAZe,EAYb,EAZa,CAAhB;EAcA,OAAO;IAAEN,MAAF;IAAUK;EAAV,CAAP;AACH;;AAAA"}
@@ -5,18 +5,18 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = useHeight;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
- var _reactNativeReanimated = require("react-native-reanimated");
10
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
11
11
 
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
13
 
14
14
  function useHeight() {
15
15
  let initialHeight = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
16
16
 
17
17
  const [height, setHeight] = _react.default.useState(initialHeight);
18
18
 
19
- const onLayout = (0, _reactNativeReanimated.useWorkletCallback)(e => {
19
+ const onLayout = (0, _react.useCallback)(e => {
20
20
  setHeight(e.nativeEvent.layout.height);
21
21
  }, []);
22
22
  return [height, onLayout];
@@ -1 +1 @@
1
- {"version":3,"names":["useHeight","initialHeight","height","setHeight","React","useState","onLayout","useWorkletCallback","e","nativeEvent","layout"],"sources":["useHeight.ts"],"sourcesContent":["import React from 'react';\nimport { ViewProps } from 'react-native';\nimport { useWorkletCallback } 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 = useWorkletCallback((e) => {\n setHeight(e.nativeEvent.layout.height);\n }, []);\n\n return [height, onLayout];\n};\n"],"mappings":";;;;;;;AAAA;;AAEA;;;;AAIe,SAASA,SAAT,GAAkE;EAAA,IAA/CC,aAA+C,uEAA/B,CAA+B;;EAC7E,MAAM,CAACC,MAAD,EAASC,SAAT,IAAsBC,cAAA,CAAMC,QAAN,CAAuBJ,aAAvB,CAA5B;;EAEA,MAAMK,QAAQ,GAAG,IAAAC,yCAAA,EAAoBC,CAAD,IAAO;IACvCL,SAAS,CAACK,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBR,MAAtB,CAAT;EACH,CAFgB,EAEd,EAFc,CAAjB;EAIA,OAAO,CAACA,MAAD,EAASI,QAAT,CAAP;AACH;;AAAA"}
1
+ {"version":3,"names":["useHeight","initialHeight","height","setHeight","React","useState","onLayout","useCallback","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;;;;;;AAKe,SAASA,SAAT,GAAkE;EAAA,IAA/CC,aAA+C,uEAA/B,CAA+B;;EAC7E,MAAM,CAACC,MAAD,EAASC,SAAT,IAAsBC,cAAA,CAAMC,QAAN,CAAuBJ,aAAvB,CAA5B;;EAEA,MAAMK,QAAQ,GAAG,IAAAC,kBAAA,EAAaC,CAAD,IAA0B;IACnDL,SAAS,CAACK,CAAC,CAACC,WAAF,CAAcC,MAAd,CAAqBR,MAAtB,CAAT;EACH,CAFgB,EAEd,EAFc,CAAjB;EAIA,OAAO,CAACA,MAAD,EAASI,QAAT,CAAP;AACH;;AAAA"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useIsMounted;
7
+
8
+ var _react = require("react");
9
+
10
+ function useIsMounted() {
11
+ const mountedRef = (0, _react.useRef)(false);
12
+ (0, _react.useEffect)(() => {
13
+ mountedRef.current = true;
14
+ return () => {
15
+ mountedRef.current = false;
16
+ };
17
+ }, []);
18
+ return (0, _react.useCallback)(() => mountedRef.current, []);
19
+ }
20
+
21
+ ;
22
+ //# sourceMappingURL=useIsMounted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useIsMounted","mountedRef","useRef","useEffect","current","useCallback"],"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;;AAMe,SAASA,YAAT,GAAsC;EACjD,MAAMC,UAAU,GAAG,IAAAC,aAAA,EAAgB,KAAhB,CAAnB;EAEA,IAAAC,gBAAA,EAAU,MAAM;IACZF,UAAU,CAACG,OAAX,GAAqB,IAArB;IAEA,OAAO,MAAM;MACTH,UAAU,CAACG,OAAX,GAAqB,KAArB;IACH,CAFD;EAGH,CAND,EAMG,EANH;EAQA,OAAO,IAAAC,kBAAA,EAAY,MAAMJ,UAAU,CAACG,OAA7B,EAAsC,EAAtC,CAAP;AACH;;AAAA"}
@@ -91,8 +91,7 @@ function useUnstableCollapsibleAppBar() {
91
91
  ]);
92
92
  const indexRef = (0, _react.useRef)(0);
93
93
  const offsetsRef = (0, _react.useRef)([]);
94
-
95
- const onScrollViewChanged = nextIndex => {
94
+ const onScrollViewChanged = (0, _react.useCallback)(nextIndex => {
96
95
  const prevIndex = indexRef.current;
97
96
 
98
97
  if (prevIndex === nextIndex) {
@@ -121,8 +120,7 @@ function useUnstableCollapsibleAppBar() {
121
120
  });
122
121
  vectorY.value = 0;
123
122
  }
124
- };
125
-
123
+ }, [appBarHeight]);
126
124
  const scrollHandler = (0, _reactNativeReanimated.useAnimatedScrollHandler)({
127
125
  onBeginDrag: () => {
128
126
  lastTranslateY.value = translateY.value;
@@ -181,7 +179,7 @@ function useUnstableCollapsibleAppBar() {
181
179
  duration: ANIMATION_DURATION_MILLIS
182
180
  });
183
181
  }
184
- }, []);
182
+ }, [appBarHeight]);
185
183
  const hasCollapsible = collapsibleToolbarHeight > 0;
186
184
  const appBarStyle = [animatedStyle, {
187
185
  paddingTop: safeAreaInsets.top
@@ -1 +1 @@
1
- {"version":3,"names":["defaultOptions","shouldTranslateYReset","ANIMATION_DURATION_MILLIS","SUPPORTS_DRAG_DETECTION","Platform","OS","useLargerValueOfLastTwoValues","value","refLatestTwoValues","useRef","current","shift","push","Math","max","useUnstableCollapsibleAppBar","userOptions","styles","useAppbarStyles","safeAreaInsets","useSafeAreaInsets","appBarHeight","onAppBarLayout","useHeight","appBarMaxHeight","collapsibleToolbarHeight","onCollapsibleToolbarLayout","maxTranslateY","useDerivedValue","translateY","useSharedValue","lastTranslateY","lastOffsetY","prevOffsetY","overlapped","vectorY","elevationStyle","useElevationStyle","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","floating","undefined","scrollContentInsets"],"sources":["useUnstableCollapsibleAppBar.ts"],"sourcesContent":["import { 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 = (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 };\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 }, []);\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
+ {"version":3,"names":["defaultOptions","shouldTranslateYReset","ANIMATION_DURATION_MILLIS","SUPPORTS_DRAG_DETECTION","Platform","OS","useLargerValueOfLastTwoValues","value","refLatestTwoValues","useRef","current","shift","push","Math","max","useUnstableCollapsibleAppBar","userOptions","styles","useAppbarStyles","safeAreaInsets","useSafeAreaInsets","appBarHeight","onAppBarLayout","useHeight","appBarMaxHeight","collapsibleToolbarHeight","onCollapsibleToolbarLayout","maxTranslateY","useDerivedValue","translateY","useSharedValue","lastTranslateY","lastOffsetY","prevOffsetY","overlapped","vectorY","elevationStyle","useElevationStyle","animatedStyle","useAnimatedStyle","transform","boxShadow","elevation","shadowColor","shadowOffset","shadowRadius","shadowOpacity","indexRef","offsetsRef","onScrollViewChanged","useCallback","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","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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"}
@@ -11,7 +11,8 @@ var _exportNames = {
11
11
  ViewPager: true,
12
12
  ComicViewer: true,
13
13
  StatusBarProvider: true,
14
- useStatusBarContext: true
14
+ useStatusBarContext: true,
15
+ ViewabilityTrackerView: true
15
16
  };
16
17
  Object.defineProperty(exports, "BottomSheet", {
17
18
  enumerable: true,
@@ -55,6 +56,12 @@ Object.defineProperty(exports, "ViewPager", {
55
56
  return _ViewPager.default;
56
57
  }
57
58
  });
59
+ Object.defineProperty(exports, "ViewabilityTrackerView", {
60
+ enumerable: true,
61
+ get: function () {
62
+ return _ViewabilityTrackerView.default;
63
+ }
64
+ });
58
65
  Object.defineProperty(exports, "useStatusBarContext", {
59
66
  enumerable: true,
60
67
  get: function () {
@@ -160,6 +167,20 @@ Object.keys(_StatusBarProvider).forEach(function (key) {
160
167
  });
161
168
  });
162
169
 
170
+ var _ViewabilityTrackerView = _interopRequireWildcard(require("./ViewabilityTrackerView"));
171
+
172
+ Object.keys(_ViewabilityTrackerView).forEach(function (key) {
173
+ if (key === "default" || key === "__esModule") return;
174
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
175
+ if (key in exports && exports[key] === _ViewabilityTrackerView[key]) return;
176
+ Object.defineProperty(exports, key, {
177
+ enumerable: true,
178
+ get: function () {
179
+ return _ViewabilityTrackerView[key];
180
+ }
181
+ });
182
+ });
183
+
163
184
  var _hooks = require("./hooks");
164
185
 
165
186
  Object.keys(_hooks).forEach(function (key) {
@@ -1 +1 @@
1
- {"version":3,"names":[],"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 * from './hooks';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":[],"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;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AACA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AAEA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -1,34 +1,55 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
- import React from 'react';
4
- import { Platform } from 'react-native';
3
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
4
+ import { Animated, useWindowDimensions } from 'react-native';
5
+ import { BottomSheetBackdrop, BottomSheetModal, BottomSheetModalProvider, BottomSheetView } from '@gorhom/bottom-sheet';
6
+ import { Column, css, isNotAndroid12, useAnimatedValue } from '@fountain-ui/core';
5
7
  import { useTheme } from '@fountain-ui/styles';
6
- import { BottomSheetBackdrop, BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet';
7
8
  import TransparentBackdrop from './TransparentBackdrop';
9
+ import useDynamicSnapPoints from './useDynamicSnapPoints.native';
8
10
 
9
11
  const NoHandle = () => null;
10
12
 
11
13
  export default function BottomSheet(props) {
12
14
  const {
13
15
  backdropOpacity = 0.5,
16
+ backgroundStyle: backgroundStyleProp,
17
+ borderRadius: borderRadiusProp,
14
18
  children,
19
+ enableDynamicSizing = true,
20
+ topElement,
15
21
  index,
22
+ maxHeightNormalizedRatio = 0.8,
16
23
  onChange,
17
- snapPoints
24
+ snapPoints = [],
25
+ style: styleProp
18
26
  } = props;
19
- const indexRef = React.useRef(-1);
20
- const bottomSheetRef = React.useRef(null);
21
- const handleChange = React.useCallback(newIndex => {
27
+ const indexRef = useRef(-1);
28
+ const bottomSheetRef = useRef(null);
29
+ const {
30
+ height: windowHeight
31
+ } = useWindowDimensions();
32
+ const [topElementHeight, setTopElementHeight] = useState(0);
33
+ const maxDynamicContentSize = Math.round(windowHeight * maxHeightNormalizedRatio) - topElementHeight;
34
+
35
+ const handleTopElementLayout = event => {
36
+ const {
37
+ height
38
+ } = event.nativeEvent.layout;
39
+ setTopElementHeight(height);
40
+ };
41
+
42
+ const handleChange = useCallback(newIndex => {
22
43
  indexRef.current = newIndex;
23
44
 
24
45
  if (onChange) {
25
46
  onChange(newIndex);
26
47
  }
27
48
  }, [onChange]);
28
- const handleDismiss = React.useCallback(() => {
49
+ const handleDismiss = useCallback(() => {
29
50
  handleChange(-1);
30
51
  }, [handleChange]);
31
- React.useEffect(() => {
52
+ useEffect(() => {
32
53
  if (index === indexRef.current) {
33
54
  return;
34
55
  }
@@ -49,26 +70,57 @@ export default function BottomSheet(props) {
49
70
  }
50
71
  }, [index]);
51
72
  const theme = useTheme();
52
- const shadow = theme.shadow[12];
53
- const modalStyle = {
54
- backgroundColor: '#ffffff00',
55
- ...Platform.select({
56
- android: shadow === null || shadow === void 0 ? void 0 : shadow.elevation,
57
- ios: shadow === null || shadow === void 0 ? void 0 : shadow.shadow,
58
- web: shadow === null || shadow === void 0 ? void 0 : shadow.boxShadow
59
- })
60
- };
61
- const backgroundStyle = {
62
- backgroundColor: theme.palette.paper.default
63
- };
73
+ const borderRadius = borderRadiusProp ?? theme.shape.radius.xxl;
74
+ const backgroundStyle = css([{
75
+ backgroundColor: theme.palette.surface.base,
76
+ borderTopLeftRadius: borderRadius,
77
+ borderTopRightRadius: borderRadius
78
+ }, backgroundStyleProp]);
79
+ const contentWrapperStyle = css([{
80
+ backgroundColor: theme.palette.surface.base,
81
+ borderTopLeftRadius: borderRadius,
82
+ borderTopRightRadius: borderRadius,
83
+ flexShrink: 1,
84
+ maxHeight: maxDynamicContentSize,
85
+ minHeight: 325,
86
+ overflow: 'hidden',
87
+ paddingBottom: theme.spacing(6),
88
+ paddingTop: theme.spacing(5.5)
89
+ }, styleProp]);
64
90
  const isBackdropTransparent = backdropOpacity <= 0;
65
91
 
66
92
  const OpacityAwareBackdrop = props => /*#__PURE__*/React.createElement(BottomSheetBackdrop, _extends({}, props, {
67
93
  appearsOnIndex: 0,
68
94
  disappearsOnIndex: -1,
69
- opacity: backdropOpacity
95
+ opacity: backdropOpacity,
96
+ pressBehavior: onChange ? 'close' : 'none'
70
97
  }));
71
98
 
99
+ const topElementOpacity = useAnimatedValue(0);
100
+ const topElementAnimationStyle = {
101
+ opacity: topElementOpacity
102
+ };
103
+ const topElementLocationStyle = {
104
+ position: 'absolute',
105
+ width: '100%',
106
+ bottom: 0
107
+ };
108
+
109
+ const onAnimate = (fromIndex, toIndex) => {
110
+ const isVisible = toIndex > -1;
111
+ Animated.timing(topElementOpacity, {
112
+ toValue: isVisible ? 1 : 0,
113
+ duration: 0,
114
+ useNativeDriver: isNotAndroid12
115
+ }).start();
116
+ };
117
+
118
+ const {
119
+ animatedHandleHeight,
120
+ animatedSnapPoints,
121
+ animatedContentHeight,
122
+ handleContentLayout
123
+ } = useDynamicSnapPoints(snapPoints);
72
124
  return /*#__PURE__*/React.createElement(BottomSheetModalProvider, null, /*#__PURE__*/React.createElement(BottomSheetModal, {
73
125
  backdropComponent: isBackdropTransparent ? TransparentBackdrop : OpacityAwareBackdrop // @ts-ignore
74
126
  ,
@@ -78,9 +130,23 @@ export default function BottomSheet(props) {
78
130
  onChange: handleChange,
79
131
  onDismiss: handleDismiss,
80
132
  ref: bottomSheetRef,
81
- snapPoints: snapPoints,
82
- style: modalStyle
83
- }, children));
133
+ enablePanDownToClose: Boolean(onChange),
134
+ enableDynamicSizing: enableDynamicSizing,
135
+ maxDynamicContentSize: maxDynamicContentSize,
136
+ detached: Boolean(topElement),
137
+ onAnimate: topElement ? onAnimate : undefined,
138
+ snapPoints: animatedSnapPoints,
139
+ handleHeight: animatedHandleHeight,
140
+ contentHeight: animatedContentHeight
141
+ }, topElement ? /*#__PURE__*/React.createElement(Animated.View, {
142
+ style: topElementAnimationStyle
143
+ }, /*#__PURE__*/React.createElement(Column, {
144
+ onLayout: handleTopElementLayout,
145
+ style: topElementLocationStyle
146
+ }, topElement)) : null, /*#__PURE__*/React.createElement(BottomSheetView, {
147
+ onLayout: handleContentLayout,
148
+ style: contentWrapperStyle
149
+ }, children)));
84
150
  }
85
151
  ;
86
152
  //# sourceMappingURL=BottomSheetNative.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","Platform","useTheme","BottomSheetBackdrop","BottomSheetModal","BottomSheetModalProvider","TransparentBackdrop","NoHandle","BottomSheet","props","backdropOpacity","children","index","onChange","snapPoints","indexRef","useRef","bottomSheetRef","handleChange","useCallback","newIndex","current","handleDismiss","useEffect","present","dismiss","snapToIndex","theme","shadow","modalStyle","backgroundColor","select","android","elevation","ios","web","boxShadow","backgroundStyle","palette","paper","default","isBackdropTransparent","OpacityAwareBackdrop"],"sources":["BottomSheetNative.tsx"],"sourcesContent":["import React from 'react';\nimport { Platform } from 'react-native';\nimport { useTheme } from '@fountain-ui/styles';\nimport {\n BottomSheetBackdrop,\n BottomSheetBackdropProps,\n BottomSheetModal,\n BottomSheetModalProvider,\n} from '@gorhom/bottom-sheet';\nimport type BottomSheetProps from './BottomSheetProps';\nimport TransparentBackdrop from './TransparentBackdrop';\n\nconst NoHandle = () => null;\n\nexport default function BottomSheet(props: BottomSheetProps) {\n const {\n backdropOpacity = 0.5,\n children,\n index,\n onChange,\n snapPoints,\n } = props;\n\n const indexRef = React.useRef<number>(-1);\n const bottomSheetRef = React.useRef<BottomSheetModal | null>(null);\n\n const handleChange = React.useCallback((newIndex: number) => {\n indexRef.current = newIndex;\n\n if (onChange) {\n onChange(newIndex);\n }\n }, [onChange]);\n\n const handleDismiss = React.useCallback(() => {\n handleChange(-1);\n }, [handleChange]);\n\n React.useEffect(() => {\n if (index === indexRef.current) {\n return;\n }\n\n if (indexRef.current < 0 && index >= 0) {\n bottomSheetRef.current?.present();\n } else if (indexRef.current >= 0 && index < 0) {\n bottomSheetRef.current?.dismiss();\n } else {\n // @ts-ignore\n bottomSheetRef.current?.snapToIndex(index);\n }\n }, [index]);\n\n const theme = useTheme();\n const shadow = theme.shadow[12];\n const modalStyle = {\n backgroundColor: '#ffffff00',\n ...Platform.select<object>({\n android: shadow?.elevation,\n ios: shadow?.shadow,\n web: shadow?.boxShadow,\n }),\n };\n const backgroundStyle = {\n backgroundColor: theme.palette.paper.default,\n };\n\n const isBackdropTransparent = backdropOpacity <= 0;\n\n const OpacityAwareBackdrop = (props: BottomSheetBackdropProps) => (\n <BottomSheetBackdrop\n {...props}\n appearsOnIndex={0}\n disappearsOnIndex={-1}\n opacity={backdropOpacity}\n />\n );\n\n return (\n <BottomSheetModalProvider>\n <BottomSheetModal\n backdropComponent={isBackdropTransparent ? TransparentBackdrop : OpacityAwareBackdrop}\n // @ts-ignore\n backgroundStyle={backgroundStyle}\n index={index}\n handleComponent={NoHandle}\n onChange={handleChange}\n onDismiss={handleDismiss}\n ref={bottomSheetRef}\n snapPoints={snapPoints}\n style={modalStyle}\n >\n {children}\n </BottomSheetModal>\n </BottomSheetModalProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","useEffect","useRef","useState","Animated","useWindowDimensions","BottomSheetBackdrop","BottomSheetModal","BottomSheetModalProvider","BottomSheetView","Column","css","isNotAndroid12","useAnimatedValue","useTheme","TransparentBackdrop","useDynamicSnapPoints","NoHandle","BottomSheet","props","backdropOpacity","backgroundStyle","backgroundStyleProp","borderRadius","borderRadiusProp","children","enableDynamicSizing","topElement","index","maxHeightNormalizedRatio","onChange","snapPoints","style","styleProp","indexRef","bottomSheetRef","height","windowHeight","topElementHeight","setTopElementHeight","maxDynamicContentSize","Math","round","handleTopElementLayout","event","nativeEvent","layout","handleChange","newIndex","current","handleDismiss","present","dismiss","snapToIndex","theme","shape","radius","xxl","backgroundColor","palette","surface","base","borderTopLeftRadius","borderTopRightRadius","contentWrapperStyle","flexShrink","maxHeight","minHeight","overflow","paddingBottom","spacing","paddingTop","isBackdropTransparent","OpacityAwareBackdrop","topElementOpacity","topElementAnimationStyle","opacity","topElementLocationStyle","position","width","bottom","onAnimate","fromIndex","toIndex","isVisible","timing","toValue","duration","useNativeDriver","start","animatedHandleHeight","animatedSnapPoints","animatedContentHeight","handleContentLayout","Boolean","undefined"],"sources":["BottomSheetNative.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Animated, LayoutChangeEvent, useWindowDimensions, ViewStyle } from 'react-native';\nimport {\n BottomSheetBackdrop,\n BottomSheetBackdropProps,\n BottomSheetModal,\n BottomSheetModalProvider,\n BottomSheetView,\n} from '@gorhom/bottom-sheet';\nimport { Column, css, ExtendedStyle, isNotAndroid12, useAnimatedValue } from '@fountain-ui/core';\nimport { useTheme } from '@fountain-ui/styles';\nimport type BottomSheetProps from './BottomSheetProps';\nimport TransparentBackdrop from './TransparentBackdrop';\nimport useDynamicSnapPoints from './useDynamicSnapPoints.native';\n\nconst NoHandle = () => null;\n\nexport default function BottomSheet(props: BottomSheetProps) {\n const {\n backdropOpacity = 0.5,\n backgroundStyle: backgroundStyleProp,\n borderRadius: borderRadiusProp,\n children,\n enableDynamicSizing = true,\n topElement,\n index,\n maxHeightNormalizedRatio = 0.8,\n onChange,\n snapPoints = [],\n style: styleProp,\n } = props;\n\n const indexRef = useRef<number>(-1);\n const bottomSheetRef = useRef<BottomSheetModal | null>(null);\n\n const { height: windowHeight } = useWindowDimensions();\n const [topElementHeight, setTopElementHeight] = useState(0);\n\n const maxDynamicContentSize = Math.round(windowHeight * maxHeightNormalizedRatio) - topElementHeight;\n\n const handleTopElementLayout = (event: LayoutChangeEvent) => {\n const { height } = event.nativeEvent.layout;\n setTopElementHeight(height);\n };\n\n const handleChange = useCallback((newIndex: number) => {\n indexRef.current = newIndex;\n\n if (onChange) {\n onChange(newIndex);\n }\n }, [onChange]);\n\n const handleDismiss = useCallback(() => {\n handleChange(-1);\n }, [handleChange]);\n\n useEffect(() => {\n if (index === indexRef.current) {\n return;\n }\n\n if (indexRef.current < 0 && index >= 0) {\n bottomSheetRef.current?.present();\n } else if (indexRef.current >= 0 && index < 0) {\n bottomSheetRef.current?.dismiss();\n } else {\n // @ts-ignore\n bottomSheetRef.current?.snapToIndex(index);\n }\n }, [index]);\n\n const theme = useTheme();\n\n const borderRadius = borderRadiusProp ?? theme.shape.radius.xxl;\n const backgroundStyle = css([\n {\n backgroundColor: theme.palette.surface.base,\n borderTopLeftRadius: borderRadius,\n borderTopRightRadius: borderRadius,\n },\n backgroundStyleProp,\n ]);\n\n const contentWrapperStyle: ViewStyle = css([\n {\n backgroundColor: theme.palette.surface.base,\n borderTopLeftRadius: borderRadius,\n borderTopRightRadius: borderRadius,\n flexShrink: 1,\n maxHeight: maxDynamicContentSize,\n minHeight: 325,\n overflow: 'hidden',\n paddingBottom: theme.spacing(6),\n paddingTop: theme.spacing(5.5),\n },\n styleProp,\n ]);\n\n const isBackdropTransparent = backdropOpacity <= 0;\n\n const OpacityAwareBackdrop = (props: BottomSheetBackdropProps) => (\n <BottomSheetBackdrop\n {...props}\n appearsOnIndex={0}\n disappearsOnIndex={-1}\n opacity={backdropOpacity}\n pressBehavior={onChange ? 'close' : 'none'}\n />\n );\n\n const topElementOpacity = useAnimatedValue(0);\n const topElementAnimationStyle: Animated.WithAnimatedValue<ExtendedStyle> = { opacity: topElementOpacity };\n const topElementLocationStyle: ExtendedStyle = {\n position: 'absolute',\n width: '100%',\n bottom: 0,\n };\n const onAnimate = (fromIndex: number, toIndex: number) => {\n const isVisible = toIndex > -1;\n\n Animated.timing(topElementOpacity, {\n toValue: isVisible ? 1 : 0,\n duration: 0,\n useNativeDriver: isNotAndroid12,\n }).start();\n };\n\n const {\n animatedHandleHeight,\n animatedSnapPoints,\n animatedContentHeight,\n handleContentLayout,\n } = useDynamicSnapPoints(snapPoints);\n\n return (\n <BottomSheetModalProvider>\n <BottomSheetModal\n backdropComponent={isBackdropTransparent ? TransparentBackdrop : OpacityAwareBackdrop}\n // @ts-ignore\n backgroundStyle={backgroundStyle}\n index={index}\n handleComponent={NoHandle}\n onChange={handleChange}\n onDismiss={handleDismiss}\n ref={bottomSheetRef}\n enablePanDownToClose={Boolean(onChange)}\n enableDynamicSizing={enableDynamicSizing}\n maxDynamicContentSize={maxDynamicContentSize}\n detached={Boolean(topElement)}\n onAnimate={topElement ? onAnimate : undefined}\n snapPoints={animatedSnapPoints}\n handleHeight={animatedHandleHeight}\n contentHeight={animatedContentHeight}\n >\n {topElement ? (\n <Animated.View style={topElementAnimationStyle}>\n <Column\n onLayout={handleTopElementLayout}\n style={topElementLocationStyle}\n >\n {topElement}\n </Column>\n </Animated.View>\n ) : null}\n\n <BottomSheetView\n onLayout={handleContentLayout}\n style={contentWrapperStyle}\n >\n {children}\n </BottomSheetView>\n </BottomSheetModal>\n </BottomSheetModalProvider>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["BottomSheetProps.ts"],"sourcesContent":["import React from 'react';\nimport type { ComponentProps } from '@fountain-ui/core';\n\nexport default interface BottomSheetProps extends ComponentProps<{\n /**\n * Opacity for BackdropComponent\n * @default 0.5\n */\n backdropOpacity?: number;\n\n /**\n * BottomSheet children, usually the included sub-components.\n */\n children?: React.ReactNode;\n\n /**\n * Snap index. You could also provide -1 to bottom sheet in closed state.\n */\n index: number;\n\n /**\n * Callback fired when the index is changed.\n * Important! Use memoized value.\n */\n onChange?: (newIndex: number) => void;\n\n /**\n * Points for the bottom sheet to snap to, points should be sorted from bottom to top.\n * Important! Use memoized value.\n */\n snapPoints: Array<number>;\n}> {}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["BottomSheetProps.ts"],"sourcesContent":["import React from 'react';\nimport type { ComponentProps, ExtendedStyle } from '@fountain-ui/core';\n\nexport default interface BottomSheetProps extends ComponentProps<{\n /**\n * Opacity for BackdropComponent\n * @default 0.5\n */\n backdropOpacity?: number;\n\n /**\n * View style to be applied to the background component. (only native)\n */\n backgroundStyle?: ExtendedStyle | ExtendedStyle[];\n\n /**\n * Border radius for bottom sheet\n */\n borderRadius?: number;\n\n /**\n * BottomSheet children, usually the included sub-components.\n */\n children?: React.ReactNode;\n\n /**\n * Enable dynamic sizing for content size.\n * @default true\n */\n enableDynamicSizing?: boolean;\n\n /**\n * Top element for displaying additional information on the bottom sheet.\n */\n topElement?: React.ReactNode;\n\n /**\n * Snap index. You could also provide -1 to bottom sheet in closed state.\n */\n index: number;\n\n /**\n * Maximum height(normalized value) of dialog\n * ex. 30% => 0.3 / 90% => 0.9\n * @default 0.8\n */\n maxHeightNormalizedRatio?: number;\n\n /**\n * Callback fired when the index is changed.\n * Important! Use memoized value.\n */\n onChange?: (newIndex: number) => void;\n\n /**\n * Points for the bottom sheet to snap to, points should be sorted from bottom to top.\n * Important! Use memoized value.\n * Only number type or string type(~% format) can be used.\n * @default []\n */\n snapPoints?: Array<number | string>;\n\n /**\n * View style to be applied to the content area.\n */\n style?: ExtendedStyle | ExtendedStyle[];\n}> {}\n"],"mappings":""}
@@ -1,6 +1,8 @@
1
- import React from 'react';
2
- import { Modal, Paper, StyleSheet, css, useTheme } from '@fountain-ui/core';
1
+ import React, { useState } from 'react';
2
+ import { useWindowDimensions, View } from 'react-native';
3
+ import { Column, css, Modal, StyleSheet, useTheme } from '@fountain-ui/core';
3
4
  import AnimatedY from '../AnimatedY';
5
+ import useDynamicSnapPoints from './useDynamicSnapPoints';
4
6
 
5
7
  const useStyles = function () {
6
8
  const theme = useTheme();
@@ -15,27 +17,49 @@ const useStyles = function () {
15
17
  width: '100%'
16
18
  },
17
19
  paper: {
18
- borderBottomLeftRadius: 0,
19
- borderBottomRightRadius: 0,
20
+ backgroundColor: theme.palette.surface.base,
21
+ borderTopLeftRadius: theme.shape.radius.xxl,
22
+ borderTopRightRadius: theme.shape.radius.xxl,
20
23
  flexGrow: 1,
21
- overflow: 'hidden'
24
+ minHeight: 325,
25
+ overflow: 'hidden',
26
+ paddingBottom: theme.spacing(6),
27
+ paddingTop: theme.spacing(5.5)
28
+ },
29
+ topElementLocation: {
30
+ position: 'absolute',
31
+ bottom: 0,
32
+ width: '100%'
22
33
  }
23
34
  };
24
35
  };
25
36
 
26
- const calculateHeight = points => {
27
- return points[points.length - 1] ?? 0;
28
- };
29
-
30
37
  export default function BottomSheet(props) {
31
38
  const {
32
39
  backdropOpacity,
40
+ borderRadius,
33
41
  children,
42
+ enableDynamicSizing = true,
43
+ topElement,
34
44
  index,
45
+ maxHeightNormalizedRatio = 0.8,
35
46
  onChange,
36
- snapPoints
47
+ snapPoints = [],
48
+ style: styleProp
37
49
  } = props;
38
50
  const styles = useStyles();
51
+ const {
52
+ height: windowHeight
53
+ } = useWindowDimensions();
54
+ const [topElementHeight, setTopElementHeight] = useState(0);
55
+ const maxDynamicContentSize = Math.round(windowHeight * maxHeightNormalizedRatio) - topElementHeight;
56
+
57
+ const handleTopElementLayout = event => {
58
+ const {
59
+ height
60
+ } = event.nativeEvent.layout;
61
+ setTopElementHeight(height);
62
+ };
39
63
 
40
64
  const handleClose = () => {
41
65
  if (onChange) {
@@ -43,21 +67,38 @@ export default function BottomSheet(props) {
43
67
  }
44
68
  };
45
69
 
46
- const height = calculateHeight(snapPoints);
47
- const translateY = height - (snapPoints[index] ?? 0);
70
+ const {
71
+ convertedSnapPoints,
72
+ handleLayout,
73
+ highestSnapPoint
74
+ } = useDynamicSnapPoints({
75
+ enableDynamicSizing,
76
+ maxDynamicContentSize,
77
+ snapPoints
78
+ });
79
+ const translateY = highestSnapPoint - (convertedSnapPoints[index] ?? 0);
80
+ const contentStyles = css([styles.paper, { ...(borderRadius ? {
81
+ borderTopLeftRadius: borderRadius,
82
+ borderTopRightRadius: borderRadius
83
+ } : {}),
84
+ ...(highestSnapPoint !== maxDynamicContentSize ? {
85
+ height: highestSnapPoint
86
+ } : {}),
87
+ maxHeight: maxDynamicContentSize
88
+ }, styleProp]);
48
89
  return /*#__PURE__*/React.createElement(Modal, {
49
90
  backdropOpacity: backdropOpacity,
50
91
  onClose: handleClose,
51
92
  visible: index >= 0,
52
93
  style: css([StyleSheet.absoluteFill, styles.root])
53
94
  }, /*#__PURE__*/React.createElement(AnimatedY, {
54
- style: styles.animated,
55
95
  translateY: translateY
56
- }, /*#__PURE__*/React.createElement(Paper, {
57
- elevation: 12,
58
- style: [styles.paper, {
59
- height
60
- }]
96
+ }, topElement ? /*#__PURE__*/React.createElement(Column, {
97
+ onLayout: handleTopElementLayout,
98
+ style: styles.topElementLocation
99
+ }, topElement) : null, /*#__PURE__*/React.createElement(View, {
100
+ onLayout: handleLayout,
101
+ style: contentStyles
61
102
  }, children)));
62
103
  }
63
104
  ;