@chem-po/react-native 0.0.51 → 0.0.53

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 (292) hide show
  1. package/lib/commonjs/components/box/Center.js.map +1 -1
  2. package/lib/commonjs/components/box/CollapseHorizontal.js.map +1 -1
  3. package/lib/commonjs/components/box/ContentBox.js.map +1 -1
  4. package/lib/commonjs/components/box/DropShadow.js.map +1 -1
  5. package/lib/commonjs/components/box/ExpandOnMount.js.map +1 -1
  6. package/lib/commonjs/components/box/Expandable.js.map +1 -1
  7. package/lib/commonjs/components/box/FullSizeContainer.js.map +1 -1
  8. package/lib/commonjs/components/box/index.js.map +1 -1
  9. package/lib/commonjs/components/button/ActionButton.js.map +1 -1
  10. package/lib/commonjs/components/button/ButtonText.js.map +1 -1
  11. package/lib/commonjs/components/button/DeleteButton.js.map +1 -1
  12. package/lib/commonjs/components/button/LoadingButton.js.map +1 -1
  13. package/lib/commonjs/components/button/Toggle.js.map +1 -1
  14. package/lib/commonjs/components/button/hooks.js.map +1 -1
  15. package/lib/commonjs/components/button/index.js.map +1 -1
  16. package/lib/commonjs/components/feed/FeedContentPane.js.map +1 -1
  17. package/lib/commonjs/components/feed/MediaFeed.js.map +1 -1
  18. package/lib/commonjs/components/feed/MediaFeedBackground.js.map +1 -1
  19. package/lib/commonjs/components/feed/MediaFeedRefresh.js.map +1 -1
  20. package/lib/commonjs/components/feed/constants.js.map +1 -1
  21. package/lib/commonjs/components/feed/context.js.map +1 -1
  22. package/lib/commonjs/components/feed/hooks.js.map +1 -1
  23. package/lib/commonjs/components/feed/index.js.map +1 -1
  24. package/lib/commonjs/components/form/Condition.js.map +1 -1
  25. package/lib/commonjs/components/form/Field.js.map +1 -1
  26. package/lib/commonjs/components/form/Form.js.map +1 -1
  27. package/lib/commonjs/components/form/FormFooter.js.map +1 -1
  28. package/lib/commonjs/components/form/UploadProgress/index.js.map +1 -1
  29. package/lib/commonjs/components/form/index.js.map +1 -1
  30. package/lib/commonjs/components/form/input/Editable.js.map +1 -1
  31. package/lib/commonjs/components/form/input/InputSlider.js.map +1 -1
  32. package/lib/commonjs/components/form/input/OptionalTag.js.map +1 -1
  33. package/lib/commonjs/components/form/input/StandaloneInput.js.map +1 -1
  34. package/lib/commonjs/components/form/input/boolean/index.js.map +1 -1
  35. package/lib/commonjs/components/form/input/color/index.js.map +1 -1
  36. package/lib/commonjs/components/form/input/common/InputClearButton.js.map +1 -1
  37. package/lib/commonjs/components/form/input/date/index.js.map +1 -1
  38. package/lib/commonjs/components/form/input/datetime/index.js.map +1 -1
  39. package/lib/commonjs/components/form/input/file/index.js.map +1 -1
  40. package/lib/commonjs/components/form/input/hooks/index.js.map +1 -1
  41. package/lib/commonjs/components/form/input/hooks/useInputColor.js.map +1 -1
  42. package/lib/commonjs/components/form/input/hooks/useInputImperativeHandle.js.map +1 -1
  43. package/lib/commonjs/components/form/input/hooks/useInputStyles.js.map +1 -1
  44. package/lib/commonjs/components/form/input/index.js.map +1 -1
  45. package/lib/commonjs/components/form/input/input.js.map +1 -1
  46. package/lib/commonjs/components/form/input/multipleSelect/index.js.map +1 -1
  47. package/lib/commonjs/components/form/input/number/index.js.map +1 -1
  48. package/lib/commonjs/components/form/input/select/index.js.map +1 -1
  49. package/lib/commonjs/components/form/input/socialMedia/index.js.map +1 -1
  50. package/lib/commonjs/components/form/input/text/AutoResizeTextarea.js.map +1 -1
  51. package/lib/commonjs/components/form/input/text/index.js.map +1 -1
  52. package/lib/commonjs/components/form/input/text/textarea.js.map +1 -1
  53. package/lib/commonjs/components/form/input/text/useWebAutoResize.js.map +1 -1
  54. package/lib/commonjs/components/form/input/time/index.js.map +1 -1
  55. package/lib/commonjs/components/form/types.js.map +1 -1
  56. package/lib/commonjs/components/form/view/file.js.map +1 -1
  57. package/lib/commonjs/components/form/view/index.js.map +1 -1
  58. package/lib/commonjs/components/form/view/multipleSelect.js.map +1 -1
  59. package/lib/commonjs/components/form/view/select.js.map +1 -1
  60. package/lib/commonjs/components/form/view/styles.js.map +1 -1
  61. package/lib/commonjs/components/icons/index.js.map +1 -1
  62. package/lib/commonjs/components/image/ImageViewModal.js.map +1 -1
  63. package/lib/commonjs/components/image/index.js.map +1 -1
  64. package/lib/commonjs/components/index.js.map +1 -1
  65. package/lib/commonjs/components/layout/CollapseHorizontal.js.map +1 -1
  66. package/lib/commonjs/components/loading/CircularProgress.js.map +1 -1
  67. package/lib/commonjs/components/loading/Loading.js.map +1 -1
  68. package/lib/commonjs/components/loading/LoadingImage.js.map +1 -1
  69. package/lib/commonjs/components/loading/LoadingOverlay.js.map +1 -1
  70. package/lib/commonjs/components/loading/LoadingSwitch.js.map +1 -1
  71. package/lib/commonjs/components/loading/ProgressBar.js.map +1 -1
  72. package/lib/commonjs/components/loading/index.js.map +1 -1
  73. package/lib/commonjs/components/text/AnimatedText.js.map +1 -1
  74. package/lib/commonjs/components/text/Txt.js.map +1 -1
  75. package/lib/commonjs/components/text/index.js.map +1 -1
  76. package/lib/commonjs/components/theme/colorMode/DarkModeToggle.js.map +1 -1
  77. package/lib/commonjs/components/theme/colorMode/index.js.map +1 -1
  78. package/lib/commonjs/components/theme/index.js.map +1 -1
  79. package/lib/commonjs/constants/index.js.map +1 -1
  80. package/lib/commonjs/constants/toast.js.map +1 -1
  81. package/lib/commonjs/contexts/fonts.js.map +1 -1
  82. package/lib/commonjs/contexts/index.js.map +1 -1
  83. package/lib/commonjs/contexts/root.js.map +1 -1
  84. package/lib/commonjs/hooks/index.js.map +1 -1
  85. package/lib/commonjs/hooks/useFadeIn.js.map +1 -1
  86. package/lib/commonjs/hooks/useFont.js.map +1 -1
  87. package/lib/commonjs/hooks/useRefreshFontScale.js.map +1 -1
  88. package/lib/commonjs/hooks/useThemeState.js.map +1 -1
  89. package/lib/commonjs/index.js.map +1 -1
  90. package/lib/commonjs/store/index.js.map +1 -1
  91. package/lib/commonjs/store/useFontScale.js.map +1 -1
  92. package/lib/commonjs/store/useScreen.js.map +1 -1
  93. package/lib/commonjs/styles/fill.js.map +1 -1
  94. package/lib/commonjs/types/forms.js.map +1 -1
  95. package/lib/commonjs/types/index.js.map +1 -1
  96. package/lib/commonjs/utils/downloadFile.js.map +1 -1
  97. package/lib/commonjs/utils/downloadFileLegacy.js.map +1 -1
  98. package/lib/module/components/box/Center.js.map +1 -1
  99. package/lib/module/components/box/CollapseHorizontal.js.map +1 -1
  100. package/lib/module/components/box/ContentBox.js.map +1 -1
  101. package/lib/module/components/box/DropShadow.js.map +1 -1
  102. package/lib/module/components/box/ExpandOnMount.js.map +1 -1
  103. package/lib/module/components/box/Expandable.js.map +1 -1
  104. package/lib/module/components/box/FullSizeContainer.js.map +1 -1
  105. package/lib/module/components/box/index.js.map +1 -1
  106. package/lib/module/components/button/ActionButton.js.map +1 -1
  107. package/lib/module/components/button/ButtonText.js.map +1 -1
  108. package/lib/module/components/button/DeleteButton.js.map +1 -1
  109. package/lib/module/components/button/LoadingButton.js.map +1 -1
  110. package/lib/module/components/button/Toggle.js.map +1 -1
  111. package/lib/module/components/button/hooks.js.map +1 -1
  112. package/lib/module/components/button/index.js.map +1 -1
  113. package/lib/module/components/feed/FeedContentPane.js.map +1 -1
  114. package/lib/module/components/feed/MediaFeed.js.map +1 -1
  115. package/lib/module/components/feed/MediaFeedBackground.js.map +1 -1
  116. package/lib/module/components/feed/MediaFeedRefresh.js.map +1 -1
  117. package/lib/module/components/feed/constants.js.map +1 -1
  118. package/lib/module/components/feed/context.js.map +1 -1
  119. package/lib/module/components/feed/hooks.js.map +1 -1
  120. package/lib/module/components/feed/index.js.map +1 -1
  121. package/lib/module/components/form/Condition.js.map +1 -1
  122. package/lib/module/components/form/Field.js.map +1 -1
  123. package/lib/module/components/form/Form.js.map +1 -1
  124. package/lib/module/components/form/FormFooter.js.map +1 -1
  125. package/lib/module/components/form/UploadProgress/index.js.map +1 -1
  126. package/lib/module/components/form/index.js.map +1 -1
  127. package/lib/module/components/form/input/Editable.js.map +1 -1
  128. package/lib/module/components/form/input/InputSlider.js.map +1 -1
  129. package/lib/module/components/form/input/OptionalTag.js.map +1 -1
  130. package/lib/module/components/form/input/StandaloneInput.js.map +1 -1
  131. package/lib/module/components/form/input/boolean/index.js.map +1 -1
  132. package/lib/module/components/form/input/color/index.js.map +1 -1
  133. package/lib/module/components/form/input/common/InputClearButton.js.map +1 -1
  134. package/lib/module/components/form/input/date/index.js.map +1 -1
  135. package/lib/module/components/form/input/datetime/index.js.map +1 -1
  136. package/lib/module/components/form/input/file/index.js.map +1 -1
  137. package/lib/module/components/form/input/hooks/index.js.map +1 -1
  138. package/lib/module/components/form/input/hooks/useInputColor.js.map +1 -1
  139. package/lib/module/components/form/input/hooks/useInputImperativeHandle.js.map +1 -1
  140. package/lib/module/components/form/input/hooks/useInputStyles.js.map +1 -1
  141. package/lib/module/components/form/input/index.js.map +1 -1
  142. package/lib/module/components/form/input/input.js.map +1 -1
  143. package/lib/module/components/form/input/multipleSelect/index.js.map +1 -1
  144. package/lib/module/components/form/input/number/index.js.map +1 -1
  145. package/lib/module/components/form/input/select/index.js.map +1 -1
  146. package/lib/module/components/form/input/socialMedia/index.js.map +1 -1
  147. package/lib/module/components/form/input/text/AutoResizeTextarea.js.map +1 -1
  148. package/lib/module/components/form/input/text/index.js.map +1 -1
  149. package/lib/module/components/form/input/text/textarea.js.map +1 -1
  150. package/lib/module/components/form/input/text/useWebAutoResize.js.map +1 -1
  151. package/lib/module/components/form/input/time/index.js.map +1 -1
  152. package/lib/module/components/form/types.js.map +1 -1
  153. package/lib/module/components/form/view/file.js.map +1 -1
  154. package/lib/module/components/form/view/index.js.map +1 -1
  155. package/lib/module/components/form/view/multipleSelect.js.map +1 -1
  156. package/lib/module/components/form/view/select.js.map +1 -1
  157. package/lib/module/components/form/view/styles.js.map +1 -1
  158. package/lib/module/components/icons/index.js.map +1 -1
  159. package/lib/module/components/image/ImageViewModal.js.map +1 -1
  160. package/lib/module/components/image/index.js.map +1 -1
  161. package/lib/module/components/index.js.map +1 -1
  162. package/lib/module/components/layout/CollapseHorizontal.js.map +1 -1
  163. package/lib/module/components/loading/CircularProgress.js.map +1 -1
  164. package/lib/module/components/loading/Loading.js.map +1 -1
  165. package/lib/module/components/loading/LoadingImage.js.map +1 -1
  166. package/lib/module/components/loading/LoadingOverlay.js.map +1 -1
  167. package/lib/module/components/loading/LoadingSwitch.js.map +1 -1
  168. package/lib/module/components/loading/ProgressBar.js.map +1 -1
  169. package/lib/module/components/loading/index.js.map +1 -1
  170. package/lib/module/components/text/AnimatedText.js.map +1 -1
  171. package/lib/module/components/text/Txt.js.map +1 -1
  172. package/lib/module/components/text/index.js.map +1 -1
  173. package/lib/module/components/theme/colorMode/DarkModeToggle.js.map +1 -1
  174. package/lib/module/components/theme/colorMode/index.js.map +1 -1
  175. package/lib/module/components/theme/index.js.map +1 -1
  176. package/lib/module/constants/index.js.map +1 -1
  177. package/lib/module/constants/toast.js.map +1 -1
  178. package/lib/module/contexts/fonts.js.map +1 -1
  179. package/lib/module/contexts/index.js.map +1 -1
  180. package/lib/module/contexts/root.js.map +1 -1
  181. package/lib/module/hooks/index.js.map +1 -1
  182. package/lib/module/hooks/useFadeIn.js.map +1 -1
  183. package/lib/module/hooks/useFont.js.map +1 -1
  184. package/lib/module/hooks/useRefreshFontScale.js.map +1 -1
  185. package/lib/module/hooks/useThemeState.js.map +1 -1
  186. package/lib/module/index.js.map +1 -1
  187. package/lib/module/store/index.js.map +1 -1
  188. package/lib/module/store/useFontScale.js.map +1 -1
  189. package/lib/module/store/useScreen.js.map +1 -1
  190. package/lib/module/styles/fill.js.map +1 -1
  191. package/lib/module/types/forms.js.map +1 -1
  192. package/lib/module/types/index.js.map +1 -1
  193. package/lib/module/utils/downloadFile.js.map +1 -1
  194. package/lib/module/utils/downloadFileLegacy.js.map +1 -1
  195. package/package.json +5 -20
  196. package/src/components/box/Center.tsx +0 -19
  197. package/src/components/box/CollapseHorizontal.tsx +0 -44
  198. package/src/components/box/ContentBox.tsx +0 -24
  199. package/src/components/box/DropShadow.tsx +0 -28
  200. package/src/components/box/ExpandOnMount.tsx +0 -74
  201. package/src/components/box/Expandable.tsx +0 -143
  202. package/src/components/box/FullSizeContainer.tsx +0 -64
  203. package/src/components/box/index.ts +0 -7
  204. package/src/components/button/ActionButton.tsx +0 -196
  205. package/src/components/button/ButtonText.tsx +0 -60
  206. package/src/components/button/DeleteButton.tsx +0 -288
  207. package/src/components/button/LoadingButton.tsx +0 -41
  208. package/src/components/button/Toggle.tsx +0 -109
  209. package/src/components/button/hooks.ts +0 -66
  210. package/src/components/button/index.ts +0 -5
  211. package/src/components/feed/FeedContentPane.tsx +0 -97
  212. package/src/components/feed/MediaFeed.tsx +0 -199
  213. package/src/components/feed/MediaFeedBackground.tsx +0 -136
  214. package/src/components/feed/MediaFeedRefresh.tsx +0 -113
  215. package/src/components/feed/constants.ts +0 -2
  216. package/src/components/feed/context.tsx +0 -19
  217. package/src/components/feed/hooks.ts +0 -279
  218. package/src/components/feed/index.ts +0 -2
  219. package/src/components/form/Condition.tsx +0 -27
  220. package/src/components/form/Field.tsx +0 -44
  221. package/src/components/form/Form.tsx +0 -452
  222. package/src/components/form/FormFooter.tsx +0 -164
  223. package/src/components/form/UploadProgress/index.tsx +0 -50
  224. package/src/components/form/index.ts +0 -3
  225. package/src/components/form/input/Editable.tsx +0 -206
  226. package/src/components/form/input/InputSlider.tsx +0 -71
  227. package/src/components/form/input/OptionalTag.tsx +0 -43
  228. package/src/components/form/input/StandaloneInput.tsx +0 -49
  229. package/src/components/form/input/boolean/index.tsx +0 -53
  230. package/src/components/form/input/color/index.tsx +0 -145
  231. package/src/components/form/input/common/InputClearButton.tsx +0 -57
  232. package/src/components/form/input/date/index.tsx +0 -125
  233. package/src/components/form/input/datetime/index.tsx +0 -176
  234. package/src/components/form/input/file/index.tsx +0 -310
  235. package/src/components/form/input/hooks/index.ts +0 -2
  236. package/src/components/form/input/hooks/useInputColor.ts +0 -7
  237. package/src/components/form/input/hooks/useInputImperativeHandle.ts +0 -22
  238. package/src/components/form/input/hooks/useInputStyles.ts +0 -114
  239. package/src/components/form/input/index.ts +0 -4
  240. package/src/components/form/input/input.tsx +0 -218
  241. package/src/components/form/input/multipleSelect/index.tsx +0 -221
  242. package/src/components/form/input/number/index.tsx +0 -108
  243. package/src/components/form/input/select/index.tsx +0 -152
  244. package/src/components/form/input/socialMedia/index.tsx +0 -235
  245. package/src/components/form/input/text/AutoResizeTextarea.tsx +0 -41
  246. package/src/components/form/input/text/index.tsx +0 -99
  247. package/src/components/form/input/text/textarea.tsx +0 -32
  248. package/src/components/form/input/text/useWebAutoResize.tsx +0 -73
  249. package/src/components/form/input/time/index.tsx +0 -125
  250. package/src/components/form/types.ts +0 -8
  251. package/src/components/form/view/file.tsx +0 -80
  252. package/src/components/form/view/index.tsx +0 -125
  253. package/src/components/form/view/multipleSelect.tsx +0 -85
  254. package/src/components/form/view/select.tsx +0 -83
  255. package/src/components/form/view/styles.ts +0 -12
  256. package/src/components/icons/index.tsx +0 -28
  257. package/src/components/image/ImageViewModal.tsx +0 -319
  258. package/src/components/image/index.ts +0 -1
  259. package/src/components/index.ts +0 -8
  260. package/src/components/layout/CollapseHorizontal.tsx +0 -92
  261. package/src/components/loading/CircularProgress.tsx +0 -56
  262. package/src/components/loading/Loading.tsx +0 -146
  263. package/src/components/loading/LoadingImage.tsx +0 -163
  264. package/src/components/loading/LoadingOverlay.tsx +0 -74
  265. package/src/components/loading/LoadingSwitch.tsx +0 -110
  266. package/src/components/loading/ProgressBar.tsx +0 -75
  267. package/src/components/loading/index.ts +0 -6
  268. package/src/components/text/AnimatedText.tsx +0 -68
  269. package/src/components/text/Txt.tsx +0 -12
  270. package/src/components/text/index.ts +0 -1
  271. package/src/components/theme/colorMode/DarkModeToggle.tsx +0 -47
  272. package/src/components/theme/colorMode/index.ts +0 -1
  273. package/src/components/theme/index.ts +0 -1
  274. package/src/constants/index.ts +0 -1
  275. package/src/constants/toast.ts +0 -24
  276. package/src/contexts/fonts.tsx +0 -23
  277. package/src/contexts/index.ts +0 -1
  278. package/src/contexts/root.tsx +0 -190
  279. package/src/hooks/index.ts +0 -3
  280. package/src/hooks/useFadeIn.ts +0 -48
  281. package/src/hooks/useFont.ts +0 -25
  282. package/src/hooks/useRefreshFontScale.ts +0 -39
  283. package/src/hooks/useThemeState.ts +0 -43
  284. package/src/index.ts +0 -6
  285. package/src/store/index.ts +0 -2
  286. package/src/store/useFontScale.ts +0 -8
  287. package/src/store/useScreen.ts +0 -25
  288. package/src/styles/fill.ts +0 -19
  289. package/src/types/forms.ts +0 -14
  290. package/src/types/index.ts +0 -1
  291. package/src/utils/downloadFile.ts +0 -61
  292. package/src/utils/downloadFileLegacy.ts +0 -66
