@fountain-ui/core 2.0.0-beta.9 → 2.0.0-beta.90

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 (573) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/commonjs/Accordion/Accordion.js +110 -27
  3. package/build/commonjs/Accordion/Accordion.js.map +1 -1
  4. package/build/commonjs/Accordion/AccordionProps.js.map +1 -1
  5. package/build/commonjs/Badge/Badge.js +5 -14
  6. package/build/commonjs/Badge/Badge.js.map +1 -1
  7. package/build/commonjs/Badge/BadgeProps.js.map +1 -1
  8. package/build/commonjs/Button/Button.js +6 -3
  9. package/build/commonjs/Button/Button.js.map +1 -1
  10. package/build/commonjs/ButtonBase/ButtonBase.js +65 -51
  11. package/build/commonjs/ButtonBase/ButtonBase.js.map +1 -1
  12. package/build/commonjs/ButtonBase/ButtonBaseProps.js.map +1 -1
  13. package/build/commonjs/Checkbox/CheckboxProps.js.map +1 -1
  14. package/build/commonjs/Chip/Chip.js +11 -9
  15. package/build/commonjs/Chip/Chip.js.map +1 -1
  16. package/build/commonjs/Chip/ChipProps.js.map +1 -1
  17. package/build/commonjs/CircularProgress/CircularProgress.js +27 -28
  18. package/build/commonjs/CircularProgress/CircularProgress.js.map +1 -1
  19. package/build/commonjs/Dialog/Dialog.js +118 -10
  20. package/build/commonjs/Dialog/Dialog.js.map +1 -1
  21. package/build/commonjs/Dialog/DialogProps.js.map +1 -1
  22. package/build/commonjs/Divider/Divider.js +26 -18
  23. package/build/commonjs/Divider/Divider.js.map +1 -1
  24. package/build/commonjs/Divider/DividerProps.js.map +1 -1
  25. package/build/commonjs/Image/Image.js +58 -14
  26. package/build/commonjs/Image/Image.js.map +1 -1
  27. package/build/commonjs/Image/ImageProps.js.map +1 -1
  28. package/build/commonjs/Image/index.js.map +1 -1
  29. package/build/commonjs/ImageCore/ImageCoreNative.js +36 -26
  30. package/build/commonjs/ImageCore/ImageCoreNative.js.map +1 -1
  31. package/build/commonjs/ImageCore/ImageCoreProps.js.map +1 -1
  32. package/build/commonjs/ImageCore/ImageCoreWeb.js +19 -1
  33. package/build/commonjs/ImageCore/ImageCoreWeb.js.map +1 -1
  34. package/build/commonjs/ImageCore/ImageFileExtensionContext.js +14 -0
  35. package/build/commonjs/ImageCore/ImageFileExtensionContext.js.map +1 -0
  36. package/build/commonjs/ImageCore/ImageFileExtensionProvider.js +42 -0
  37. package/build/commonjs/ImageCore/ImageFileExtensionProvider.js.map +1 -0
  38. package/build/commonjs/ImageCore/index.js +17 -5
  39. package/build/commonjs/ImageCore/index.js.map +1 -1
  40. package/build/commonjs/ImageCore/index.native.js +27 -0
  41. package/build/commonjs/ImageCore/index.native.js.map +1 -1
  42. package/build/commonjs/Modal/AnimatedContainer/index.js +167 -0
  43. package/build/commonjs/Modal/AnimatedContainer/index.js.map +1 -0
  44. package/build/commonjs/Modal/Modal.js +43 -9
  45. package/build/commonjs/Modal/Modal.js.map +1 -1
  46. package/build/commonjs/Modal/ModalProps.js +12 -0
  47. package/build/commonjs/Modal/ModalProps.js.map +1 -1
  48. package/build/commonjs/Modal/index.js +8 -0
  49. package/build/commonjs/Modal/index.js.map +1 -1
  50. package/build/commonjs/Paper/Paper.js +1 -1
  51. package/build/commonjs/Paper/Paper.js.map +1 -1
  52. package/build/commonjs/Radio/Radio.js +11 -4
  53. package/build/commonjs/Radio/Radio.js.map +1 -1
  54. package/build/commonjs/Radio/RadioProps.js.map +1 -1
  55. package/build/commonjs/Slide/Slide.js +41 -27
  56. package/build/commonjs/Slide/Slide.js.map +1 -1
  57. package/build/commonjs/Slide/SlideProps.js.map +1 -1
  58. package/build/commonjs/Snackbar/Snackbar.js +34 -7
  59. package/build/commonjs/Snackbar/Snackbar.js.map +1 -1
  60. package/build/commonjs/Snackbar/SnackbarProps.js.map +1 -1
  61. package/build/commonjs/SnackbarContent/SnackbarContent.js +32 -14
  62. package/build/commonjs/SnackbarContent/SnackbarContent.js.map +1 -1
  63. package/build/commonjs/SnackbarContent/SnackbarContentProps.js.map +1 -1
  64. package/build/commonjs/SvgIcon/SvgIcon.js +1 -1
  65. package/build/commonjs/SvgIcon/SvgIcon.js.map +1 -1
  66. package/build/commonjs/Tab/Tab.js +66 -20
  67. package/build/commonjs/Tab/Tab.js.map +1 -1
  68. package/build/commonjs/Tab/TabIndicator.js +11 -7
  69. package/build/commonjs/Tab/TabIndicator.js.map +1 -1
  70. package/build/commonjs/Tab/TabProps.js.map +1 -1
  71. package/build/commonjs/Tab/index.js.map +1 -1
  72. package/build/commonjs/Tabs/IndexAwareTab.js +35 -0
  73. package/build/commonjs/Tabs/IndexAwareTab.js.map +1 -0
  74. package/build/commonjs/Tabs/InternalContext.js +17 -0
  75. package/build/commonjs/Tabs/InternalContext.js.map +1 -0
  76. package/build/commonjs/Tabs/ScrollableTabsView.js +35 -0
  77. package/build/commonjs/Tabs/ScrollableTabsView.js.map +1 -0
  78. package/build/commonjs/Tabs/TabIndicator.js +73 -28
  79. package/build/commonjs/Tabs/TabIndicator.js.map +1 -1
  80. package/build/commonjs/Tabs/TabIndicatorProps.js.map +1 -1
  81. package/build/commonjs/Tabs/Tabs.js +119 -83
  82. package/build/commonjs/Tabs/Tabs.js.map +1 -1
  83. package/build/commonjs/Tabs/TabsProps.js.map +1 -1
  84. package/build/commonjs/Tabs/index.js.map +1 -1
  85. package/build/commonjs/Tabs/types.js +2 -0
  86. package/build/commonjs/Tabs/types.js.map +1 -0
  87. package/build/commonjs/Tabs/useIndexStore.js +35 -0
  88. package/build/commonjs/Tabs/useIndexStore.js.map +1 -0
  89. package/build/commonjs/Tabs/useScrollViewReaction.js +69 -0
  90. package/build/commonjs/Tabs/useScrollViewReaction.js.map +1 -0
  91. package/build/commonjs/Tabs/useTabCoordinates.js +30 -0
  92. package/build/commonjs/Tabs/useTabCoordinates.js.map +1 -0
  93. package/build/commonjs/Tabs/useTabInnerContentsWidth.js +30 -0
  94. package/build/commonjs/Tabs/useTabInnerContentsWidth.js.map +1 -0
  95. package/build/commonjs/Tabs/utils.js +19 -0
  96. package/build/commonjs/Tabs/utils.js.map +1 -0
  97. package/build/commonjs/TextField/InputLabel.js +6 -3
  98. package/build/commonjs/TextField/InputLabel.js.map +1 -1
  99. package/build/commonjs/TextField/OutlinedTextField.js +6 -2
  100. package/build/commonjs/TextField/OutlinedTextField.js.map +1 -1
  101. package/build/commonjs/TextField/TextField.js +15 -8
  102. package/build/commonjs/TextField/TextField.js.map +1 -1
  103. package/build/commonjs/TextField/TextFieldProps.js.map +1 -1
  104. package/build/commonjs/Tooltip/Tooltip.js +50 -31
  105. package/build/commonjs/Tooltip/Tooltip.js.map +1 -1
  106. package/build/commonjs/Tooltip/TooltipProps.js.map +1 -1
  107. package/build/commonjs/Typography/Typography.js +14 -5
  108. package/build/commonjs/Typography/Typography.js.map +1 -1
  109. package/build/commonjs/Typography/TypographyProps.js.map +1 -1
  110. package/build/commonjs/animated/AnimatedPressable.js +2 -3
  111. package/build/commonjs/animated/AnimatedPressable.js.map +1 -1
  112. package/build/commonjs/hooks/index.js +32 -0
  113. package/build/commonjs/hooks/index.js.map +1 -1
  114. package/build/commonjs/hooks/useAnimatedValue.js +31 -0
  115. package/build/commonjs/hooks/useAnimatedValue.js.map +1 -0
  116. package/build/commonjs/hooks/useCollapsibleAppBar.js +41 -54
  117. package/build/commonjs/hooks/useCollapsibleAppBar.js.map +1 -1
  118. package/build/commonjs/hooks/useDebounce.js +33 -0
  119. package/build/commonjs/hooks/useDebounce.js.map +1 -0
  120. package/build/commonjs/hooks/useFadeInAppBar.js +21 -23
  121. package/build/commonjs/hooks/useFadeInAppBar.js.map +1 -1
  122. package/build/commonjs/hooks/useImperativeState.js +26 -0
  123. package/build/commonjs/hooks/useImperativeState.js.map +1 -0
  124. package/build/commonjs/hooks/useSyncAnimatedValue.js +40 -0
  125. package/build/commonjs/hooks/useSyncAnimatedValue.js.map +1 -0
  126. package/build/commonjs/hooks/useThrottle.js +3 -7
  127. package/build/commonjs/hooks/useThrottle.js.map +1 -1
  128. package/build/commonjs/hooks/useValidWindowDimensions/index.ios.js +14 -7
  129. package/build/commonjs/hooks/useValidWindowDimensions/index.ios.js.map +1 -1
  130. package/build/commonjs/index.js +28 -0
  131. package/build/commonjs/index.js.map +1 -1
  132. package/build/commonjs/internal/hooks/index.js +0 -8
  133. package/build/commonjs/internal/hooks/index.js.map +1 -1
  134. package/build/commonjs/internal/hooks/useHeight.js +3 -9
  135. package/build/commonjs/internal/hooks/useHeight.js.map +1 -1
  136. package/build/commonjs/internal/icons/Checkbox.js +1 -1
  137. package/build/commonjs/internal/icons/Checkbox.js.map +1 -1
  138. package/build/commonjs/internal/icons/CheckboxChecked.js +1 -1
  139. package/build/commonjs/internal/icons/CheckboxChecked.js.map +1 -1
  140. package/build/commonjs/internal/icons/ChevronDown.js +1 -1
  141. package/build/commonjs/internal/icons/ChevronDown.js.map +1 -1
  142. package/build/commonjs/internal/icons/ChevronLeft.js +1 -1
  143. package/build/commonjs/internal/icons/ChevronLeft.js.map +1 -1
  144. package/build/commonjs/internal/icons/ChevronRight.js +1 -1
  145. package/build/commonjs/internal/icons/ChevronRight.js.map +1 -1
  146. package/build/commonjs/internal/icons/Close.js +1 -1
  147. package/build/commonjs/internal/icons/Close.js.map +1 -1
  148. package/build/commonjs/internal/icons/Radio.js +1 -1
  149. package/build/commonjs/internal/icons/Radio.js.map +1 -1
  150. package/build/commonjs/internal/icons/RadioChecked.js +1 -1
  151. package/build/commonjs/internal/icons/RadioChecked.js.map +1 -1
  152. package/build/commonjs/store/MockStore.js +27 -0
  153. package/build/commonjs/store/MockStore.js.map +1 -0
  154. package/build/commonjs/store/SimpleStore.js +59 -0
  155. package/build/commonjs/store/SimpleStore.js.map +1 -0
  156. package/build/commonjs/store/index.js +24 -0
  157. package/build/commonjs/store/index.js.map +1 -0
  158. package/build/commonjs/store/types.js +2 -0
  159. package/build/commonjs/store/types.js.map +1 -0
  160. package/build/commonjs/types/index.js.map +1 -1
  161. package/build/commonjs/utils/index.js +8 -0
  162. package/build/commonjs/utils/index.js.map +1 -1
  163. package/build/commonjs/utils/isNotAndroid12.js +20 -0
  164. package/build/commonjs/utils/isNotAndroid12.js.map +1 -0
  165. package/build/module/Accordion/Accordion.js +111 -29
  166. package/build/module/Accordion/Accordion.js.map +1 -1
  167. package/build/module/Accordion/AccordionProps.js.map +1 -1
  168. package/build/module/Badge/Badge.js +5 -14
  169. package/build/module/Badge/Badge.js.map +1 -1
  170. package/build/module/Badge/BadgeProps.js.map +1 -1
  171. package/build/module/Button/Button.js +6 -3
  172. package/build/module/Button/Button.js.map +1 -1
  173. package/build/module/ButtonBase/ButtonBase.js +64 -49
  174. package/build/module/ButtonBase/ButtonBase.js.map +1 -1
  175. package/build/module/ButtonBase/ButtonBaseProps.js.map +1 -1
  176. package/build/module/Checkbox/CheckboxProps.js.map +1 -1
  177. package/build/module/Chip/Chip.js +11 -9
  178. package/build/module/Chip/Chip.js.map +1 -1
  179. package/build/module/Chip/ChipProps.js.map +1 -1
  180. package/build/module/CircularProgress/CircularProgress.js +25 -23
  181. package/build/module/CircularProgress/CircularProgress.js.map +1 -1
  182. package/build/module/Dialog/Dialog.js +109 -8
  183. package/build/module/Dialog/Dialog.js.map +1 -1
  184. package/build/module/Dialog/DialogProps.js.map +1 -1
  185. package/build/module/Divider/Divider.js +26 -18
  186. package/build/module/Divider/Divider.js.map +1 -1
  187. package/build/module/Divider/DividerProps.js.map +1 -1
  188. package/build/module/Image/Image.js +54 -12
  189. package/build/module/Image/Image.js.map +1 -1
  190. package/build/module/Image/ImageProps.js.map +1 -1
  191. package/build/module/Image/index.js.map +1 -1
  192. package/build/module/ImageCore/ImageCoreNative.js +31 -25
  193. package/build/module/ImageCore/ImageCoreNative.js.map +1 -1
  194. package/build/module/ImageCore/ImageCoreProps.js.map +1 -1
  195. package/build/module/ImageCore/ImageCoreWeb.js +19 -1
  196. package/build/module/ImageCore/ImageCoreWeb.js.map +1 -1
  197. package/build/module/ImageCore/ImageFileExtensionContext.js +5 -0
  198. package/build/module/ImageCore/ImageFileExtensionContext.js.map +1 -0
  199. package/build/module/ImageCore/ImageFileExtensionProvider.js +24 -0
  200. package/build/module/ImageCore/ImageFileExtensionProvider.js.map +1 -0
  201. package/build/module/ImageCore/index.js +2 -1
  202. package/build/module/ImageCore/index.js.map +1 -1
  203. package/build/module/ImageCore/index.native.js +2 -0
  204. package/build/module/ImageCore/index.native.js.map +1 -1
  205. package/build/module/Modal/AnimatedContainer/index.js +144 -0
  206. package/build/module/Modal/AnimatedContainer/index.js.map +1 -0
  207. package/build/module/Modal/Modal.js +43 -9
  208. package/build/module/Modal/Modal.js.map +1 -1
  209. package/build/module/Modal/ModalProps.js +5 -0
  210. package/build/module/Modal/ModalProps.js.map +1 -1
  211. package/build/module/Modal/index.js +1 -0
  212. package/build/module/Modal/index.js.map +1 -1
  213. package/build/module/Paper/Paper.js +1 -1
  214. package/build/module/Paper/Paper.js.map +1 -1
  215. package/build/module/Radio/Radio.js +9 -5
  216. package/build/module/Radio/Radio.js.map +1 -1
  217. package/build/module/Radio/RadioProps.js.map +1 -1
  218. package/build/module/Slide/Slide.js +39 -23
  219. package/build/module/Slide/Slide.js.map +1 -1
  220. package/build/module/Slide/SlideProps.js.map +1 -1
  221. package/build/module/Snackbar/Snackbar.js +25 -5
  222. package/build/module/Snackbar/Snackbar.js.map +1 -1
  223. package/build/module/Snackbar/SnackbarProps.js.map +1 -1
  224. package/build/module/SnackbarContent/SnackbarContent.js +21 -6
  225. package/build/module/SnackbarContent/SnackbarContent.js.map +1 -1
  226. package/build/module/SnackbarContent/SnackbarContentProps.js.map +1 -1
  227. package/build/module/SvgIcon/SvgIcon.js +1 -1
  228. package/build/module/SvgIcon/SvgIcon.js.map +1 -1
  229. package/build/module/Tab/Tab.js +63 -21
  230. package/build/module/Tab/Tab.js.map +1 -1
  231. package/build/module/Tab/TabIndicator.js +11 -7
  232. package/build/module/Tab/TabIndicator.js.map +1 -1
  233. package/build/module/Tab/TabProps.js.map +1 -1
  234. package/build/module/Tab/index.js.map +1 -1
  235. package/build/module/Tabs/IndexAwareTab.js +23 -0
  236. package/build/module/Tabs/IndexAwareTab.js.map +1 -0
  237. package/build/module/Tabs/InternalContext.js +7 -0
  238. package/build/module/Tabs/InternalContext.js.map +1 -0
  239. package/build/module/Tabs/ScrollableTabsView.js +22 -0
  240. package/build/module/Tabs/ScrollableTabsView.js.map +1 -0
  241. package/build/module/Tabs/TabIndicator.js +66 -25
  242. package/build/module/Tabs/TabIndicator.js.map +1 -1
  243. package/build/module/Tabs/TabIndicatorProps.js.map +1 -1
  244. package/build/module/Tabs/Tabs.js +109 -72
  245. package/build/module/Tabs/Tabs.js.map +1 -1
  246. package/build/module/Tabs/TabsProps.js.map +1 -1
  247. package/build/module/Tabs/index.js.map +1 -1
  248. package/build/module/Tabs/types.js +2 -0
  249. package/build/module/Tabs/types.js.map +1 -0
  250. package/build/module/Tabs/useIndexStore.js +25 -0
  251. package/build/module/Tabs/useIndexStore.js.map +1 -0
  252. package/build/module/Tabs/useScrollViewReaction.js +57 -0
  253. package/build/module/Tabs/useScrollViewReaction.js.map +1 -0
  254. package/build/module/Tabs/useTabCoordinates.js +21 -0
  255. package/build/module/Tabs/useTabCoordinates.js.map +1 -0
  256. package/build/module/Tabs/useTabInnerContentsWidth.js +21 -0
  257. package/build/module/Tabs/useTabInnerContentsWidth.js.map +1 -0
  258. package/build/module/Tabs/utils.js +9 -0
  259. package/build/module/Tabs/utils.js.map +1 -0
  260. package/build/module/TextField/InputLabel.js +7 -4
  261. package/build/module/TextField/InputLabel.js.map +1 -1
  262. package/build/module/TextField/OutlinedTextField.js +7 -3
  263. package/build/module/TextField/OutlinedTextField.js.map +1 -1
  264. package/build/module/TextField/TextField.js +13 -5
  265. package/build/module/TextField/TextField.js.map +1 -1
  266. package/build/module/TextField/TextFieldProps.js.map +1 -1
  267. package/build/module/Tooltip/Tooltip.js +48 -25
  268. package/build/module/Tooltip/Tooltip.js.map +1 -1
  269. package/build/module/Tooltip/TooltipProps.js.map +1 -1
  270. package/build/module/Typography/Typography.js +14 -5
  271. package/build/module/Typography/Typography.js.map +1 -1
  272. package/build/module/Typography/TypographyProps.js.map +1 -1
  273. package/build/module/animated/AnimatedPressable.js +2 -3
  274. package/build/module/animated/AnimatedPressable.js.map +1 -1
  275. package/build/module/hooks/index.js +4 -0
  276. package/build/module/hooks/index.js.map +1 -1
  277. package/build/module/hooks/useAnimatedValue.js +22 -0
  278. package/build/module/hooks/useAnimatedValue.js.map +1 -0
  279. package/build/module/hooks/useCollapsibleAppBar.js +42 -52
  280. package/build/module/hooks/useCollapsibleAppBar.js.map +1 -1
  281. package/build/module/hooks/useDebounce.js +25 -0
  282. package/build/module/hooks/useDebounce.js.map +1 -0
  283. package/build/module/hooks/useFadeInAppBar.js +23 -20
  284. package/build/module/hooks/useFadeInAppBar.js.map +1 -1
  285. package/build/module/hooks/useImperativeState.js +17 -0
  286. package/build/module/hooks/useImperativeState.js.map +1 -0
  287. package/build/module/hooks/useSyncAnimatedValue.js +28 -0
  288. package/build/module/hooks/useSyncAnimatedValue.js.map +1 -0
  289. package/build/module/hooks/useThrottle.js +3 -3
  290. package/build/module/hooks/useThrottle.js.map +1 -1
  291. package/build/module/hooks/useValidWindowDimensions/index.ios.js +15 -9
  292. package/build/module/hooks/useValidWindowDimensions/index.ios.js.map +1 -1
  293. package/build/module/index.js +2 -0
  294. package/build/module/index.js.map +1 -1
  295. package/build/module/internal/hooks/index.js +0 -1
  296. package/build/module/internal/hooks/index.js.map +1 -1
  297. package/build/module/internal/hooks/useHeight.js +3 -4
  298. package/build/module/internal/hooks/useHeight.js.map +1 -1
  299. package/build/module/internal/icons/Checkbox.js +1 -1
  300. package/build/module/internal/icons/Checkbox.js.map +1 -1
  301. package/build/module/internal/icons/CheckboxChecked.js +1 -1
  302. package/build/module/internal/icons/CheckboxChecked.js.map +1 -1
  303. package/build/module/internal/icons/ChevronDown.js +1 -1
  304. package/build/module/internal/icons/ChevronDown.js.map +1 -1
  305. package/build/module/internal/icons/ChevronLeft.js +1 -1
  306. package/build/module/internal/icons/ChevronLeft.js.map +1 -1
  307. package/build/module/internal/icons/ChevronRight.js +1 -1
  308. package/build/module/internal/icons/ChevronRight.js.map +1 -1
  309. package/build/module/internal/icons/Close.js +1 -1
  310. package/build/module/internal/icons/Close.js.map +1 -1
  311. package/build/module/internal/icons/Radio.js +1 -1
  312. package/build/module/internal/icons/Radio.js.map +1 -1
  313. package/build/module/internal/icons/RadioChecked.js +1 -1
  314. package/build/module/internal/icons/RadioChecked.js.map +1 -1
  315. package/build/module/store/MockStore.js +18 -0
  316. package/build/module/store/MockStore.js.map +1 -0
  317. package/build/module/store/SimpleStore.js +50 -0
  318. package/build/module/store/SimpleStore.js.map +1 -0
  319. package/build/module/store/index.js +3 -0
  320. package/build/module/store/index.js.map +1 -0
  321. package/build/module/store/types.js +2 -0
  322. package/build/module/store/types.js.map +1 -0
  323. package/build/module/types/index.js.map +1 -1
  324. package/build/module/utils/index.js +1 -0
  325. package/build/module/utils/index.js.map +1 -1
  326. package/build/module/utils/isNotAndroid12.js +6 -0
  327. package/build/module/utils/isNotAndroid12.js.map +1 -0
  328. package/build/typescript/Accordion/Accordion.d.ts +1 -0
  329. package/build/typescript/Accordion/AccordionProps.d.ts +14 -11
  330. package/build/typescript/AspectRatio/AspectRatioNative.d.ts +1 -0
  331. package/build/typescript/AspectRatio/AspectRatioWeb.d.ts +1 -0
  332. package/build/typescript/Avatar/Avatar.d.ts +1 -0
  333. package/build/typescript/Badge/Badge.d.ts +1 -0
  334. package/build/typescript/Badge/BadgeProps.d.ts +5 -0
  335. package/build/typescript/Button/Button.d.ts +1 -0
  336. package/build/typescript/ButtonBase/ButtonBase.d.ts +1 -0
  337. package/build/typescript/ButtonBase/ButtonBaseProps.d.ts +8 -0
  338. package/build/typescript/Card/Card.d.ts +1 -0
  339. package/build/typescript/CardActions/CardActions.d.ts +1 -0
  340. package/build/typescript/CardContent/CardContent.d.ts +1 -0
  341. package/build/typescript/CardMedia/CardMedia.d.ts +1 -0
  342. package/build/typescript/Checkbox/Checkbox.d.ts +1 -0
  343. package/build/typescript/Checkbox/CheckboxProps.d.ts +1 -1
  344. package/build/typescript/Chip/Chip.d.ts +1 -0
  345. package/build/typescript/Chip/ChipProps.d.ts +4 -0
  346. package/build/typescript/CircularProgress/CircularProgress.d.ts +3 -2
  347. package/build/typescript/Column/Column.d.ts +1 -0
  348. package/build/typescript/Dialog/Dialog.d.ts +1 -0
  349. package/build/typescript/Dialog/DialogProps.d.ts +10 -0
  350. package/build/typescript/DialogActions/DialogActions.d.ts +1 -0
  351. package/build/typescript/DialogContent/DialogContent.d.ts +1 -0
  352. package/build/typescript/DialogMedia/DialogMedia.d.ts +1 -0
  353. package/build/typescript/DialogTitle/DialogTitle.d.ts +1 -0
  354. package/build/typescript/Divider/Divider.d.ts +1 -0
  355. package/build/typescript/Divider/DividerProps.d.ts +22 -1
  356. package/build/typescript/Fab/Fab.d.ts +1 -0
  357. package/build/typescript/Flexbox/Flexbox.d.ts +1 -0
  358. package/build/typescript/IconButton/IconButton.d.ts +1 -0
  359. package/build/typescript/Image/Image.d.ts +1 -0
  360. package/build/typescript/Image/ImageProps.d.ts +30 -2
  361. package/build/typescript/Image/index.d.ts +1 -1
  362. package/build/typescript/ImageCore/ImageCoreNative.d.ts +1 -0
  363. package/build/typescript/ImageCore/ImageCoreProps.d.ts +5 -1
  364. package/build/typescript/ImageCore/ImageCoreWeb.d.ts +1 -0
  365. package/build/typescript/ImageCore/ImageFileExtensionContext.d.ts +3 -0
  366. package/build/typescript/ImageCore/ImageFileExtensionProvider.d.ts +13 -0
  367. package/build/typescript/ImageCore/index.d.ts +3 -1
  368. package/build/typescript/ImageCore/index.native.d.ts +2 -0
  369. package/build/typescript/Link/Link.d.ts +1 -0
  370. package/build/typescript/List/List.d.ts +1 -0
  371. package/build/typescript/ListItem/ListItem.d.ts +1 -0
  372. package/build/typescript/ListItemIcon/ListItemIcon.d.ts +1 -0
  373. package/build/typescript/ListItemSecondaryAction/ListItemSecondaryAction.d.ts +1 -0
  374. package/build/typescript/ListItemText/ListItemText.d.ts +1 -0
  375. package/build/typescript/ListSubheader/ListSubheader.d.ts +1 -0
  376. package/build/typescript/Menu/Menu.d.ts +1 -0
  377. package/build/typescript/MenuItem/MenuItem.d.ts +1 -0
  378. package/build/typescript/Modal/AnimatedContainer/index.d.ts +5 -0
  379. package/build/typescript/Modal/Modal.d.ts +1 -0
  380. package/build/typescript/Modal/ModalProps.d.ts +47 -0
  381. package/build/typescript/Modal/index.d.ts +2 -1
  382. package/build/typescript/Pagination/Pagination.d.ts +1 -0
  383. package/build/typescript/Portal/Portal.d.ts +1 -0
  384. package/build/typescript/Radio/Radio.d.ts +1 -0
  385. package/build/typescript/Radio/RadioProps.d.ts +13 -0
  386. package/build/typescript/RadioGroup/RadioGroup.d.ts +1 -0
  387. package/build/typescript/Row/Row.d.ts +1 -0
  388. package/build/typescript/Slide/Slide.d.ts +1 -0
  389. package/build/typescript/Slide/SlideProps.d.ts +2 -3
  390. package/build/typescript/Slider/Slider.d.ts +1 -1
  391. package/build/typescript/Snackbar/Snackbar.d.ts +1 -0
  392. package/build/typescript/Snackbar/SnackbarProps.d.ts +10 -3
  393. package/build/typescript/SnackbarContent/SnackbarContent.d.ts +1 -0
  394. package/build/typescript/SnackbarContent/SnackbarContentProps.d.ts +9 -0
  395. package/build/typescript/Spacer/Spacer.d.ts +1 -0
  396. package/build/typescript/SvgIcon/SvgIcon.d.ts +1 -0
  397. package/build/typescript/Switch/Switch.d.ts +1 -0
  398. package/build/typescript/Tab/Tab.d.ts +1 -0
  399. package/build/typescript/Tab/TabIndicator.d.ts +5 -1
  400. package/build/typescript/Tab/TabProps.d.ts +21 -2
  401. package/build/typescript/Tab/index.d.ts +1 -1
  402. package/build/typescript/TabBase/TabBase.d.ts +1 -0
  403. package/build/typescript/Tabs/IndexAwareTab.d.ts +8 -0
  404. package/build/typescript/Tabs/InternalContext.d.ts +7 -0
  405. package/build/typescript/Tabs/ScrollableTabsView.d.ts +8 -0
  406. package/build/typescript/Tabs/TabIndicator.d.ts +1 -0
  407. package/build/typescript/Tabs/TabIndicatorProps.d.ts +10 -5
  408. package/build/typescript/Tabs/Tabs.d.ts +4 -1
  409. package/build/typescript/Tabs/TabsProps.d.ts +37 -13
  410. package/build/typescript/Tabs/index.d.ts +1 -0
  411. package/build/typescript/Tabs/types.d.ts +9 -0
  412. package/build/typescript/Tabs/useIndexStore.d.ts +3 -0
  413. package/build/typescript/Tabs/useScrollViewReaction.d.ts +8 -0
  414. package/build/typescript/Tabs/useTabCoordinates.d.ts +6 -0
  415. package/build/typescript/Tabs/useTabInnerContentsWidth.d.ts +6 -0
  416. package/build/typescript/Tabs/utils.d.ts +3 -0
  417. package/build/typescript/TextField/InputLabel.d.ts +1 -0
  418. package/build/typescript/TextField/TextFieldProps.d.ts +3 -0
  419. package/build/typescript/Toolbar/Toolbar.d.ts +1 -0
  420. package/build/typescript/Tooltip/Tooltip.d.ts +1 -0
  421. package/build/typescript/Tooltip/TooltipProps.d.ts +26 -1
  422. package/build/typescript/Typography/TypographyProps.d.ts +22 -1
  423. package/build/typescript/animated/AnimatedPressable.d.ts +2 -2
  424. package/build/typescript/hooks/index.d.ts +5 -0
  425. package/build/typescript/hooks/useAnimatedValue.d.ts +2 -0
  426. package/build/typescript/hooks/useCollapsibleAppBar.d.ts +2 -0
  427. package/build/typescript/hooks/useDebounce.d.ts +1 -0
  428. package/build/typescript/hooks/useFadeInAppBar.d.ts +1 -0
  429. package/build/typescript/hooks/useImperativeState.d.ts +6 -0
  430. package/build/typescript/hooks/useSyncAnimatedValue.d.ts +6 -0
  431. package/build/typescript/hooks/useValidWindowDimensions/index.ios.d.ts +2 -1
  432. package/build/typescript/index.d.ts +2 -0
  433. package/build/typescript/internal/hooks/index.d.ts +0 -1
  434. package/build/typescript/internal/icons/Checkbox.d.ts +9 -7
  435. package/build/typescript/internal/icons/CheckboxChecked.d.ts +9 -7
  436. package/build/typescript/internal/icons/ChevronDown.d.ts +9 -7
  437. package/build/typescript/internal/icons/ChevronLeft.d.ts +9 -7
  438. package/build/typescript/internal/icons/ChevronRight.d.ts +9 -7
  439. package/build/typescript/internal/icons/CircularProgress.d.ts +1 -0
  440. package/build/typescript/internal/icons/Close.d.ts +9 -7
  441. package/build/typescript/internal/icons/Radio.d.ts +9 -7
  442. package/build/typescript/internal/icons/RadioChecked.d.ts +9 -7
  443. package/build/typescript/store/MockStore.d.ts +7 -0
  444. package/build/typescript/store/SimpleStore.d.ts +10 -0
  445. package/build/typescript/store/index.d.ts +3 -0
  446. package/build/typescript/store/types.d.ts +10 -0
  447. package/build/typescript/types/index.d.ts +6 -0
  448. package/build/typescript/utils/index.d.ts +1 -0
  449. package/build/typescript/utils/isNotAndroid12.d.ts +2 -0
  450. package/package.json +9 -9
  451. package/src/Accordion/Accordion.tsx +147 -51
  452. package/src/Accordion/AccordionProps.ts +15 -11
  453. package/src/Badge/Badge.tsx +6 -16
  454. package/src/Badge/BadgeProps.ts +6 -0
  455. package/src/Button/Button.tsx +8 -2
  456. package/src/ButtonBase/ButtonBase.tsx +79 -44
  457. package/src/ButtonBase/ButtonBaseProps.ts +10 -0
  458. package/src/Checkbox/CheckboxProps.ts +1 -1
  459. package/src/Chip/Chip.tsx +13 -9
  460. package/src/Chip/ChipProps.ts +5 -0
  461. package/src/CircularProgress/CircularProgress.tsx +41 -33
  462. package/src/Dialog/Dialog.tsx +136 -14
  463. package/src/Dialog/DialogProps.ts +12 -0
  464. package/src/Divider/Divider.tsx +23 -14
  465. package/src/Divider/DividerProps.ts +27 -1
  466. package/src/Image/Image.tsx +78 -16
  467. package/src/Image/ImageProps.ts +36 -2
  468. package/src/Image/index.ts +1 -1
  469. package/src/ImageCore/ImageCoreNative.tsx +29 -19
  470. package/src/ImageCore/ImageCoreProps.ts +6 -1
  471. package/src/ImageCore/ImageCoreWeb.tsx +22 -2
  472. package/src/ImageCore/ImageFileExtensionContext.ts +7 -0
  473. package/src/ImageCore/ImageFileExtensionProvider.tsx +33 -0
  474. package/src/ImageCore/index.native.ts +3 -1
  475. package/src/ImageCore/index.ts +4 -1
  476. package/src/Modal/AnimatedContainer/index.tsx +172 -0
  477. package/src/Modal/Modal.tsx +44 -12
  478. package/src/Modal/ModalProps.ts +59 -1
  479. package/src/Modal/index.ts +2 -1
  480. package/src/Paper/Paper.tsx +1 -1
  481. package/src/Radio/Radio.tsx +10 -7
  482. package/src/Radio/RadioProps.ts +16 -0
  483. package/src/Slide/Slide.tsx +33 -27
  484. package/src/Slide/SlideProps.ts +2 -3
  485. package/src/Snackbar/Snackbar.tsx +33 -7
  486. package/src/Snackbar/SnackbarProps.ts +19 -9
  487. package/src/SnackbarContent/SnackbarContent.tsx +42 -10
  488. package/src/SnackbarContent/SnackbarContentProps.ts +14 -3
  489. package/src/SvgIcon/SvgIcon.tsx +1 -1
  490. package/src/Tab/Tab.tsx +85 -28
  491. package/src/Tab/TabIndicator.tsx +17 -15
  492. package/src/Tab/TabProps.ts +24 -2
  493. package/src/Tab/index.ts +1 -1
  494. package/src/Tabs/IndexAwareTab.tsx +29 -0
  495. package/src/Tabs/InternalContext.ts +13 -0
  496. package/src/Tabs/ScrollableTabsView.tsx +28 -0
  497. package/src/Tabs/TabIndicator.tsx +74 -37
  498. package/src/Tabs/TabIndicatorProps.ts +12 -5
  499. package/src/Tabs/Tabs.tsx +139 -93
  500. package/src/Tabs/TabsProps.ts +43 -23
  501. package/src/Tabs/index.ts +2 -1
  502. package/src/Tabs/types.ts +18 -0
  503. package/src/Tabs/useIndexStore.ts +31 -0
  504. package/src/Tabs/useScrollViewReaction.ts +62 -0
  505. package/src/Tabs/useTabCoordinates.ts +25 -0
  506. package/src/Tabs/useTabInnerContentsWidth.ts +26 -0
  507. package/src/Tabs/utils.ts +14 -0
  508. package/src/TextField/InputLabel.tsx +6 -1
  509. package/src/TextField/OutlinedTextField.tsx +8 -2
  510. package/src/TextField/TextField.tsx +10 -4
  511. package/src/TextField/TextFieldProps.ts +4 -0
  512. package/src/Tooltip/Tooltip.tsx +57 -26
  513. package/src/Tooltip/TooltipProps.ts +26 -1
  514. package/src/Typography/Typography.tsx +12 -3
  515. package/src/Typography/TypographyProps.ts +30 -1
  516. package/src/animated/AnimatedPressable.tsx +1 -2
  517. package/src/hooks/index.ts +6 -0
  518. package/src/hooks/useAnimatedValue.ts +21 -0
  519. package/src/hooks/useCollapsibleAppBar.ts +64 -47
  520. package/src/hooks/useDebounce.ts +23 -0
  521. package/src/hooks/useFadeInAppBar.ts +23 -17
  522. package/src/hooks/useImperativeState.ts +24 -0
  523. package/src/hooks/useSyncAnimatedValue.ts +38 -0
  524. package/src/hooks/useThrottle.ts +3 -3
  525. package/src/hooks/useValidWindowDimensions/index.ios.ts +16 -10
  526. package/src/index.ts +4 -0
  527. package/src/internal/hooks/index.ts +0 -1
  528. package/src/internal/hooks/useHeight.ts +4 -5
  529. package/src/internal/icons/Checkbox.tsx +1 -1
  530. package/src/internal/icons/CheckboxChecked.tsx +1 -1
  531. package/src/internal/icons/ChevronDown.tsx +1 -1
  532. package/src/internal/icons/ChevronLeft.tsx +1 -1
  533. package/src/internal/icons/ChevronRight.tsx +1 -1
  534. package/src/internal/icons/Close.tsx +1 -1
  535. package/src/internal/icons/Radio.tsx +1 -1
  536. package/src/internal/icons/RadioChecked.tsx +1 -1
  537. package/src/store/MockStore.ts +21 -0
  538. package/src/store/SimpleStore.ts +50 -0
  539. package/src/store/index.ts +3 -0
  540. package/src/store/types.ts +12 -0
  541. package/src/types/index.ts +7 -0
  542. package/src/utils/index.ts +1 -0
  543. package/src/utils/isNotAndroid12.ts +7 -0
  544. package/build/commonjs/ButtonBase/ButtonBase.ios.js +0 -101
  545. package/build/commonjs/ButtonBase/ButtonBase.ios.js.map +0 -1
  546. package/build/commonjs/ButtonBase/useDisabledReaction/index.js +0 -21
  547. package/build/commonjs/ButtonBase/useDisabledReaction/index.js.map +0 -1
  548. package/build/commonjs/ButtonBase/useDisabledReaction/index.native.js +0 -9
  549. package/build/commonjs/ButtonBase/useDisabledReaction/index.native.js.map +0 -1
  550. package/build/commonjs/ImageCore/ImageCoreNative.ios.js +0 -60
  551. package/build/commonjs/ImageCore/ImageCoreNative.ios.js.map +0 -1
  552. package/build/commonjs/internal/hooks/useWidth.js +0 -29
  553. package/build/commonjs/internal/hooks/useWidth.js.map +0 -1
  554. package/build/module/ButtonBase/ButtonBase.ios.js +0 -82
  555. package/build/module/ButtonBase/ButtonBase.ios.js.map +0 -1
  556. package/build/module/ButtonBase/useDisabledReaction/index.js +0 -12
  557. package/build/module/ButtonBase/useDisabledReaction/index.js.map +0 -1
  558. package/build/module/ButtonBase/useDisabledReaction/index.native.js +0 -2
  559. package/build/module/ButtonBase/useDisabledReaction/index.native.js.map +0 -1
  560. package/build/module/ImageCore/ImageCoreNative.ios.js +0 -45
  561. package/build/module/ImageCore/ImageCoreNative.ios.js.map +0 -1
  562. package/build/module/internal/hooks/useWidth.js +0 -15
  563. package/build/module/internal/hooks/useWidth.js.map +0 -1
  564. package/build/typescript/ButtonBase/ButtonBase.ios.d.ts +0 -2
  565. package/build/typescript/ButtonBase/useDisabledReaction/index.d.ts +0 -2
  566. package/build/typescript/ButtonBase/useDisabledReaction/index.native.d.ts +0 -2
  567. package/build/typescript/ImageCore/ImageCoreNative.ios.d.ts +0 -2
  568. package/build/typescript/internal/hooks/useWidth.d.ts +0 -2
  569. package/src/ButtonBase/ButtonBase.ios.tsx +0 -95
  570. package/src/ButtonBase/useDisabledReaction/index.native.ts +0 -4
  571. package/src/ButtonBase/useDisabledReaction/index.ts +0 -16
  572. package/src/ImageCore/ImageCoreNative.ios.tsx +0 -46
  573. package/src/internal/hooks/useWidth.ts +0 -17
