@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,196 +0,0 @@
1
- import { ElementSize } from '@chem-po/core'
2
- import { Ionicons } from '@expo/vector-icons'
3
- import React, { PropsWithChildren, useMemo } from 'react'
4
- import { StyleProp, StyleSheet, TextStyle, View, ViewStyle } from 'react-native'
5
- import { Pressable } from 'react-native-gesture-handler'
6
- import { useFontScale } from '../../store/useFontScale'
7
- import { CircularProgressProps } from '../loading'
8
- import { WithLoadingOverlay } from '../loading/LoadingOverlay'
9
- import { ButtonText } from './ButtonText'
10
- import {
11
- useButtonBackgroundColor,
12
- useButtonBorderColor,
13
- useButtonColors,
14
- useButtonTextColor,
15
- } from './hooks'
16
-
17
- export interface ActionButtonProps extends PropsWithChildren {
18
- icon?: {
19
- name: React.ComponentProps<typeof Ionicons>['name']
20
- size?: number
21
- }
22
- iconProps?: React.ComponentProps<typeof Ionicons>
23
- style?: StyleProp<ViewStyle>
24
- onPress: () => void
25
- disabled?: boolean
26
- textStyle?: StyleProp<TextStyle>
27
- size?: ElementSize
28
- color?: string
29
- rippleColor?: string
30
- variant?: 'outline' | 'solid'
31
- disabledColor?: string
32
- loading?: boolean
33
- }
34
-
35
- const getIndicatorSize = (size: ElementSize) => {
36
- switch (size) {
37
- case 'sm':
38
- return 18
39
- case 'md':
40
- return 22
41
- case 'lg':
42
- return 26
43
- }
44
- }
45
-
46
- const getContentGap = (size: ElementSize) => {
47
- switch (size) {
48
- case 'sm':
49
- return 4
50
- case 'lg':
51
- return 8
52
- default:
53
- return 6
54
- }
55
- }
56
-
57
- export const ActionButton = ({
58
- children,
59
- onPress,
60
- style,
61
- textStyle,
62
- disabled = false,
63
- loading,
64
- size = 'md',
65
- disabledColor,
66
- color: colorProp,
67
- icon,
68
- iconProps,
69
- variant = 'solid',
70
- rippleColor: rippleColorProp,
71
- }: ActionButtonProps) => {
72
- const colors = useButtonColors(variant)
73
- const rippleColor = useMemo(
74
- () => rippleColorProp ?? colors.ripple,
75
- [rippleColorProp, colors.ripple],
76
- )
77
- const fontScale = useFontScale(s => s.fontScale)
78
- const textColor = useButtonTextColor(colors, variant, colorProp, disabled, disabledColor)
79
- const backgroundColor = useButtonBackgroundColor(
80
- colors,
81
- variant,
82
- colorProp,
83
- disabled,
84
- disabledColor,
85
- )
86
- const borderColor = useButtonBorderColor(colors, variant, colorProp, disabled, disabledColor)
87
- const indicatorProps = useMemo<CircularProgressProps>(() => {
88
- return { color: textColor, size: getIndicatorSize(size) * fontScale }
89
- }, [textColor, size, fontScale])
90
-
91
- const body =
92
- typeof children === 'string' ? (
93
- <ButtonText
94
- variant={variant}
95
- color={colorProp}
96
- disabledColor={disabledColor}
97
- disabled={disabled}
98
- size={size}
99
- style={textStyle}>
100
- {children}
101
- </ButtonText>
102
- ) : (
103
- children
104
- )
105
-
106
- const content = (
107
- <View style={[styles.content, { gap: getContentGap(size) }]}>
108
- {icon ? (
109
- <Ionicons
110
- name={icon.name}
111
- size={(icon.size ?? 20) * fontScale}
112
- color={textColor}
113
- {...iconProps}
114
- style={[variant === 'solid' ? styles.iconShadow : {}, iconProps?.style]}
115
- />
116
- ) : null}
117
- {body}
118
- </View>
119
- )
120
-
121
- return (
122
- <Pressable
123
- style={[
124
- containerStyles.base,
125
- containerStyles[size],
126
- variant === 'solid' ? styles.buttonShadow : { borderWidth: 1 },
127
- { backgroundColor, borderColor },
128
- style,
129
- ]}
130
- onPress={onPress}
131
- android_ripple={{ color: rippleColor }}
132
- disabled={disabled || loading}>
133
- {loading !== undefined ? (
134
- <WithLoadingOverlay loading={loading} indicatorProps={indicatorProps}>
135
- {content}
136
- </WithLoadingOverlay>
137
- ) : (
138
- content
139
- )}
140
- </Pressable>
141
- )
142
- }
143
-
144
- export const RoundedButton = ({ style, ...props }: ActionButtonProps) => {
145
- return <ActionButton style={[styles.rounded, style]} {...props} />
146
- }
147
-
148
- const styles = StyleSheet.create({
149
- rounded: {
150
- borderRadius: 100,
151
- },
152
- content: {
153
- flexDirection: 'row',
154
- alignItems: 'center',
155
- justifyContent: 'center',
156
- },
157
- buttonShadow: {
158
- shadowColor: '#000000',
159
- shadowOffset: { width: 1, height: 1 },
160
- shadowRadius: 6,
161
- shadowOpacity: 0.25,
162
- elevation: 2,
163
- },
164
- iconShadow: {
165
- textShadowColor: 'rgba(0, 0, 0, 0.3)',
166
- textShadowOffset: { width: 1, height: 1 },
167
- textShadowRadius: 4,
168
- },
169
- })
170
-
171
- const containerStyles = StyleSheet.create({
172
- base: {
173
- justifyContent: 'center',
174
- alignItems: 'center',
175
- },
176
- lg: {
177
- paddingVertical: 10,
178
- paddingHorizontal: 16,
179
- borderRadius: 5,
180
- },
181
- md: {
182
- paddingVertical: 6,
183
- paddingHorizontal: 12,
184
- borderRadius: 4,
185
- },
186
- sm: {
187
- paddingVertical: 4,
188
- paddingHorizontal: 8,
189
- borderRadius: 3,
190
- },
191
- xs: {
192
- paddingVertical: 4,
193
- paddingHorizontal: 8,
194
- borderRadius: 2,
195
- },
196
- })
@@ -1,60 +0,0 @@
1
- import { ElementSize } from '@chem-po/core'
2
- import React from 'react'
3
- import { StyleProp, StyleSheet, Text, TextStyle } from 'react-native'
4
- import { useButtonColors, useButtonFont, useButtonTextColor } from './hooks'
5
-
6
- export interface ButtonTextProps {
7
- children: string
8
- style?: StyleProp<TextStyle>
9
- variant?: 'outline' | 'solid'
10
- color?: string
11
- disabledColor?: string
12
- disabled?: boolean
13
- size?: ElementSize
14
- }
15
-
16
- export const ButtonText = ({
17
- children,
18
- style,
19
- disabled = false,
20
- size = 'md',
21
- disabledColor,
22
- color: colorProp,
23
- variant = 'solid',
24
- }: ButtonTextProps) => {
25
- const colors = useButtonColors(variant)
26
- const fontStyle = useButtonFont(size)
27
- const textColor = useButtonTextColor(colors, variant, colorProp, disabled, disabledColor)
28
-
29
- return (
30
- <Text
31
- style={[
32
- styles[size],
33
- fontStyle,
34
- variant === 'solid' ? styles.textShadow : {},
35
- { color: textColor },
36
- style,
37
- ]}>
38
- {children}
39
- </Text>
40
- )
41
- }
42
- const styles = StyleSheet.create({
43
- lg: {
44
- fontSize: 18,
45
- },
46
- md: {
47
- fontSize: 16,
48
- },
49
- sm: {
50
- fontSize: 14,
51
- },
52
- xs: {
53
- fontSize: 12,
54
- },
55
- textShadow: {
56
- textShadowColor: 'rgba(0, 0, 0, 0.25)',
57
- textShadowOffset: { width: 1, height: 1 },
58
- textShadowRadius: 3,
59
- },
60
- })
@@ -1,288 +0,0 @@
1
- import { useBackgroundColor, useColorModeValue, useToast } from '@chem-po/react'
2
- import { Ionicons } from '@expo/vector-icons'
3
- import React, { ReactNode, useCallback, useEffect, useRef, useState } from 'react'
4
- import { ActivityIndicator, StyleSheet, View } from 'react-native'
5
- import { Pressable } from 'react-native-gesture-handler'
6
- import { Modal, Portal } from 'react-native-paper'
7
- import { useFontScale } from '../../store/useFontScale'
8
- import { Txt } from '../text/Txt'
9
- import { ActionButton, ActionButtonProps } from './ActionButton'
10
- import { ButtonText } from './ButtonText'
11
-
12
- const defaultAlertBodyText = "Are you sure? You can't undo this action afterwards."
13
-
14
- export const DeleteConfirmAlert = ({
15
- confirmActive,
16
- onCancel,
17
- onConfirm,
18
- body = defaultAlertBodyText,
19
- actionName = 'Delete',
20
- actionLoading,
21
- itemName,
22
- color,
23
- cancelText = 'CANCEL',
24
- }: {
25
- confirmActive: boolean
26
- onCancel: () => void
27
- onConfirm: () => void
28
- body?: string | ReactNode
29
- actionLoading?: boolean
30
- color: string
31
- actionName?: string
32
- cancelText?: string
33
- itemName: string
34
- }) => {
35
- const backgroundColor = useBackgroundColor(100)
36
- const fontScale = useFontScale(s => s.fontScale)
37
- return (
38
- <Portal>
39
- <Modal style={styles.modal} visible={confirmActive} onDismiss={onCancel}>
40
- <View style={[styles.alertContainer, { backgroundColor, maxWidth: 300 * fontScale }]}>
41
- <Txt style={styles.alertTitle}>
42
- {actionName} {itemName}?
43
- </Txt>
44
- {typeof body === 'string' ? <Txt style={styles.alertBody}>{body}</Txt> : body}
45
- <View style={styles.buttonContainer}>
46
- <Pressable style={styles.cancelButton} onPress={onCancel}>
47
- <Txt style={styles.cancelText}>{cancelText}</Txt>
48
- </Pressable>
49
- <Pressable
50
- style={[styles.confirmButton, { backgroundColor: color }]}
51
- onPress={onConfirm}
52
- disabled={actionLoading}>
53
- {actionLoading ? (
54
- <ActivityIndicator size={20 * fontScale} color="#fff" />
55
- ) : (
56
- <Txt style={[styles.buttonText, styles.confirmButtonText]}>
57
- {actionName.toUpperCase()}
58
- </Txt>
59
- )}
60
- </Pressable>
61
- </View>
62
- </View>
63
- </Modal>
64
- </Portal>
65
- )
66
- }
67
-
68
- export interface DeleteButtonProps extends Omit<ActionButtonProps, 'onPress' | 'loading'> {
69
- onDelete: (() => Promise<any>) | (() => void)
70
- itemName: string
71
- actionName?: string
72
- noConfirm?: boolean
73
- text?: string
74
- alertBody?: string | ReactNode
75
- iconSize?: number
76
- iconProps?: React.ComponentProps<typeof Ionicons>
77
- }
78
- export const DeleteButton: React.FC<DeleteButtonProps> = ({
79
- onDelete,
80
- itemName,
81
- noConfirm,
82
- alertBody,
83
- text,
84
- actionName = 'Delete',
85
- style,
86
- color: colorProp,
87
- variant = 'outline',
88
- iconSize = 18,
89
- iconProps,
90
- ...buttonProps
91
- }) => {
92
- const { size, disabledColor, textStyle } = buttonProps
93
- const { showError } = useToast()
94
- const [deleteLoading, setDeleteLoading] = useState(false)
95
- const [confirmActive, setConfirmActive] = useState(false)
96
- const confirmTimer = useRef<ReturnType<typeof setTimeout> | null>(null)
97
- const isMounted = useRef(true)
98
- const defaultColor = useColorModeValue('#dd4444', '#ff4444')
99
- const color = colorProp ?? defaultColor
100
- const fontScale = useFontScale(s => s.fontScale)
101
- useEffect(() => {
102
- isMounted.current = true
103
-
104
- return () => {
105
- isMounted.current = false
106
- }
107
- }, [])
108
-
109
- const handleDelete = useCallback(async () => {
110
- if (confirmTimer.current) clearTimeout(confirmTimer.current)
111
- setConfirmActive(false)
112
- if (onDelete) {
113
- setDeleteLoading(true)
114
- try {
115
- await onDelete()
116
- } catch (err: any) {
117
- console.error(err)
118
- showError(err.message ?? 'An error occurred')
119
- }
120
- if (isMounted.current) {
121
- setDeleteLoading(false)
122
- }
123
- } else {
124
- console.error('No delete function')
125
- }
126
- }, [onDelete, showError])
127
-
128
- return (
129
- <>
130
- <ActionButton
131
- style={[
132
- {
133
- borderColor: color,
134
- backgroundColor: variant === 'solid' ? color : 'transparent',
135
- borderWidth: variant === 'outline' ? 1 : 0,
136
- },
137
- style,
138
- ]}
139
- variant={variant}
140
- onPress={() => {
141
- if (noConfirm) handleDelete()
142
- else setConfirmActive(true)
143
- }}
144
- loading={deleteLoading}
145
- disabled={deleteLoading}
146
- {...buttonProps}>
147
- <View style={styles.contentContainer}>
148
- <Ionicons
149
- name="trash"
150
- size={iconSize * fontScale}
151
- color={variant === 'solid' ? 'white' : color}
152
- {...iconProps}
153
- style={[variant === 'solid' ? styles.shadow : {}, iconProps?.style]}
154
- />
155
- {text ? (
156
- <ButtonText
157
- variant={variant}
158
- color={color}
159
- disabledColor={disabledColor}
160
- size={size}
161
- style={textStyle}>
162
- {text}
163
- </ButtonText>
164
- ) : null}
165
- </View>
166
- </ActionButton>
167
- {noConfirm ? null : (
168
- <DeleteConfirmAlert
169
- confirmActive={confirmActive}
170
- onCancel={() => setConfirmActive(false)}
171
- actionLoading={deleteLoading}
172
- onConfirm={() => {
173
- handleDelete()
174
- }}
175
- actionName={actionName}
176
- body={alertBody}
177
- itemName={itemName}
178
- color={color}
179
- />
180
- )}
181
- </>
182
- )
183
- }
184
-
185
- const styles = StyleSheet.create({
186
- alertContainer: {
187
- backgroundColor: 'white',
188
- borderRadius: 10,
189
- padding: 20,
190
- maxWidth: 300,
191
- alignItems: 'center',
192
- },
193
- modal: {
194
- flex: 1,
195
- justifyContent: 'center',
196
- alignItems: 'center',
197
- },
198
- alertTitle: {
199
- fontSize: 18,
200
- fontWeight: 'bold',
201
- marginBottom: 10,
202
- },
203
- alertBody: {
204
- fontSize: 16,
205
- marginBottom: 20,
206
- textAlign: 'center',
207
- },
208
- buttonContainer: {
209
- flexDirection: 'row',
210
- alignItems: 'center',
211
- justifyContent: 'space-between',
212
- width: '100%',
213
- },
214
- cancelButton: {
215
- padding: 10,
216
- borderColor: 'gray',
217
- borderWidth: 1,
218
- borderRadius: 5,
219
- flex: 1,
220
- marginRight: 5,
221
- alignItems: 'center',
222
- },
223
- cancelText: {
224
- color: 'gray',
225
- fontWeight: 'bold',
226
- },
227
- confirmButton: {
228
- padding: 10,
229
- backgroundColor: 'red',
230
- borderRadius: 5,
231
- flex: 1,
232
- marginLeft: 5,
233
- alignItems: 'center',
234
- },
235
- buttonText: {
236
- fontWeight: 'bold',
237
- },
238
- confirmButtonText: {
239
- color: 'white',
240
- textShadowColor: 'rgba(0, 0, 0, 0.5)',
241
- textShadowOffset: { width: 1, height: 1 },
242
- textShadowRadius: 3,
243
- },
244
- button: {
245
- flexDirection: 'row',
246
- alignItems: 'center',
247
- borderRadius: 4,
248
- },
249
- contentContainer: {
250
- flexDirection: 'row',
251
- alignItems: 'center',
252
- justifyContent: 'center',
253
- gap: 4,
254
- },
255
- loaderContainer: {
256
- ...StyleSheet.absoluteFillObject,
257
- alignItems: 'center',
258
- justifyContent: 'center',
259
- },
260
- shadow: {
261
- textShadowColor: 'rgba(0, 0, 0, 0.3)',
262
- textShadowOffset: { width: 1, height: 1 },
263
- textShadowRadius: 4,
264
- },
265
- iconButton: {
266
- backgroundColor: 'transparent',
267
- borderRadius: 4,
268
- width: 32,
269
- height: 32,
270
- alignItems: 'center',
271
- justifyContent: 'center',
272
- },
273
- iconButtonContent: {
274
- flexDirection: 'row',
275
- alignItems: 'center',
276
- justifyContent: 'center',
277
- gap: 3,
278
- },
279
- loading: {
280
- position: 'absolute',
281
- top: 0,
282
- left: 0,
283
- justifyContent: 'center',
284
- alignItems: 'center',
285
- height: 24,
286
- width: 24,
287
- },
288
- })
@@ -1,41 +0,0 @@
1
- import { useToast } from '@chem-po/react'
2
- import React, { useCallback, useEffect, useRef, useState } from 'react'
3
- import { ActionButton, ActionButtonProps } from './ActionButton'
4
-
5
- export interface LoadingButtonProps<ReturnType = any> extends Omit<
6
- ActionButtonProps,
7
- 'onPress' | 'loading'
8
- > {
9
- onPress: () => Promise<ReturnType>
10
- }
11
-
12
- export const LoadingButton: React.FC<LoadingButtonProps> = ({ onPress, ...props }) => {
13
- const [loading, setLoading] = useState(false)
14
- const { showError } = useToast()
15
-
16
- const isMounted = useRef(true)
17
- useEffect(() => {
18
- isMounted.current = true
19
-
20
- return () => {
21
- isMounted.current = false
22
- }
23
- }, [])
24
-
25
- const handlePress = useCallback(async () => {
26
- if (onPress) {
27
- setLoading(true)
28
- try {
29
- await onPress()
30
- } catch (err: any) {
31
- console.error(err)
32
- showError(err.message ?? 'An error occurred')
33
- }
34
- if (isMounted.current) {
35
- setLoading(false)
36
- }
37
- }
38
- }, [onPress, showError])
39
-
40
- return <ActionButton onPress={() => void handlePress()} loading={loading} {...props} />
41
- }
@@ -1,109 +0,0 @@
1
- import { useBackgroundColor, useBorderColor, useThemeValue, useToast } from '@chem-po/react'
2
- import React, { JSX, useCallback, useMemo } from 'react'
3
- import { StyleProp, StyleSheet, View, ViewStyle } from 'react-native'
4
- import { Pressable } from 'react-native-gesture-handler'
5
-
6
- export interface ToggleOption<Option extends string = string> {
7
- id: Option
8
- disabledMessage?: string
9
- Render: (selected: boolean) => JSX.Element
10
- }
11
-
12
- export interface ToggleProps<Option extends string> {
13
- options: ToggleOption<Option>[]
14
- value: Option
15
- size?: number | [number, number]
16
- onChange: (value: Option) => Promise<void> | void
17
- style?: StyleProp<ViewStyle>
18
- buttonStyle?: StyleProp<ViewStyle>
19
- }
20
-
21
- const ToggleButton = <Option extends string>({
22
- selected,
23
- option: { Render, disabledMessage },
24
- size,
25
- onPress,
26
- style,
27
- }: {
28
- option: ToggleOption<Option>
29
- size: number | [number, number]
30
- selected: boolean
31
- onPress: () => void
32
- style?: StyleProp<ViewStyle>
33
- }) => {
34
- const { showError } = useToast()
35
- const handlePress = useCallback(() => {
36
- if (!disabledMessage) {
37
- onPress()
38
- } else {
39
- showError(disabledMessage)
40
- }
41
- }, [onPress, disabledMessage, showError])
42
- const unselectedBackground = useBackgroundColor(150)
43
- const selectedBackground = useThemeValue('colors.accent.300')
44
- const [width, height] = useMemo(() => (typeof size === 'number' ? [size, size] : size), [size])
45
- const body = (
46
- <View style={[styles.buttonContainer, { width, height, opacity: !disabledMessage ? 1 : 0.6 }]}>
47
- <Pressable
48
- style={[
49
- styles.button,
50
- {
51
- backgroundColor: selected ? selectedBackground : unselectedBackground,
52
- pointerEvents: selected ? 'none' : 'auto',
53
- },
54
- style,
55
- ]}
56
- onPress={handlePress}
57
- disabled={!!disabledMessage}>
58
- {Render(selected)}
59
- </Pressable>
60
- </View>
61
- )
62
-
63
- return body
64
- }
65
-
66
- export const Toggle = <Option extends string>({
67
- value,
68
- onChange,
69
- size = 28,
70
- options,
71
- style,
72
- buttonStyle,
73
- }: ToggleProps<Option>) => {
74
- const borderColor = useBorderColor()
75
- const backgroundColor = useBackgroundColor(150)
76
- return (
77
- <View style={[styles.container, { borderColor, backgroundColor }, style]}>
78
- {options.map(option => (
79
- <ToggleButton<Option>
80
- key={option.id}
81
- onPress={() => {
82
- onChange(option.id)
83
- }}
84
- option={option}
85
- size={size}
86
- selected={option.id === value}
87
- style={buttonStyle}
88
- />
89
- ))}
90
- </View>
91
- )
92
- }
93
-
94
- const styles = StyleSheet.create({
95
- container: {
96
- flexDirection: 'row',
97
- borderWidth: 1,
98
- borderRadius: 3,
99
- },
100
- buttonContainer: {
101
- justifyContent: 'center',
102
- alignItems: 'center',
103
- },
104
- button: {
105
- justifyContent: 'center',
106
- alignItems: 'center',
107
- borderRadius: 3,
108
- },
109
- })