@@ -1,66 +0,0 @@
1
- import { ButtonColors } from '@chem-po/core'
2
- import { useTheme } from '@chem-po/react'
3
- import { useMemo } from 'react'
4
- import { useFont } from '../../hooks/useFont'
5
-
6
- export const useButtonFont = (size: 'lg' | 'md' | 'sm' | 'xs') => {
7
- const fontSize = useMemo(() => (size === 'xs' ? 'sm' : size), [size])
8
- const font = useFont('display', fontSize)
9
- return font
10
- }
11
-
12
- export const useButtonColors = (variant: 'solid' | 'outline') => {
13
- const { buttons } = useTheme()
14
- return useMemo(() => buttons[variant], [buttons, variant])
15
- }
16
-
17
- export const useButtonTextColor = (
18
- colors: ButtonColors,
19
- variant: 'solid' | 'outline',
20
- buttonColor: string | undefined,
21
- disabled: boolean,
22
- disabledColor: string | undefined,
23
- ) => {
24
- return useMemo(() => {
25
- if (disabled) {
26
- if (disabledColor && variant === 'outline') return disabledColor
27
- return colors.disabled.text
28
- }
29
- if (buttonColor && variant === 'outline') return buttonColor
30
- return colors.text
31
- }, [variant, buttonColor, disabledColor, disabled, colors])
32
- }
33
-
34
- export const useButtonBackgroundColor = (
35
- colors: ButtonColors,
36
- variant: 'solid' | 'outline',
37
- buttonColor: string | undefined,
38
- disabled: boolean,
39
- disabledColor: string | undefined,
40
- ) => {
41
- return useMemo(() => {
42
- if (disabled) {
43
- if (disabledColor && variant === 'solid') return disabledColor
44
- return colors.disabled.background
45
- }
46
- if (buttonColor && variant === 'solid') return buttonColor
47
- return colors.background
48
- }, [variant, buttonColor, disabledColor, disabled, colors])
49
- }
50
-
51
- export const useButtonBorderColor = (
52
- colors: ButtonColors,
53
- variant: 'solid' | 'outline',
54
- buttonColor: string | undefined,
55
- disabled: boolean,
56
- disabledColor: string | undefined,
57
- ) => {
58
- return useMemo(() => {
59
- if (disabled) {
60
- if (disabledColor && variant === 'outline') return disabledColor
61
- return colors.disabled.border
62
- }
63
- if (buttonColor && variant === 'outline') return buttonColor
64
- return colors.border
65
- }, [variant, buttonColor, disabledColor, disabled, colors])
66
- }
@@ -1,5 +0,0 @@
1
- export * from './ActionButton'
2
- export * from './ButtonText'
3
- export * from './DeleteButton'
4
- export * from './LoadingButton'
5
- export * from './Toggle'
@@ -1,97 +0,0 @@
1
- import { AnyObject, WithId } from '@chem-po/core'
2
- import { PanelStatus, useDocument, useScreen } from '@chem-po/react'
3
- import React, { JSX, useEffect, useMemo, useRef } from 'react'
4
- // import { motion, MotionValue, useMotionValue, useSpring, useTransform } from 'framer-motion'
5
- import { Animated } from 'react-native'
6
-
7
- const getContentScale = (status: PanelStatus) => {
8
- // if (status === 'current') return 1
9
- if (status === 'current') return 1
10
- return 0
11
- }
12
- // const getContentX = (status: PanelStatus, contentSize: { width: number; height: number }) => {
13
- // const { width: cWidth } = contentSize
14
- // if (status === 'current') return 0
15
- // if (status === 'next') return cWidth
16
- // if (status === 'prev') return -cWidth
17
- // return 0
18
- // }
19
-
20
- const getContentY = (status: PanelStatus, contentSize: { width: number; height: number }) => {
21
- const { height: cHeight } = contentSize
22
- if (status === 'current') return 0
23
- if (status === 'next') return cHeight * 1.1
24
- if (status === 'prev') return -cHeight * 1.1
25
- return 0
26
- }
27
-
28
- interface FeedContentPaneProps<T extends AnyObject = AnyObject> {
29
- id: string
30
- collectionPath: string
31
- RenderItem: (i: WithId<T>) => JSX.Element
32
- onItemLoad: (data: WithId<T> | null) => void
33
- status: PanelStatus
34
- enterStatus?: PanelStatus | null
35
- offsetY: Animated.Value
36
- }
37
-
38
- export const FeedContentPane = <T extends AnyObject = AnyObject>({
39
- id,
40
- collectionPath,
41
- onItemLoad,
42
- RenderItem,
43
- status,
44
- offsetY,
45
- enterStatus,
46
- }: FeedContentPaneProps<T>) => {
47
- const { height, width } = useScreen()
48
- const contentSize = useMemo(() => ({ height, width }), [height, width])
49
- const scale = useRef(new Animated.Value(0)).current
50
- const baseY = useRef(new Animated.Value(getContentY(enterStatus ?? 'next', contentSize))).current
51
- const y = Animated.add(baseY, offsetY)
52
-
53
- const docPath = useMemo(() => `${collectionPath}/${id}`, [collectionPath, id])
54
- const { data: item } = useDocument<T>(docPath, onItemLoad)
55
-
56
- // const init = useRef<{
57
- // status: PanelStatus
58
- // contentSize: Size
59
- // y: number
60
- // scale: number
61
- // }>({
62
- // contentSize,
63
- // status: enterStatus ?? status,
64
- // // x: getContentX(fromStatus || status, contentSize),
65
- // y: getContentY(enterStatus ?? status, contentSize),
66
- // scale: getContentScale(enterStatus ?? status),
67
- // })
68
-
69
- useEffect(() => {
70
- const newScale = getContentScale(status)
71
- const updatedY = getContentY(status, contentSize)
72
- baseY.setValue(updatedY)
73
- scale.setValue(newScale)
74
- // baseY.set(updatedY)
75
- // scale.set(newScale)
76
- }, [status, baseY, scale, contentSize])
77
-
78
- return (
79
- // <AnimatePresence>
80
- <Animated.View
81
- style={{
82
- position: 'absolute',
83
- top: 0,
84
- left: 0,
85
- transform: [{ translateY: y }, { scale }],
86
- display: 'flex',
87
- alignItems: 'center',
88
- justifyContent: 'center',
89
- height: '100%',
90
- opacity: scale,
91
- width: '100%',
92
- }}>
93
- {item ? RenderItem(item) : null}
94
- </Animated.View>
95
- // </AnimatePresence>
96
- )
97
- }
@@ -1,199 +0,0 @@
1
- import { AnyObject, WithId } from '@chem-po/core'
2
- import {
3
- MediaBackgroundRef,
4
- MediaFeedProps,
5
- PanelData,
6
- UpdatePanelsArgs,
7
- useScreen,
8
- useTheme,
9
- } from '@chem-po/react'
10
- import React, { Dispatch, PropsWithChildren, useCallback, useMemo, useRef, useState } from 'react'
11
- import { Animated, StyleSheet, View, ViewStyle } from 'react-native'
12
- import {
13
- Gesture,
14
- GestureDetector,
15
- GestureStateChangeEvent,
16
- GestureUpdateEvent,
17
- PanGestureHandlerEventPayload,
18
- } from 'react-native-gesture-handler'
19
- import { fill } from '../../styles/fill'
20
- import { Center } from '../box/Center'
21
- import { LoadingOverlay } from '../loading/LoadingOverlay'
22
- import { REFRESH_THRESHOLD, SWIPE_THRESHOLD } from './constants'
23
- import { MediaFeedProvider } from './context'
24
- import { FeedContentPane } from './FeedContentPane'
25
- import { useMediaFeed } from './hooks'
26
- import { MediaFeedBackground } from './MediaFeedBackground'
27
- import { MediaFeedRefresh } from './MediaFeedRefresh'
28
-
29
- const useUpdatePanels = (setItems: Dispatch<React.SetStateAction<Array<PanelData>>>) =>
30
- useCallback(
31
- (data: UpdatePanelsArgs) => {
32
- const updated: PanelData[] = []
33
- if (data.prev) updated.push({ status: 'prev', id: data.prev })
34
- if (data.curr) {
35
- updated.push({
36
- status: 'current',
37
- id: data.curr,
38
- })
39
- }
40
- if (data.next) updated.push({ status: 'next', id: data.next })
41
- setItems(updated)
42
- },
43
- [setItems],
44
- )
45
-
46
- export const MediaFeed = <T extends AnyObject = AnyObject>({
47
- fetch,
48
- collection: collectionPath,
49
- RenderItem,
50
- authRequired,
51
- getBackgroundUrl,
52
- getBackgroundValue,
53
- limit,
54
- defaultBackground,
55
- swipeDisabled,
56
- children,
57
- }: PropsWithChildren<MediaFeedProps<T>>) => {
58
- const { width, height } = useScreen()
59
- const { theme } = useTheme()
60
-
61
- const contentRef = useRef<View>(null)
62
- const containerRef = useRef<View>(null)
63
- // const panels = useRef<Array<FeedContentPaneRef>>([])
64
- const [direction, setDirection] = useState<'next' | 'prev' | null>(null)
65
- const [panels, setPanels] = useState<Array<PanelData>>([])
66
-
67
- const offsetY = useRef(new Animated.Value(0)).current
68
- const onNewData = useUpdatePanels(setPanels)
69
-
70
- const backgroundRef = useRef<MediaBackgroundRef<T>>(null)
71
-
72
- const { goNext, goPrev, loading, canGoNext, canGoPrev, refresh, refreshing } = useMediaFeed(
73
- fetch,
74
- onNewData,
75
- limit,
76
- authRequired,
77
- )
78
-
79
- const pointerDown = useRef(false)
80
- const dragStart = useRef({ x: 0, y: 0 })
81
-
82
- const onDragStart = useCallback(
83
- (e: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {
84
- if (swipeDisabled) return
85
- pointerDown.current = true
86
- dragStart.current = { x: e.x, y: e.y }
87
- },
88
- [swipeDisabled],
89
- )
90
-
91
- const onDragEnd = useCallback(
92
- (e: GestureStateChangeEvent<PanGestureHandlerEventPayload>) => {
93
- if (!pointerDown.current) return
94
-
95
- const maxY = canGoPrev ? SWIPE_THRESHOLD : REFRESH_THRESHOLD
96
- const minY = canGoNext ? -SWIPE_THRESHOLD : -REFRESH_THRESHOLD
97
- const oY = Math.max(minY, Math.min(maxY, e.y - dragStart.current.y))
98
-
99
- if (canGoNext && oY < -(SWIPE_THRESHOLD - 10)) {
100
- setDirection('next')
101
- goNext()
102
- } else if (canGoPrev && oY > SWIPE_THRESHOLD - 10) {
103
- setDirection('prev')
104
- goPrev()
105
- } else if (oY > REFRESH_THRESHOLD - 10 || oY < -(REFRESH_THRESHOLD - 10)) {
106
- refresh()
107
- if (backgroundRef.current) backgroundRef.current.onNewData(null)
108
- }
109
-
110
- offsetY.setValue(0)
111
- pointerDown.current = false
112
- },
113
- [offsetY, goNext, goPrev, canGoNext, canGoPrev, refresh],
114
- )
115
-
116
- const onDragMove = useCallback(
117
- (e: GestureUpdateEvent<PanGestureHandlerEventPayload>) => {
118
- if (!pointerDown.current) return
119
-
120
- const oX = Math.max(-10, Math.min(10, e.x - dragStart.current.x))
121
- const maxY = canGoPrev ? SWIPE_THRESHOLD : REFRESH_THRESHOLD
122
- const minY = canGoNext ? -SWIPE_THRESHOLD : -REFRESH_THRESHOLD
123
- const oY = Math.max(minY, Math.min(maxY, e.y - dragStart.current.y))
124
-
125
- const dist = Math.sqrt(oX ** 2 + oY ** 2)
126
- if (dist > 10 && contentRef.current) {
127
- // contentRef.current.style.setProperty('pointer-events', 'none')
128
- }
129
- offsetY.setValue(oY)
130
- },
131
- [offsetY, canGoNext, canGoPrev],
132
- )
133
-
134
- const panGesture = Gesture.Pan().onStart(onDragStart).onUpdate(onDragMove).onEnd(onDragEnd)
135
-
136
- const containerStyle = useMemo<ViewStyle>(
137
- () => ({
138
- height,
139
- width,
140
- overflow: 'hidden',
141
- pointerEvents: swipeDisabled ? 'none' : 'auto',
142
- }),
143
- [width, height, swipeDisabled],
144
- )
145
- const [curr, setCurr] = useState<WithId<T> | null>(null)
146
-
147
- const handleItemLoad = useCallback(
148
- (data: WithId<T> | null) => {
149
- const isCurr = panels.find(p => p.status === 'current')?.id === data?.id
150
- if (isCurr) setCurr(data)
151
- },
152
- [panels],
153
- )
154
-
155
- return (
156
- <MediaFeedProvider curr={curr}>
157
- <GestureDetector gesture={panGesture}>
158
- <Center
159
- style={[
160
- styles.container,
161
- { backgroundColor: defaultBackground ?? theme.colors.background[100] },
162
- ]}>
163
- <MediaFeedBackground
164
- item={curr}
165
- getBackgroundValue={getBackgroundValue}
166
- getBackgroundUrl={getBackgroundUrl}
167
- />
168
- <View style={containerStyle} ref={containerRef}>
169
- <Center style={fill.relative} ref={contentRef}>
170
- {panels.map(panel => (
171
- <FeedContentPane<T>
172
- key={panel.id}
173
- id={panel.id}
174
- collectionPath={collectionPath}
175
- RenderItem={RenderItem}
176
- onItemLoad={handleItemLoad}
177
- status={panel.status}
178
- enterStatus={direction}
179
- offsetY={offsetY}
180
- />
181
- ))}
182
- </Center>
183
- </View>
184
- <MediaFeedRefresh canRefresh={!canGoPrev} refreshing={refreshing} offsetY={offsetY} />
185
- {/* {onSwipeUp ? <MediaFeedSwipeUp offsetY={offsetY} /> : null} */}
186
- <LoadingOverlay loading={loading} />
187
- {children ? <Center style={[fill.absolute, { zIndex: 3 }]}>{children}</Center> : null}
188
- </Center>
189
- </GestureDetector>
190
- </MediaFeedProvider>
191
- )
192
- }
193
-
194
- const styles = StyleSheet.create({
195
- container: {
196
- ...fill.relative,
197
- overflow: 'hidden',
198
- },
199
- })
@@ -1,136 +0,0 @@
1
- import { AnyObject, WithId } from '@chem-po/core'
2
- import { GetBackgroundUrl, GetBackgroundValue, useObjectUrl } from '@chem-po/react'
3
- import React, { useEffect, useMemo, useRef, useState } from 'react'
4
- import { ImageBackground, StyleSheet, View, ViewProps } from 'react-native'
5
- import { fill } from '../../styles/fill'
6
- import { Center } from '../box/Center'
7
- import { LoadingLogo } from '../loading'
8
-
9
- const emptyPng =
10
- 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkAAIAAAoAAv/lxKUAAAAASUVORK5CYII='
11
- export const backgroundStyle = StyleSheet.create({
12
- imageBackground: {
13
- flex: 1,
14
- transform: [{ scale: 1.075 }],
15
- },
16
- })
17
-
18
- interface FillBackgroundProps extends ViewProps {
19
- background: string | null
20
- opacity?: number
21
- }
22
-
23
- const FillBackground: React.FC<FillBackgroundProps> = ({
24
- background,
25
- opacity = 0.7,
26
- style,
27
- ...props
28
- }) => (
29
- <View style={[fill.absolute, style]} {...props}>
30
- <ImageBackground
31
- source={{ uri: background ?? emptyPng }}
32
- style={[backgroundStyle.imageBackground, { opacity }]}
33
- resizeMode="cover"></ImageBackground>
34
- </View>
35
- )
36
-
37
- interface FileValueBackgroundProps<T extends AnyObject = AnyObject> {
38
- getBackgroundValue: GetBackgroundValue<T>
39
- item: WithId<T> | null
40
- filter?: string
41
- }
42
- const FileValueBackground = <T extends AnyObject = AnyObject>({
43
- getBackgroundValue,
44
- item,
45
- }: FileValueBackgroundProps<T>) => {
46
- const background = useMemo(
47
- () => (item ? getBackgroundValue(item) : null),
48
- [getBackgroundValue, item],
49
- )
50
- const { loading, url } = useObjectUrl(background)
51
- const usedIndex = useRef(0)
52
- const [index, setIndex] = useState(0)
53
- const [url1, setUrl1] = useState<string | null>(null)
54
- const [url2, setUrl2] = useState<string | null>(null)
55
-
56
- useEffect(() => {
57
- const usedIdx = usedIndex.current
58
- if (usedIdx === 0) {
59
- setUrl1(url)
60
- usedIndex.current = 1
61
- setIndex(0)
62
- } else {
63
- setUrl2(url)
64
- usedIndex.current = 0
65
- setIndex(1)
66
- }
67
- }, [url])
68
-
69
- return (
70
- <Center style={fill.absolute}>
71
- <FillBackground opacity={index === 0 ? 1 : 0} background={url1} />
72
- <FillBackground opacity={index === 1 ? 1 : 0} background={url2} />
73
- <LoadingLogo isLoading={loading} />
74
- </Center>
75
- )
76
- }
77
-
78
- const UrlBackground = <T extends AnyObject = AnyObject>({
79
- getBackgroundUrl,
80
- item,
81
- }: {
82
- getBackgroundUrl: GetBackgroundUrl<T>
83
- item: T | null
84
- }) => {
85
- const background = useMemo(() => (item ? getBackgroundUrl(item) : null), [getBackgroundUrl, item])
86
- const usedIndex = useRef(0)
87
- const [index, setIndex] = useState(0)
88
- const [url1, setUrl1] = useState<string | null>(null)
89
- const [url2, setUrl2] = useState<string | null>(null)
90
-
91
- useEffect(() => {
92
- if (!background) return
93
- if (usedIndex.current === 0) {
94
- setUrl1(background)
95
- usedIndex.current = 1
96
- setIndex(0)
97
- } else {
98
- setUrl2(background)
99
- usedIndex.current = 0
100
- setIndex(1)
101
- }
102
- }, [background])
103
-
104
- return (
105
- <Center style={fill.absolute}>
106
- <FillBackground
107
- //filter={filter}
108
- opacity={index === 0 ? 1 : 0}
109
- background={url1}
110
- />
111
- <FillBackground
112
- //filter={filter}
113
- opacity={index === 1 ? 1 : 0}
114
- background={url2}
115
- />
116
- </Center>
117
- )
118
- }
119
-
120
- interface MediaFeedBackgroundProps<T extends AnyObject = AnyObject> {
121
- getBackgroundValue?: GetBackgroundValue<T>
122
- getBackgroundUrl?: GetBackgroundUrl<T>
123
- filter?: string
124
- item: WithId<T> | null
125
- }
126
-
127
- export const MediaFeedBackground = <T extends AnyObject = AnyObject>({
128
- getBackgroundValue,
129
- getBackgroundUrl,
130
- ...props
131
- }: MediaFeedBackgroundProps<T>) => {
132
- if (getBackgroundValue)
133
- return <FileValueBackground getBackgroundValue={getBackgroundValue} {...props} />
134
- if (getBackgroundUrl) return <UrlBackground getBackgroundUrl={getBackgroundUrl} {...props} />
135
- return null
136
- }
@@ -1,113 +0,0 @@
1
- import Icon from '@expo/vector-icons/MaterialCommunityIcons' // or your preferred icon set
2
- import React, { useEffect, useRef } from 'react'
3
- import { Animated, StyleSheet, View } from 'react-native'
4
- import { DropShadow } from '../box/DropShadow'
5
- import { CircularProgress } from '../loading'
6
- import { REFRESH_THRESHOLD, SWIPE_THRESHOLD } from './constants'
7
-
8
- const WINDOW = REFRESH_THRESHOLD - SWIPE_THRESHOLD
9
-
10
- export const MediaFeedRefresh = ({
11
- offsetY,
12
- refreshing,
13
- canRefresh,
14
- }: {
15
- offsetY: Animated.Value
16
- refreshing: boolean
17
- canRefresh: boolean
18
- }) => {
19
- // Create animated values
20
- const baseY = useRef(new Animated.Value(0)).current
21
- const isIn = useRef(new Animated.Value(0)).current
22
-
23
- const dist = Animated.subtract(offsetY, SWIPE_THRESHOLD)
24
- const baseProgress = Animated.divide(dist, WINDOW)
25
- const progress = Animated.diffClamp(baseProgress, 0, 1)
26
-
27
- // Handle refreshing state
28
- useEffect(() => {
29
- Animated.spring(baseY, {
30
- toValue: refreshing ? 50 : 0,
31
- useNativeDriver: true,
32
- }).start()
33
- }, [refreshing, baseY])
34
-
35
- // Handle canRefresh state
36
- useEffect(() => {
37
- Animated.spring(isIn, {
38
- toValue: canRefresh ? 1 : 0,
39
- useNativeDriver: true,
40
- }).start()
41
- }, [canRefresh, isIn])
42
-
43
- // Create complex animations
44
- const progressRoot = progress.interpolate({
45
- inputRange: [0, 1],
46
- outputRange: [0, Math.sqrt(1) * 20],
47
- })
48
-
49
- const yBase = Animated.add(baseY, progressRoot)
50
- const yConstrained = yBase.interpolate({
51
- inputRange: [0, 20],
52
- outputRange: [0, 20],
53
- extrapolate: 'clamp',
54
- })
55
-
56
- const y = Animated.multiply(isIn, yConstrained)
57
-
58
- const scale = y.interpolate({
59
- inputRange: [0, 30],
60
- outputRange: [0, 1],
61
- extrapolate: 'clamp',
62
- })
63
- const finalScale = Animated.multiply(isIn, scale)
64
-
65
- const rotate = progress.interpolate({
66
- inputRange: [0, 1],
67
- outputRange: ['0deg', '180deg'],
68
- })
69
-
70
- return (
71
- <Animated.View
72
- style={[
73
- styles.container,
74
- {
75
- opacity: finalScale,
76
- transform: [{ translateY: y }, { scale: finalScale }, { rotate }],
77
- },
78
- ]}>
79
- <View style={styles.centerContainer}>
80
- <DropShadow
81
- style={[
82
- {
83
- opacity: refreshing ? 0 : 1,
84
- },
85
- ]}>
86
- <Icon name="refresh" size={32} color="white" />
87
- </DropShadow>
88
-
89
- <DropShadow
90
- style={{
91
- opacity: refreshing ? 1 : 0,
92
- }}>
93
- <CircularProgress animating size="large" color="white" />
94
- </DropShadow>
95
- </View>
96
- </Animated.View>
97
- )
98
- }
99
-
100
- const styles = StyleSheet.create({
101
- container: {
102
- position: 'absolute',
103
- top: 0,
104
- left: 0,
105
- right: 0,
106
- pointerEvents: 'none',
107
- },
108
- centerContainer: {
109
- alignItems: 'center',
110
- justifyContent: 'center',
111
- width: '100%',
112
- },
113
- })
@@ -1,2 +0,0 @@
1
- export const SWIPE_THRESHOLD = 75
2
- export const REFRESH_THRESHOLD = 100
@@ -1,19 +0,0 @@
1
- import { AnyObject, WithId } from '@chem-po/core'
2
- import React, { createContext, PropsWithChildren, useContext, useMemo } from 'react'
3
-
4
- interface MediaFeedContextValue<T extends AnyObject = AnyObject> {
5
- curr: WithId<T> | null
6
- }
7
- export const MediaFeedContext = createContext<MediaFeedContextValue<any>>(
8
- {} as MediaFeedContextValue<any>,
9
- )
10
-
11
- export const MediaFeedProvider = <T extends AnyObject = AnyObject>({
12
- curr,
13
- children,
14
- }: PropsWithChildren<{ curr: WithId<T> | null }>) => {
15
- const contextData = useMemo(() => ({ curr }), [curr])
16
- return <MediaFeedContext.Provider value={contextData}>{children}</MediaFeedContext.Provider>
17
- }
18
- export const useMediaFeed = <T extends AnyObject = AnyObject>() =>
19
- useContext(MediaFeedContext) as MediaFeedContextValue<T>