@@ -1,5 +1,15 @@
1
- import React from 'react';
2
- import { Falsy, Keyboard, Platform, RegisteredStyle, ScrollViewProps, ViewProps, ViewStyle } from 'react-native';
1
+ import { useCallback, useRef } from 'react';
2
+ import {
3
+ Falsy,
4
+ Keyboard,
5
+ Platform,
6
+ RegisteredStyle,
7
+ ScrollViewProps,
8
+ StyleSheet,
9
+ ViewProps,
10
+ ViewStyle,
11
+ } from 'react-native';
12
+ import type { WithTimingConfig } from 'react-native-reanimated';
3
13
  import {
4
14
  runOnJS,
5
15
  useAnimatedScrollHandler,
@@ -9,8 +19,8 @@ import {
9
19
  withTiming,
10
20
  } from 'react-native-reanimated';
11
21
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
22
+ import { useTheme } from '@fountain-ui/styles';
12
23
  import { useHeight } from '../internal/hooks';
13
- import useElevationStyle from './useElevationStyle';
14
24
  import useAppbarStyles from './useAppbarStyles';
15
25
 
16
26
  type WebOnlyStyle = { boxShadow: any };
@@ -30,6 +40,8 @@ export interface ContentInsets {
30
40
 
31
41
  export interface Options {
32
42
  keyboardDismissMode?: 'none' | 'on-drag';
43
+ dividerExposureMode?: 'always' | 'overlapped';
44
+ supportsReverseScroll?: boolean;
33
45
  }
34
46
 
35
47
  export interface CollapsibleAppBar {
@@ -43,14 +55,18 @@ export interface CollapsibleAppBar {
43
55
 
44
56
  const defaultOptions: Required<Options> = {
45
57
  keyboardDismissMode: 'none',
58
+ dividerExposureMode: 'overlapped',
59
+ supportsReverseScroll: true,
46
60
  };
47
61
 
48
- const ANIMATION_DURATION_MILLIS = 100;
62
+ const ANIMATION_CONFIG: Readonly<WithTimingConfig> = { duration: 100 };
63
+ const TRANSPARENT = '#FFFFFF00';
49
64
 
50
65
  const SUPPORTS_DRAG_DETECTION = Platform.OS !== 'web';
66
+ const dismissKeyboard = () => Keyboard.dismiss();
51
67
 
52
68
  export default function useCollapsibleAppBar(userOptions: Options = defaultOptions): CollapsibleAppBar {
53
- const { keyboardDismissMode }: Required<Options> = {
69
+ const { keyboardDismissMode, dividerExposureMode, supportsReverseScroll }: Required<Options> = {
54
70
  ...defaultOptions,
55
71
  ...userOptions,
56
72
  };
@@ -62,32 +78,32 @@ export default function useCollapsibleAppBar(userOptions: Options = defaultOptio
62
78
  const [appBarHeight, onAppBarLayout] = useHeight();
63
79
  const [collapsibleToolbarHeight, onCollapsibleToolbarLayout] = useHeight();
64
80
 
65
- const maxTranslateY = useDerivedValue(() => -collapsibleToolbarHeight);
81
+ const maxTranslateY = useDerivedValue(() => -collapsibleToolbarHeight, [collapsibleToolbarHeight]);
66
82
 
67
83
  const translateY = useSharedValue<number>(0);
68
84
  const lastTranslateY = useSharedValue<number>(0);
69
85
  const lastOffsetY = useSharedValue<number>(0);
70
86
  const overlapped = useSharedValue<boolean>(false);
71
87
 
72
- const elevationStyle = useElevationStyle(4);
88
+ const theme = useTheme();
89
+
73
90
  const animatedStyle = useAnimatedStyle(() => {
74
- return Platform.OS === 'web' ? ({
75
- transform: [{ translateY: translateY.value }],
76
- boxShadow: overlapped.value ? elevationStyle?.boxShadow : 0,
77
- }) : ({
78
- transform: [{ translateY: translateY.value }],
79
- elevation: overlapped.value ? elevationStyle?.elevation : 0,
80
- shadowColor: elevationStyle?.shadowColor,
81
- shadowOffset: elevationStyle?.shadowOffset,
82
- shadowRadius: elevationStyle?.shadowRadius,
83
- shadowOpacity: overlapped.value ? elevationStyle?.shadowOpacity : 0,
84
- });
85
- });
86
-
87
- const indexRef = React.useRef<number>(0);
88
- const offsetsRef = React.useRef<Array<number>>([]);
89
-
90
- const onScrollViewChanged = (nextIndex: number) => {
91
+ const transform = [{ translateY: translateY.value }];
92
+
93
+ return {
94
+ transform,
95
+ borderColor: dividerExposureMode === 'always' || overlapped.value ? theme.palette.divider : TRANSPARENT,
96
+ borderBottomWidth: StyleSheet.hairlineWidth,
97
+ };
98
+ }, [
99
+ theme,
100
+ dividerExposureMode,
101
+ ]);
102
+
103
+ const indexRef = useRef<number>(0);
104
+ const offsetsRef = useRef<Array<number>>([]);
105
+
106
+ const onScrollViewChanged = useCallback((nextIndex: number) => {
91
107
  const prevIndex = indexRef.current;
92
108
  if (prevIndex === nextIndex) {
93
109
  return;
@@ -105,16 +121,14 @@ export default function useCollapsibleAppBar(userOptions: Options = defaultOptio
105
121
 
106
122
  // If next ScrollView's offset is too short, expand app bar.
107
123
  if (translateY.value < 0 && savedOffsetY < appBarHeight) {
108
- translateY.value = withTiming(0, {
109
- duration: ANIMATION_DURATION_MILLIS,
110
- });
124
+ translateY.value = withTiming(0, ANIMATION_CONFIG);
111
125
  }
112
- };
126
+ }, [appBarHeight]);
113
127
 
114
128
  const scrollHandler = useAnimatedScrollHandler({
115
129
  onBeginDrag: () => {
116
130
  if (keyboardDismissMode === 'on-drag') {
117
- runOnJS(Keyboard.dismiss)();
131
+ runOnJS(dismissKeyboard)();
118
132
  }
119
133
  lastTranslateY.value = translateY.value;
120
134
  },
@@ -124,7 +138,6 @@ export default function useCollapsibleAppBar(userOptions: Options = defaultOptio
124
138
  onScroll: (event) => {
125
139
  const offsetY = event.contentOffset.y;
126
140
 
127
- const ty = translateY.value;
128
141
  const maxTy = maxTranslateY.value;
129
142
 
130
143
  if (SUPPORTS_DRAG_DETECTION) {
@@ -134,19 +147,25 @@ export default function useCollapsibleAppBar(userOptions: Options = defaultOptio
134
147
 
135
148
  overlapped.value = offsetY + translateY.value > 0;
136
149
  } else {
137
- if (offsetY > -maxTy) {
138
- if (ty === 0) {
139
- translateY.value = withTiming(Math.min(Math.max(-offsetY, maxTy), 0), {
140
- duration: ANIMATION_DURATION_MILLIS,
141
- });
142
- }
143
- } else {
144
- if (ty === maxTy) {
145
- translateY.value = withTiming(0, {
146
- duration: ANIMATION_DURATION_MILLIS,
147
- });
148
- }
149
- }
150
+ const minOffsetY = -maxTy;
151
+ const maxOffsetY = event.contentSize.height - event.layoutMeasurement.height;
152
+
153
+ const safeOffsetY = Math.min(Math.max(offsetY, minOffsetY), maxOffsetY);
154
+ const safeLastOffsetY = Math.min(Math.max(lastOffsetY.value, minOffsetY), maxOffsetY);
155
+ const dy = safeOffsetY - safeLastOffsetY;
156
+
157
+ const newTranslateY = supportsReverseScroll
158
+ ? dy === 0
159
+ ? lastTranslateY.value
160
+ : dy > 0
161
+ ? maxTy
162
+ : 0
163
+ : safeLastOffsetY === minOffsetY
164
+ ? 0
165
+ : maxTy;
166
+
167
+ translateY.value = withTiming(newTranslateY, ANIMATION_CONFIG);
168
+ lastTranslateY.value = newTranslateY;
150
169
 
151
170
  overlapped.value = offsetY > 0;
152
171
 
@@ -175,11 +194,9 @@ export default function useCollapsibleAppBar(userOptions: Options = defaultOptio
175
194
 
176
195
  overlapped.value = offsetY + nextTranslateY > 0;
177
196
 
178
- translateY.value = withTiming(nextTranslateY, {
179
- duration: ANIMATION_DURATION_MILLIS,
180
- });
197
+ translateY.value = withTiming(nextTranslateY, ANIMATION_CONFIG);
181
198
  },
182
- });
199
+ }, [keyboardDismissMode, appBarHeight]);
183
200
 
184
201
  const hasCollapsible = collapsibleToolbarHeight > 0;
185
202
 
@@ -0,0 +1,23 @@
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+
3
+ export default function useDebounce(callback: (args?: any) => void, debounceMillis: number) {
4
+ const debounceTimeout = useRef<NodeJS.Timeout | null>(null);
5
+
6
+ useEffect(() => {
7
+ return () => {
8
+ debounceTimeout.current && clearTimeout(debounceTimeout.current);
9
+ };
10
+ }, []);
11
+
12
+ return useCallback((...args: any[]) => {
13
+ if (debounceTimeout.current) {
14
+ clearTimeout(debounceTimeout.current);
15
+ }
16
+
17
+ if (callback) {
18
+ debounceTimeout.current = setTimeout(() => {
19
+ callback(...args);
20
+ }, debounceMillis);
21
+ }
22
+ }, [debounceMillis, callback]);
23
+ }
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { Falsy, Keyboard, Platform, RegisteredStyle, ScrollViewProps, ViewProps, ViewStyle } from 'react-native';
1
+ import { useMemo } from 'react';
2
+ import { Falsy, Keyboard, RegisteredStyle, ScrollViewProps, StyleSheet, ViewProps, ViewStyle } from 'react-native';
3
3
  import type { SharedValue } from 'react-native-reanimated';
4
4
  import { runOnJS, useAnimatedScrollHandler, useAnimatedStyle, useSharedValue } from 'react-native-reanimated';
5
5
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
@@ -26,6 +26,7 @@ export interface FadeInAppBar {
26
26
  titleStyle: ViewStyleProp;
27
27
  onAppBarLayout: OnLayoutCallback;
28
28
  onScroll: OnScroll;
29
+ scrollY: SharedValue<number>;
29
30
  dy: SharedValue<number>;
30
31
  normalized: SharedValue<number>;
31
32
  }
@@ -37,7 +38,7 @@ const defaultOptions: Required<Options> = {
37
38
  keyboardDismissMode: 'none',
38
39
  };
39
40
 
40
- const shadowOffset = Platform.OS === 'ios' ? { width: 0, height: 3 } : undefined;
41
+ const dismissKeyboard = () => Keyboard.dismiss();
41
42
 
42
43
  export default function useFadeInAppBar(userOptions: Options = defaultOptions): FadeInAppBar {
43
44
  const {
@@ -58,7 +59,7 @@ export default function useFadeInAppBar(userOptions: Options = defaultOptions):
58
59
 
59
60
  const [appBarHeight, onAppBarLayout] = useHeight();
60
61
 
61
- const [fromOffsetY, toOffsetY] = React.useMemo(() => {
62
+ const [fromOffsetY, toOffsetY] = useMemo(() => {
62
63
  const endY = typeof fadeInEndY === 'function'
63
64
  ? fadeInEndY(appBarHeight)
64
65
  : fadeInEndY;
@@ -70,34 +71,38 @@ export default function useFadeInAppBar(userOptions: Options = defaultOptions):
70
71
  return [beginY, endY];
71
72
  }, [fadeInBeginY, fadeInBeginY, appBarHeight]);
72
73
 
74
+ const scrollY = useSharedValue<number>(0);
73
75
  const dy = useSharedValue<number>(0);
74
76
  const lastOffsetY = useSharedValue<number>(0);
75
77
  const normalized = useSharedValue<number>(0);
76
78
 
77
- const backgroundColor = theme.palette.background.default;
78
- const [r, g, b] = React.useMemo(() => rgb(backgroundColor), [backgroundColor]);
79
+ const originalBackgroundColor = theme.palette.background.default;
80
+ const rgbValues = useMemo(() => rgb(originalBackgroundColor), [originalBackgroundColor]);
79
81
 
80
- const animatedAppBarStyle = useAnimatedStyle(() => ({
81
- backgroundColor: `rgba(${r}, ${g}, ${b}, ${normalized.value})`,
82
- elevation: normalized.value >= 1 ? 6 : 0,
83
- shadowColor: '#000',
84
- shadowOffset,
85
- shadowRadius: 4.65,
86
- shadowOpacity: normalized.value >= 1 ? 0.25 : 0,
87
- }));
82
+ const animatedAppBarStyle = useAnimatedStyle(() => {
83
+ const [r, g, b] = rgbValues;
84
+ const backgroundColor = `rgba(${r}, ${g}, ${b}, ${normalized.value})`;
85
+
86
+ return {
87
+ backgroundColor,
88
+ borderColor: theme.palette.divider,
89
+ borderBottomWidth: normalized.value >= 1 ? StyleSheet.hairlineWidth : 0,
90
+ };
91
+ }, [rgbValues]);
88
92
 
89
93
  const animatedTitleStyle = useAnimatedStyle(() => ({
90
94
  opacity: normalized.value,
91
- }));
95
+ }), []);
92
96
 
93
97
  const scrollHandler = useAnimatedScrollHandler({
94
98
  onBeginDrag: () => {
95
99
  if (keyboardDismissMode === 'on-drag') {
96
- runOnJS(Keyboard.dismiss)();
100
+ runOnJS(dismissKeyboard)();
97
101
  }
98
102
  },
99
103
  onScroll: (event) => {
100
104
  const offsetY = event.contentOffset.y;
105
+ scrollY.value = offsetY;
101
106
 
102
107
  const distance = Math.max(toOffsetY - fromOffsetY, 1);
103
108
  const localOffsetY = offsetY - fromOffsetY;
@@ -112,7 +117,7 @@ export default function useFadeInAppBar(userOptions: Options = defaultOptions):
112
117
  onMomentumEnd: (event) => {
113
118
  lastOffsetY.value = event.contentOffset.y;
114
119
  },
115
- });
120
+ }, [keyboardDismissMode]);
116
121
 
117
122
  const appBarStyle = [
118
123
  animatedAppBarStyle,
@@ -125,6 +130,7 @@ export default function useFadeInAppBar(userOptions: Options = defaultOptions):
125
130
  titleStyle: [animatedTitleStyle],
126
131
  onAppBarLayout,
127
132
  onScroll: scrollHandler,
133
+ scrollY,
128
134
  dy,
129
135
  normalized,
130
136
  };
@@ -0,0 +1,24 @@
1
+ import { useMemo } from 'react';
2
+
3
+
4
+ export interface ImperativeState<T> {
5
+ hasChanged: () => boolean;
6
+ get: () => T;
7
+ set: (nextState: T) => void;
8
+ }
9
+
10
+ export default function useImperativeState<T>(initialValue: T): ImperativeState<T> {
11
+ return useMemo<ImperativeState<T>>(() => {
12
+ let prevState: T = initialValue;
13
+ let currentState: T = initialValue;
14
+
15
+ return {
16
+ hasChanged: () => prevState !== currentState,
17
+ get: () => currentState,
18
+ set: (nextState) => {
19
+ prevState = currentState;
20
+ currentState = nextState;
21
+ },
22
+ };
23
+ }, []);
24
+ };
@@ -0,0 +1,38 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import type { SyncAnimatedValue } from '../types';
3
+ import useAnimatedValue from './useAnimatedValue';
4
+
5
+ export interface SyncAnimatedValueConfig {
6
+ initialValue: number;
7
+ shouldSyncAlways?: boolean;
8
+ }
9
+
10
+ export default function useSyncAnimatedValue(config: SyncAnimatedValueConfig): SyncAnimatedValue {
11
+ const {
12
+ initialValue: maybeInitialValue,
13
+ shouldSyncAlways = false,
14
+ } = config;
15
+
16
+ const initialValue = Number.isFinite(maybeInitialValue) ? maybeInitialValue : 0;
17
+ const animatedValue = useAnimatedValue(initialValue);
18
+
19
+ const valueRef = useRef<number>(initialValue);
20
+
21
+ useEffect(() => {
22
+ const maybeId = shouldSyncAlways ? animatedValue.addListener((newValue) => {
23
+ valueRef.current = newValue.value;
24
+ }) : undefined;
25
+
26
+ return () => {
27
+ if (maybeId != null) {
28
+ animatedValue.removeListener(maybeId);
29
+ }
30
+ };
31
+ }, [shouldSyncAlways]);
32
+
33
+ return {
34
+ animatedValue,
35
+ initialValue,
36
+ getCurrentValue: () => valueRef.current,
37
+ };
38
+ };
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import { useCallback, useRef } from 'react';
2
2
 
3
3
  export interface ThrottleOptions {
4
4
  periodMillis: number;
@@ -8,9 +8,9 @@ export interface ThrottleOptions {
8
8
  export default function useThrottle(options: ThrottleOptions) {
9
9
  const { periodMillis, callback } = options;
10
10
 
11
- const lastExecMillisRef = React.useRef(0);
11
+ const lastExecMillisRef = useRef(0);
12
12
 
13
- return React.useCallback((...args: any[]) => {
13
+ return useCallback((...args: any[]) => {
14
14
  const now = Date.now();
15
15
  const millisAfterExecuted = now - lastExecMillisRef.current;
16
16
  lastExecMillisRef.current = now;
@@ -1,15 +1,21 @@
1
- import { useState, useEffect } from 'react';
2
- import { useWindowDimensions } from 'react-native';
1
+ import { useEffect, useState } from 'react';
2
+ import type { ScaledSize } from 'react-native';
3
+ import { Dimensions } from 'react-native';
3
4
 
4
- export default function useValidWindowDimensions() {
5
- const window = useWindowDimensions();
6
- const [validWindow, setValidWindow] = useState(window);
5
+ export default function useValidWindowDimensions(): ScaledSize {
6
+ const [window, setWindow] = useState<ScaledSize>(() => Dimensions.get('window'));
7
7
 
8
8
  useEffect(() => {
9
- if (window.width !== 0 && window.height !== 0) {
10
- setValidWindow(window);
11
- }
12
- }, [window]);
9
+ const subscription = Dimensions.addEventListener('change', (newDimension) => {
10
+ const { window: newWindow } = newDimension;
13
11
 
14
- return validWindow;
12
+ if (newWindow.width !== 0 && newWindow.height !== 0) {
13
+ setWindow(newWindow);
14
+ }
15
+ });
16
+
17
+ return subscription.remove;
18
+ }, []);
19
+
20
+ return window;
15
21
  }
package/src/index.ts CHANGED
@@ -6,6 +6,8 @@ export * from './hooks';
6
6
 
7
7
  export * from './utils';
8
8
 
9
+ export * from './store';
10
+
9
11
  export { default as Accordion } from './Accordion';
10
12
  export * from './Accordion';
11
13
 
@@ -78,6 +80,8 @@ export * from './IconButton';
78
80
  export { default as Image } from './Image';
79
81
  export * from './Image';
80
82
 
83
+ export * from './ImageCore';
84
+
81
85
  export { default as Link } from './Link';
82
86
  export * from './Link';
83
87
 
@@ -1,2 +1 @@
1
1
  export { default as useHeight } from './useHeight';
2
- export { default as useWidth } from './useWidth';
@@ -1,13 +1,12 @@
1
- import React from 'react';
2
- import { ViewProps } from 'react-native';
3
- import { useWorkletCallback } from 'react-native-reanimated';
1
+ import { useCallback, useState } from 'react';
2
+ import { LayoutChangeEvent, ViewProps } from 'react-native';
4
3
 
5
4
  type OnLayoutCallback = ViewProps['onLayout'];
6
5
 
7
6
  export default function useHeight(initialHeight = 0): [number, OnLayoutCallback] {
8
- const [height, setHeight] = React.useState<number>(initialHeight);
7
+ const [height, setHeight] = useState<number>(initialHeight);
9
8
 
10
- const onLayout = useWorkletCallback((e) => {
9
+ const onLayout = useCallback((e: LayoutChangeEvent) => {
11
10
  setHeight(e.nativeEvent.layout.height);
12
11
  }, []);
13
12
 
@@ -4,7 +4,7 @@ import { createSvgIcon } from '../../utils';
4
4
 
5
5
  export default createSvgIcon(
6
6
  <Path
7
- d="M13 4.5C14.3807 4.5 15.5 5.61929 15.5 7V13C15.5 14.3807 14.3807 15.5 13 15.5H7C5.61929 15.5 4.5 14.3807 4.5 13V7C4.5 5.61929 5.61929 4.5 7 4.5H13ZM7 3C4.79086 3 3 4.79086 3 7V13C3 15.2091 4.79086 17 7 17H13C15.2091 17 17 15.2091 17 13V7C17 4.79086 15.2091 3 13 3H7Z"
7
+ d="M17 5C18.1046 5 19 5.89543 19 7V17C19 18.1046 18.1046 19 17 19H7C5.89543 19 5 18.1046 5 17V7C5 5.89543 5.89543 5 7 5H17ZM7 3C4.79086 3 3 4.79086 3 7V17C3 19.2091 4.79086 21 7 21H17C19.2091 21 21 19.2091 21 17V7C21 4.79086 19.2091 3 17 3H7Z"
8
8
  />,
9
9
  'Checkbox',
10
10
  );
@@ -4,7 +4,7 @@ import { createSvgIcon } from '../../utils';
4
4
 
5
5
  export default createSvgIcon(
6
6
  <Path
7
- d="M7 3C4.79086 3 3 4.79086 3 7V13C3 15.2091 4.79086 17 7 17H13C15.2091 17 17 15.2091 17 13V7C17 4.79086 15.2091 3 13 3H7ZM8.8589 13.5018L8.32857 14.0321L7.79824 13.5018L4.96967 10.6732L6.03033 9.61252L8.32857 11.9108L13.7697 6.46967L14.8303 7.53033L8.8589 13.5018Z"
7
+ d="M7 3C4.79086 3 3 4.79086 3 7V17C3 19.2091 4.79086 21 7 21H17C19.2091 21 21 19.2091 21 17V7C21 4.79086 19.2091 3 17 3H7ZM17.7071 9.20711L10.7071 16.2071C10.3166 16.5976 9.68342 16.5976 9.29289 16.2071L6.29289 13.2071C5.90237 12.8166 5.90237 12.1834 6.29289 11.7929C6.68342 11.4024 7.31658 11.4024 7.70711 11.7929L10 14.0858L16.2929 7.79289C16.6834 7.40237 17.3166 7.40237 17.7071 7.79289C18.0976 8.18342 18.0976 8.81658 17.7071 9.20711Z"
8
8
  />,
9
9
  'CheckboxChecked',
10
10
  );
@@ -4,7 +4,7 @@ import { createSvgIcon } from '../../utils';
4
4
 
5
5
  export default createSvgIcon(
6
6
  <Path
7
- d="M9.51967 13.2803L4.01967 7.78033L5.08033 6.71967L10.05 11.6893L15.0197 6.71967L16.0803 7.78033L10.5803 13.2803L9.51967 13.2803Z"
7
+ d="M12 16.4141L5.29289 9.70696C4.90237 9.31643 4.90237 8.68327 5.29289 8.29274C5.68342 7.90222 6.31658 7.90222 6.70711 8.29274L12 13.5856L17.2929 8.29274C17.6834 7.90222 18.3166 7.90222 18.7071 8.29274C19.0976 8.68327 19.0976 9.31643 18.7071 9.70696L12 16.4141Z"
8
8
  />,
9
9
  'ChevronDown',
10
10
  );
@@ -4,7 +4,7 @@ import { createSvgIcon } from '../../utils';
4
4
 
5
5
  export default createSvgIcon(
6
6
  <Path
7
- d="M6.76965 9.46973L12.2697 3.96973L13.3303 5.03039L8.36064 10.0001L13.3303 14.9697L12.2697 16.0304L6.76965 10.5304L6.76965 9.46973Z"
7
+ d="M7.58594 12L14.293 18.7071C14.6836 19.0976 15.3167 19.0976 15.7073 18.7071C16.0978 18.3166 16.0978 17.6834 15.7073 17.2929L10.4144 12L15.7073 6.70711C16.0978 6.31658 16.0978 5.68342 15.7073 5.29289C15.3167 4.90237 14.6836 4.90237 14.293 5.29289L7.58594 12Z"
8
8
  />,
9
9
  'ChevronLeft',
10
10
  );
@@ -4,7 +4,7 @@ import { createSvgIcon } from '../../utils';
4
4
 
5
5
  export default createSvgIcon(
6
6
  <Path
7
- d="M13.3303 10.5303L7.83032 16.0303L6.76966 14.9697L11.7393 10L6.76966 5.03033L7.83032 3.96968L13.3303 9.46967V10.5303Z"
7
+ d="M16.4141 12L9.70696 18.7071C9.31643 19.0976 8.68327 19.0976 8.29274 18.7071C7.90222 18.3166 7.90222 17.6834 8.29274 17.2929L13.5856 12L8.29274 6.70711C7.90222 6.31658 7.90222 5.68342 8.29274 5.29289C8.68327 4.90237 9.31643 4.90237 9.70696 5.29289L16.4141 12Z"
8
8
  />,
9
9
  'ChevronRight',
10
10
  );
@@ -4,7 +4,7 @@ import { createSvgIcon } from '../../utils';
4
4
 
5
5
  export default createSvgIcon(
6
6
  <Path
7
- d="M3.96968 14.9697L5.03034 16.0303L10 11.0607L14.9697 16.0303L16.0303 14.9697L11.0607 10L16.0303 5.03033L14.9697 3.96967L10 8.93934L5.03034 3.96968L3.96968 5.03033L8.93935 10L3.96968 14.9697Z"
7
+ d="M19.7071 5.70711C20.0976 5.31658 20.0976 4.68342 19.7071 4.29289C19.3166 3.90237 18.6834 3.90237 18.2929 4.29289L12 10.5858L5.70711 4.29292C5.31658 3.9024 4.68342 3.9024 4.29289 4.29292C3.90237 4.68345 3.90237 5.31661 4.29289 5.70714L10.5858 12L4.29289 18.2929C3.90237 18.6834 3.90237 19.3166 4.29289 19.7071C4.68342 20.0976 5.31658 20.0976 5.70711 19.7071L12 13.4142L18.2929 19.7071C18.6834 20.0977 19.3166 20.0977 19.7071 19.7071C20.0976 19.3166 20.0976 18.6834 19.7071 18.2929L13.4142 12L19.7071 5.70711Z"
8
8
  />,
9
9
  'Close',
10
10
  );
@@ -4,7 +4,7 @@ import { createSvgIcon } from '../../utils';
4
4
 
5
5
  export default createSvgIcon(
6
6
  <Path
7
- d="M10 16.5C6.41015 16.5 3.5 13.5899 3.5 10C3.5 6.41015 6.41015 3.5 10 3.5C13.5899 3.5 16.5 6.41015 16.5 10C16.5 13.5899 13.5899 16.5 10 16.5ZM10 18C14.4183 18 18 14.4183 18 10C18 5.58172 14.4183 2 10 2C5.58172 2 2 5.58172 2 10C2 14.4183 5.58172 18 10 18Z"
7
+ d="M12 20C7.58172 20 4 16.4183 4 12C4 7.58172 7.58172 4 12 4C16.4183 4 20 7.58172 20 12C20 16.4183 16.4183 20 12 20ZM12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z"
8
8
  />,
9
9
  'Radio',
10
10
  );
@@ -4,7 +4,7 @@ import { createSvgIcon } from '../../utils';
4
4
 
5
5
  export default createSvgIcon(
6
6
  <Path
7
- d="M16.5 10C16.5 6.41015 13.5899 3.5 10 3.5C6.41015 3.5 3.5 6.41015 3.5 10C3.5 13.5899 6.41015 16.5 10 16.5C13.5899 16.5 16.5 13.5899 16.5 10ZM18 10C18 14.4183 14.4183 18 10 18C5.58172 18 2 14.4183 2 10C2 5.58172 5.58172 2 10 2C14.4183 2 18 5.58172 18 10ZM10 15C7.23858 15 5 12.7614 5 10C5 7.23858 7.23858 5 10 5C12.7614 5 15 7.23858 15 10C15 12.7614 12.7614 15 10 15Z"
7
+ d="M20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C16.4183 20 20 16.4183 20 12ZM22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12ZM12 18C15.3137 18 18 15.3137 18 12C18 8.68629 15.3137 6 12 6C8.68629 6 6 8.68629 6 12C6 15.3137 8.68629 18 12 18Z"
8
8
  />,
9
9
  'RadioChecked',
10
10
  );
@@ -0,0 +1,21 @@
1
+ import { MonoStore, StoreSubscription, DispatchAction } from './types';
2
+
3
+ export default class MockStore<S> implements MonoStore<S> {
4
+
5
+ dispatch(action: DispatchAction<S>): void {
6
+ // do nothing
7
+ }
8
+
9
+ getState(): S {
10
+ throw new Error('stub!');
11
+ }
12
+
13
+ removeAllListeners(): void {
14
+ // do nothing
15
+ }
16
+
17
+ subscribe(listener: (state: S) => void): StoreSubscription {
18
+ return () => void 0;
19
+ }
20
+
21
+ };
@@ -0,0 +1,50 @@
1
+ import type { DispatchAction, MonoStore, StoreSubscription } from './types';
2
+
3
+ function refEqual(a: any, b: any): boolean {
4
+ return a === b;
5
+ }
6
+
7
+ export default class SimpleStore<S> implements MonoStore<S> {
8
+
9
+ private state: S;
10
+
11
+ private listeners: Array<(state: S) => void> = [];
12
+
13
+ constructor(initialState: S) {
14
+ this.state = initialState;
15
+ }
16
+
17
+ dispatch(action: DispatchAction<S>): void {
18
+ // @ts-ignore
19
+ const nextState = typeof action === 'function' ? action(this.state) : action;
20
+
21
+ // Do not dispatch if state ref is equal
22
+ if (refEqual(this.state, nextState)) {
23
+ return;
24
+ }
25
+
26
+ this.state = nextState;
27
+ for (const id in this.listeners) {
28
+ const listener = this.listeners[id];
29
+ listener?.(nextState);
30
+ }
31
+ }
32
+
33
+ getState(): S {
34
+ return this.state;
35
+ }
36
+
37
+ subscribe(listener: (state: S) => void): StoreSubscription {
38
+ this.listeners.push(listener);
39
+
40
+ return () => {
41
+ const index = this.listeners.indexOf(listener);
42
+ this.listeners.splice(index, 1);
43
+ };
44
+ }
45
+
46
+ removeAllListeners(): void {
47
+ this.listeners.splice(0, this.listeners.length);
48
+ }
49
+
50
+ };
@@ -0,0 +1,3 @@
1
+ export { default as SimpleStore } from './SimpleStore';
2
+ export { default as MockStore } from './MockStore';
3
+ export type { MonoStore, DispatchAction } from './types';