@codeleap/mobile 2.2.11 → 2.3.0

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 (116) hide show
  1. package/package.json +2 -1
  2. package/src/components/ActionIcon/index.tsx +0 -32
  3. package/src/components/ActionIcon/styles.ts +0 -97
  4. package/src/components/ActivityIndicator/index.tsx +0 -50
  5. package/src/components/ActivityIndicator/styles.ts +0 -68
  6. package/src/components/Animated.tsx +0 -34
  7. package/src/components/AutoComplete/index.tsx +0 -163
  8. package/src/components/AutoComplete/styles.ts +0 -44
  9. package/src/components/Backdrop/index.tsx +0 -48
  10. package/src/components/Backdrop/styles.ts +0 -33
  11. package/src/components/Button/index.tsx +0 -167
  12. package/src/components/Button/styles.ts +0 -129
  13. package/src/components/Calendar/index.tsx +0 -65
  14. package/src/components/Calendar/style.ts +0 -35
  15. package/src/components/Calendar/types.ts +0 -102
  16. package/src/components/Checkbox/index.tsx +0 -91
  17. package/src/components/Checkbox/styles.ts +0 -81
  18. package/src/components/ContentView/index.tsx +0 -63
  19. package/src/components/ContentView/styles.ts +0 -24
  20. package/src/components/Drawer/index.tsx +0 -33
  21. package/src/components/Drawer/styles.ts +0 -43
  22. package/src/components/EmptyPlaceholder/index.tsx +0 -88
  23. package/src/components/EmptyPlaceholder/styles.ts +0 -58
  24. package/src/components/FileInput/index.tsx +0 -181
  25. package/src/components/FileInput/styles.ts +0 -15
  26. package/src/components/Grid/index.tsx +0 -117
  27. package/src/components/Grid/styles.ts +0 -11
  28. package/src/components/Icon/index.tsx +0 -69
  29. package/src/components/Icon/styles.ts +0 -57
  30. package/src/components/Image/index.tsx +0 -91
  31. package/src/components/Image/styles.ts +0 -20
  32. package/src/components/ImageView/Spotlight.tsx +0 -157
  33. package/src/components/ImageView/component.tsx +0 -38
  34. package/src/components/ImageView/index.ts +0 -2
  35. package/src/components/InputLabel/index.tsx +0 -38
  36. package/src/components/InputLabel/styles.ts +0 -19
  37. package/src/components/List/PaginationIndicator.tsx +0 -71
  38. package/src/components/List/index.tsx +0 -114
  39. package/src/components/List/styles.ts +0 -19
  40. package/src/components/Modal/index.tsx +0 -218
  41. package/src/components/Modal/styles.ts +0 -153
  42. package/src/components/MultiSelect/index.tsx +0 -138
  43. package/src/components/MultiSelect/styles.ts +0 -18
  44. package/src/components/MultiSelect/types.ts +0 -42
  45. package/src/components/Navigation/Navigation.tsx +0 -54
  46. package/src/components/Navigation/constants.ts +0 -8
  47. package/src/components/Navigation/index.tsx +0 -3
  48. package/src/components/Navigation/types.ts +0 -35
  49. package/src/components/Navigation/utils.tsx +0 -57
  50. package/src/components/Pager/index.tsx +0 -121
  51. package/src/components/Pager/styles.ts +0 -81
  52. package/src/components/RadioInput/index.tsx +0 -106
  53. package/src/components/RadioInput/styles.ts +0 -67
  54. package/src/components/Scroll/index.tsx +0 -124
  55. package/src/components/Scroll/styles.ts +0 -18
  56. package/src/components/Sections/index.tsx +0 -91
  57. package/src/components/SegmentedControl/index.tsx +0 -204
  58. package/src/components/SegmentedControl/styles.ts +0 -89
  59. package/src/components/Select/index.tsx +0 -167
  60. package/src/components/Select/styles.ts +0 -62
  61. package/src/components/Select/types.ts +0 -43
  62. package/src/components/Slider/Mark.tsx +0 -46
  63. package/src/components/Slider/Thumb.tsx +0 -29
  64. package/src/components/Slider/index.tsx +0 -130
  65. package/src/components/Slider/styles.ts +0 -76
  66. package/src/components/Slider/types.ts +0 -30
  67. package/src/components/Switch/index.tsx +0 -91
  68. package/src/components/Switch/styles.ts +0 -38
  69. package/src/components/Text/index.tsx +0 -97
  70. package/src/components/Text/styles.ts +0 -50
  71. package/src/components/TextInput/index.tsx +0 -319
  72. package/src/components/TextInput/styles.ts +0 -127
  73. package/src/components/Touchable/index.tsx +0 -172
  74. package/src/components/Touchable/styles.ts +0 -28
  75. package/src/components/View/index.tsx +0 -103
  76. package/src/components/View/styles.ts +0 -24
  77. package/src/components/components.ts +0 -42
  78. package/src/components/defaultStyles.ts +0 -62
  79. package/src/components/legacy/Modal/index.tsx +0 -163
  80. package/src/components/legacy/Modal/styles.ts +0 -125
  81. package/src/components/legacy/Pager/index.tsx +0 -242
  82. package/src/components/legacy/Pager/styles.ts +0 -51
  83. package/src/components/legacy/index.ts +0 -2
  84. package/src/modules/documentPicker.ts +0 -7
  85. package/src/modules/fastImage.ts +0 -2
  86. package/src/modules/imageCropPicker.d.ts +0 -497
  87. package/src/modules/index.d.ts +0 -682
  88. package/src/modules/reactNavigation.ts +0 -15
  89. package/src/modules/textInputMask.ts +0 -11
  90. package/src/modules/types/documentPicker.d.ts +0 -215
  91. package/src/modules/types/fileTypes.ts +0 -138
  92. package/src/modules/types/textInputMask.ts +0 -9
  93. package/src/types/index.ts +0 -1
  94. package/src/types/utility.ts +0 -9
  95. package/src/utils/KeyboardAware/context.tsx +0 -75
  96. package/src/utils/KeyboardAware/index.ts +0 -17
  97. package/src/utils/KeyboardAware/keyboardHooks.ts +0 -124
  98. package/src/utils/KeyboardAware/lib/KeyboardAwareFlatList.ts +0 -4
  99. package/src/utils/KeyboardAware/lib/KeyboardAwareHOC.tsx +0 -618
  100. package/src/utils/KeyboardAware/lib/KeyboardAwareInterface.ts +0 -13
  101. package/src/utils/KeyboardAware/lib/KeyboardAwareScrollView.ts +0 -6
  102. package/src/utils/KeyboardAware/lib/KeyboardAwareSectionList.ts +0 -6
  103. package/src/utils/KeyboardAware/types.ts +0 -159
  104. package/src/utils/ModalManager/components.tsx +0 -112
  105. package/src/utils/ModalManager/context.tsx +0 -260
  106. package/src/utils/ModalManager/index.ts +0 -16
  107. package/src/utils/OSAlert.ts +0 -180
  108. package/src/utils/PermissionManager/context.tsx +0 -302
  109. package/src/utils/PermissionManager/index.ts +0 -20
  110. package/src/utils/PermissionManager/types.ts +0 -24
  111. package/src/utils/hooks.ts +0 -163
  112. package/src/utils/index.ts +0 -11
  113. package/src/utils/input.ts +0 -51
  114. package/src/utils/misc.ts +0 -83
  115. package/src/utils/notifications.ts +0 -206
  116. package/src/utils/theme.ts +0 -55
@@ -1,319 +0,0 @@
1
- import * as React from 'react'
2
- import {
3
- ComponentVariants,
4
- FormTypes,
5
- getNestedStylesByKey,
6
- IconPlaceholder,
7
-
8
- TypeGuards,
9
-
10
- useBooleanToggle,
11
- useDefaultComponentStyle,
12
- useValidate,
13
- } from '@codeleap/common'
14
- import { ComponentPropsWithoutRef, forwardRef, useImperativeHandle, useRef, useState } from 'react'
15
- import { Text, TextProps } from '../Text'
16
- import { View, ViewProps } from '../View'
17
- import { StylesOf } from '../../types'
18
- import { NativeSyntheticEvent, StyleSheet, TextInput as NativeTextInput, TextInputChangeEventData } from 'react-native'
19
- import { Touchable, TouchableProps } from '../Touchable'
20
- import { MaskedTextInput, TextInputMaskProps } from '../../modules/textInputMask'
21
- import { InputLabel } from '../InputLabel'
22
-
23
- export * from './styles'
24
-
25
- import {
26
- InputIconComposition,
27
- TextInputComposition,
28
- TextInputStyles,
29
- } from './styles'
30
- import { ActionIcon, ActionIconParts, ActionIconProps } from '../ActionIcon'
31
-
32
- type NativeProps = ComponentPropsWithoutRef<typeof NativeTextInput>
33
-
34
- type SubtitleProps = {
35
- errorProps: TextProps
36
- styles: Record<'wrapper'|'error'|'subtitle', any>
37
- }
38
-
39
- export type TextInputProps =
40
- Partial<TextInputMaskProps> &
41
- ComponentVariants<typeof TextInputStyles> &
42
- Omit<NativeProps, 'value'> &
43
- {
44
- multiline?: boolean
45
- onChangeText?: (text: string) => void
46
- disabled?: boolean
47
- edited?: boolean
48
- type?: string
49
- label?: React.ReactNode
50
- debugName: string
51
- leftIcon?: Partial<ActionIconProps>
52
- rightIcon?: Partial<ActionIconProps>
53
- styles?: StylesOf<TextInputComposition>
54
- validate?: FormTypes.ValidatorFunctionWithoutForm | string
55
- value?: string
56
- password?: boolean
57
- visibilityToggle?: boolean
58
- touchableWrapper?: boolean
59
- subtitle?: string | ((props: SubtitleProps) => React.ReactElement)
60
- onPress?: () => void
61
- masking?: FormTypes.TextField['masking']
62
- innerWrapperProps?: ViewProps
63
- wrapperProps?: TouchableProps
64
- onChangeMask?: TextInputMaskProps['onChangeText']
65
- required?:boolean
66
- }
67
-
68
- export const TextInput = forwardRef<NativeTextInput, TextInputProps>((rawprops, inputRef) => {
69
- const {
70
- onChange,
71
- value,
72
- onChangeText,
73
- disabled,
74
- edited,
75
- onFocus,
76
- onBlur,
77
- variants,
78
- label,
79
- wrapperProps,
80
- leftIcon,
81
- rightIcon,
82
- styles,
83
- validate,
84
- password,
85
- visibilityToggle,
86
- innerWrapperProps,
87
- masking,
88
- subtitle = '',
89
- onChangeMask,
90
- debugName,
91
- required = false,
92
- ...props
93
- } = rawprops
94
-
95
- const [isFocused, setFocus] = useState(false)
96
- const [editedState, setEdited] = useState(edited)
97
-
98
- const input = useRef<any>(null)
99
- const maskInputRef = useRef<any>(null)
100
- const [textIsVisible, setTextVisible] = useBooleanToggle(false)
101
- const variantStyles = useDefaultComponentStyle<'u:TextInput', typeof TextInputStyles>('u:TextInput', {
102
- variants,
103
- styles,
104
- transform: StyleSheet.flatten,
105
- })
106
- const InputElement = masking ? MaskedTextInput : NativeTextInput
107
-
108
- const handleBlur: TextInputProps['onBlur'] = (e) => {
109
- if (!editedState && value) setEdited(true)
110
- setFocus(false)
111
-
112
- if (onBlur) {
113
- onBlur(e)
114
- }
115
- }
116
-
117
- const handleFocus: TextInputProps['onFocus'] = (e) => {
118
- setFocus(true)
119
- if (onFocus) {
120
- onFocus(e)
121
- }
122
- }
123
- const handleMaskChange = (masked, unmasked) => {
124
-
125
- if (onChangeText) onChangeText(masking?.saveFormatted ? masked : masked)
126
- if (onChangeMask) onChangeMask(masked, unmasked)
127
- }
128
- const handleChange = (event: NativeSyntheticEvent<TextInputChangeEventData>) => {
129
- const text = event.nativeEvent.text
130
-
131
- if (onChange) onChange(event)
132
- if (onChangeText) onChangeText(text)
133
- }
134
-
135
- useImperativeHandle(inputRef, () => {
136
- return {
137
- ...input.current,
138
- focus: () => {
139
- input.current?.focus?.()
140
- },
141
- isTextInput: true,
142
- }
143
-
144
- }, [!!masking, !!input?.current?.focus])
145
-
146
- const { showError, error } = useValidate(value, validate)
147
-
148
- const commonIconStyles = getNestedStylesByKey('icon', variantStyles)
149
-
150
- const leftIconStyles = getNestedStylesByKey('leftIcon', variantStyles)
151
-
152
- const rightIconStyles = getNestedStylesByKey('rightIcon', variantStyles)
153
-
154
- function getStyles(key: TextInputComposition) {
155
- const requestedStyles = [
156
- variantStyles[key],
157
- isFocused ? variantStyles[key + ':focus'] : {},
158
- showError ? variantStyles[key + ':error'] : {},
159
- ]
160
- return StyleSheet.flatten(requestedStyles)
161
- }
162
-
163
- function handlePress() {
164
- if (props.onPress) {
165
- props.onPress()
166
- } else {
167
- input.current?.focus?.()
168
- }
169
- }
170
-
171
- const visibilityToggleProps = visibilityToggle ? {
172
- onPress: () => setTextVisible(),
173
- icon: (textIsVisible ? 'input-visiblity:visible' : 'input-visiblity:hidden') as IconPlaceholder,
174
- debugName: `${debugName} toggle visibility`,
175
- } : {}
176
-
177
- const subtitleStyles = {
178
- error: getStyles('error'),
179
- wrapper: getStyles('subtitleWrapper'),
180
- subtitle: getStyles('subtitle'),
181
-
182
- }
183
- const errorProps = { text: error.message, style: subtitleStyles.error }
184
-
185
- const subtitleContent = TypeGuards.isFunction(subtitle) ? subtitle({ styles: subtitleStyles, errorProps }) : <View style={subtitleStyles.wrapper}>
186
- <FormError {...errorProps}/>
187
- {TypeGuards.isString(subtitle) ? <Text text={subtitle} style={subtitleStyles.subtitle}/> : (subtitle || null)}
188
- </View>
189
- return (
190
- <Touchable
191
- style={getStyles('wrapper')}
192
- debugName={debugName}
193
- onPress={handlePress}
194
- {...wrapperProps}
195
- android_ripple={null}
196
- noFeedback
197
- >
198
- <InputLabel
199
- label={label}
200
- styles={{
201
- wrapper: getStyles('labelWrapper'),
202
- asterisk: getStyles('labelAsterisk'),
203
- text: getStyles('labelText'),
204
- }}
205
- required={required}
206
- />
207
- <View style={getStyles('innerWrapper')} {...innerWrapperProps}>
208
- <InputIcon
209
- isFocused={isFocused}
210
- showError={showError}
211
- styles={leftIconStyles}
212
- commonStyles={commonIconStyles}
213
- debugName={`${debugName} left icon`}
214
- onPress={() => {}}
215
- noFeedback={!leftIcon?.onPress}
216
- {...leftIcon}
217
- />
218
- {/* @ts-ignore */}
219
- <InputElement
220
-
221
- secureTextEntry={password && !textIsVisible}
222
- onChange={(e) => masking ? onChange?.(e) : handleChange(e)}
223
- value={value}
224
- editable={disabled}
225
- onFocus={handleFocus}
226
- onBlur={handleBlur}
227
- placeholderTextColor={StyleSheet.flatten(getStyles('placeholder'))?.color}
228
- selectionColor={StyleSheet.flatten(getStyles('selection'))?.color}
229
- includeRawValueInChangeText={true}
230
- {...props}
231
- {...masking}
232
- {...(!!masking ? {
233
- onChangeText: handleMaskChange,
234
- ref: maskInputRef,
235
- refInput: (inputRef) => {
236
- // console.log(inputRef)
237
- if (!!inputRef) {
238
- input.current = inputRef
239
-
240
- }
241
- },
242
- ...masking,
243
- } : {
244
- ref: input,
245
- })}
246
- style={getStyles('textField')}
247
- />
248
- <InputIcon
249
- isFocused={isFocused}
250
- showError={showError}
251
- styles={rightIconStyles}
252
- commonStyles={commonIconStyles}
253
- debugName={`${debugName} right icon`}
254
- onPress={() => {}}
255
- noFeedback={!rightIcon?.onPress}
256
- {...rightIcon}
257
- {...visibilityToggleProps}
258
- />
259
-
260
- </View>
261
- {subtitleContent}
262
- </Touchable>
263
- )
264
- })
265
-
266
- export const FormError:React.FC<TextProps> = ({ text, ...props }) => {
267
- let message = text
268
- if (TypeGuards.isNumber(message)) {
269
- message = message.toString()
270
- }
271
- if (typeof message === 'undefined') {
272
- message = ''
273
- }
274
-
275
- if (TypeGuards.isString(message)) {
276
- const text = message ? `${message.charAt(0).toUpperCase() + message.slice(1)}` : ' '
277
- return <Text text={text} {...props} />
278
- }
279
- return <>
280
- {text}
281
- </>
282
- }
283
-
284
- type InputIconProps = {
285
- styles: StylesOf<InputIconComposition>
286
- commonStyles: StylesOf<InputIconComposition>
287
- isFocused: boolean
288
- showError: boolean
289
- } & Omit<ActionIconProps, 'styles'>
290
-
291
- export const InputIcon:React.FC<InputIconProps> = ({ styles, commonStyles, isFocused, showError, ...props }) => {
292
- if (!props.icon) return null
293
-
294
- function getStyles(k: ActionIconParts | '') {
295
- let key = k
296
- if (key === 'icon') key = ''
297
- const requestedStyles = [
298
- commonStyles[key],
299
- isFocused ? commonStyles[key + ':focus'] : {},
300
- showError ? commonStyles[key + ':error'] : {},
301
- styles[key],
302
- isFocused ? styles[key + ':focus'] : {},
303
- showError ? styles[key + ':error'] : {},
304
- ]
305
-
306
- return StyleSheet.flatten(requestedStyles)
307
- }
308
- const iconStyles = {
309
- icon: getStyles('icon'),
310
- touchablePressable: getStyles('touchablePressable'),
311
- touchableWrapper: getStyles('touchableWrapper'),
312
- touchableFeedback: getStyles('touchableFeedback'),
313
- }
314
-
315
- return <ActionIcon
316
- styles={iconStyles}
317
- {...props}
318
- />
319
- }
@@ -1,127 +0,0 @@
1
- import { assignTextStyle, createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
- import { ActionIconParts } from '../ActionIcon'
3
- import { InputLabelComposition } from '../InputLabel'
4
-
5
- export type IconParts = Exclude<ActionIconParts, 'icon' | 'icon:disabled'>
6
- type InputIcons = 'icon' | 'leftIcon' | 'rightIcon'
7
-
8
- export type InputIconComposition = `${InputIcons}${Capitalize<IconParts>}`
9
- | InputIcons
10
-
11
- type TextInputParts =
12
- | 'wrapper'
13
- | InputIconComposition
14
- | 'textField'
15
- | 'innerWrapper'
16
- | 'error'
17
- | 'subtitle'
18
- | 'subtitleWrapper'
19
- | 'placeholder'
20
- | 'selection'
21
- | `label${Capitalize<InputLabelComposition>}`
22
-
23
- export type TextInputComposition =
24
- | `${TextInputParts}:error`
25
- | `${TextInputParts}:focus`
26
- | TextInputParts
27
-
28
- const createTextInputStyle =
29
- createDefaultVariantFactory<TextInputComposition>()
30
-
31
- const presets = includePresets((styles) => createTextInputStyle(() => ({ wrapper: styles })))
32
-
33
- export const TextInputStyles = {
34
- ...presets,
35
- default: createTextInputStyle((theme) => ({
36
- textField: {
37
- ...theme.spacing.padding(0),
38
- ...theme.spacing.paddingHorizontal(1),
39
- ...assignTextStyle('p1')(theme).text,
40
- minWidth: 1,
41
- backgroundColor: 'transparent',
42
- flex: 1,
43
- },
44
- placeholder: {
45
- color: theme.colors.lightGray,
46
- },
47
- selection: {
48
- color: theme.colors.primary,
49
- },
50
- wrapper: {
51
- display: 'flex',
52
- flexDirection: 'column',
53
-
54
- },
55
- innerWrapper: {
56
- ...theme.spacing.paddingVertical(0.5),
57
- ...theme.spacing.paddingHorizontal(1),
58
- ...theme.presets.row,
59
- ...theme.border.neutral(1),
60
- display: 'flex',
61
- alignItems: 'center',
62
- },
63
-
64
- labelWrapper: {
65
- ...theme.spacing.marginBottom(1),
66
-
67
- },
68
- labelText: {
69
- ...assignTextStyle('h5')(theme).text,
70
- },
71
- 'icon': {
72
- color: theme.colors.neutral,
73
- },
74
- 'icon:error': {
75
- color: theme.colors.negative,
76
- },
77
- 'icon:focus': {
78
- color: theme.colors.primary,
79
- },
80
- leftIconTouchableWrapper: {
81
- // ...theme.spacing.marginRight(0.5),
82
- },
83
- rightIconTouchableWrapper: {
84
- // ...theme.spacing.marginLeft(0.5),
85
- },
86
- error: {
87
- color: theme.colors.negative,
88
-
89
- },
90
- subtitleWrapper: {
91
- ...theme.spacing.marginTop(0.2),
92
- ...theme.presets.row,
93
- ...theme.presets.justifySpaceBetween,
94
- ...theme.presets.alignCenter,
95
- },
96
- subtitle: {
97
- ...theme.presets.textRight,
98
- },
99
- 'labelText:error': {
100
- color: theme.colors.negative,
101
- },
102
-
103
- 'innerWrapper:error': {
104
- ...theme.border.negative(1),
105
- },
106
- 'innerWrapper:focus': {
107
- ...theme.border.primary(1),
108
- },
109
-
110
- })),
111
- line: createTextInputStyle((theme) => ({
112
- innerWrapper: {
113
- ...theme.border.neutral({ width: 1, directions: ['bottom'] }),
114
- },
115
- })),
116
- box: createTextInputStyle((theme) => ({
117
- innerWrapper: {
118
- ...theme.border.neutral(1),
119
- },
120
- })),
121
- pill: createTextInputStyle((theme) => ({
122
- innerWrapper: {
123
- ...theme.border.neutral(1),
124
- borderRadius: 15,
125
- },
126
- })),
127
- }
@@ -1,172 +0,0 @@
1
- import * as React from 'react'
2
- import { ComponentPropsWithoutRef, forwardRef } from 'react'
3
- import {
4
- ComponentVariants,
5
- useDefaultComponentStyle,
6
- BaseViewProps,
7
-
8
- useCodeleapContext,
9
- AnyFunction,
10
- TypeGuards,
11
- } from '@codeleap/common'
12
- import { Pressable, StyleSheet, View as RNView } from 'react-native'
13
-
14
- import { createAnimatableComponent } from 'react-native-animatable'
15
- import { TouchableComposition, TouchableStyles } from './styles'
16
- import { StylesOf } from '../../types'
17
- import { View } from '../View'
18
- import { usePressableFeedback } from '../../utils'
19
- export type TouchableProps = Omit<
20
- ComponentPropsWithoutRef<typeof Pressable>,
21
- 'onPress'
22
- > & {
23
- variants?: ComponentVariants<typeof TouchableStyles>['variants']
24
- component?: any
25
- ref?: React.Ref<RNView>
26
- debugName: string
27
- activeOpacity?: number
28
- debugComponent?: string
29
- onPress?: AnyFunction
30
- noFeedback?: boolean
31
- debounce?: number
32
- styles?: StylesOf<TouchableComposition>
33
- } & BaseViewProps
34
- export * from './styles'
35
-
36
- export const Touchable: React.FC<TouchableProps> = forwardRef<
37
- RNView,
38
- TouchableProps
39
- >((touchableProps, ref) => {
40
- const {
41
- variants = [],
42
- children,
43
- onPress,
44
- style,
45
- debugName,
46
- debugComponent,
47
- debounce = null,
48
- noFeedback = false,
49
- styles,
50
- ...props
51
- } = touchableProps
52
- const [pressed, setPressed] = React.useState(false)
53
- const variantStyles = useDefaultComponentStyle<'u:Touchable', typeof TouchableStyles>('u:Touchable', {
54
- variants,
55
- transform: StyleSheet.flatten,
56
- rootElement: 'wrapper',
57
- styles,
58
- })
59
-
60
- const { logger } = useCodeleapContext()
61
-
62
- const press = () => {
63
- if (!onPress) {
64
- logger.warn('No onPress passed to touchable', {
65
- touchableProps,
66
- }, 'User Interaction')
67
- return
68
- }
69
- const _onPress = () => {
70
- logger.log(
71
- `<${debugComponent || 'Touchable'}/> pressed`,
72
- debugName || variants,
73
- 'User interaction',
74
- )
75
- onPress && onPress()
76
- }
77
- if (TypeGuards.isNumber(debounce)) {
78
- if (pressed) {
79
- return
80
- }
81
- setPressed(true)
82
- _onPress()
83
- setTimeout(() => setPressed(false), debounce)
84
- } else {
85
- _onPress()
86
- }
87
-
88
- }
89
-
90
- const _styles = StyleSheet.flatten([variantStyles.wrapper, style])
91
-
92
- const disableFeedback = !onPress || noFeedback
93
-
94
- const { rippleConfig, getFeedbackStyle } = usePressableFeedback(_styles, {
95
- hightlightPropertyIn: 'backgroundColor',
96
- hightlightPropertyOut: 'backgroundColor',
97
- disabled: disableFeedback,
98
- feedbackConfig: variantStyles?.feedback,
99
- })
100
-
101
- const Wrapper = View
102
-
103
- const { wrapperStyle, pressableStyle } = React.useMemo(() => {
104
- const wrapperkeys = [
105
- 'margin',
106
- 'alignSelf',
107
- 'border',
108
- 'top!',
109
- 'left!',
110
- 'right!',
111
- 'bottom!',
112
- 'position!',
113
- // 'flex!',
114
- ]
115
- const sharedKeys = [
116
- 'width!',
117
- 'height!',
118
- 'flex!',
119
- 'backgroundColor!',
120
-
121
- ]
122
-
123
- const wrapperStyle = {} as any
124
- const pressableStyle = {} as any
125
- const match = (k, key) => {
126
- if (k.endsWith('!')) {
127
- return key === k.substring(0, k.length - 1)
128
- } else {
129
-
130
- return key.startsWith(k)
131
- }
132
- }
133
- Object.entries(_styles).forEach(([key, value]) => {
134
-
135
- if (wrapperkeys.some(k => match(k, key))) {
136
- wrapperStyle[key] = value
137
- } else if (sharedKeys.some(k => match(k, key))) {
138
- wrapperStyle[key] = value
139
-
140
- pressableStyle[key] = value
141
- } else {
142
- pressableStyle[key] = value
143
- }
144
- })
145
-
146
- wrapperStyle.overflow = 'hidden'
147
- // wrapperStyle.flexDirection = 'row'
148
- // wrapperStyle.alignItems = 'stretch'
149
-
150
- return {
151
- wrapperStyle,
152
- pressableStyle,
153
- }
154
- }, [JSON.stringify(_styles)])
155
-
156
- return (
157
- <Wrapper style={[wrapperStyle]}>
158
- <Pressable onPress={press} style={({ pressed }) => ([
159
-
160
- // defaultPressableStyles,
161
- pressableStyle,
162
- // !!rippleConfig && ripplePressableStyles,
163
- getFeedbackStyle(pressed),
164
- variantStyles.pressable,
165
- ])} android_ripple={rippleConfig} {...props} ref={ref}>
166
- {children}
167
- </Pressable>
168
- </Wrapper>
169
- )
170
- })
171
-
172
- export const AnimatedTouchable = createAnimatableComponent(Touchable) as unknown as typeof Touchable
@@ -1,28 +0,0 @@
1
- import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
- import { StylesOf } from '../../types'
3
- import { TouchableFeedbackConfig } from '../../utils'
4
-
5
- export type TouchableComposition = 'wrapper' | 'feedback' | 'pressable'
6
-
7
- export type TouchableStylesGen<TCSS = any> = StylesOf<Exclude<TouchableComposition, 'feedback'>> & {
8
- feedback?: TouchableFeedbackConfig
9
- }
10
-
11
- const createTouchableStyle = createDefaultVariantFactory<
12
- TouchableComposition,
13
- TouchableStylesGen
14
- >()
15
-
16
- const presets = includePresets((styles) => createTouchableStyle(() => ({ wrapper: styles, pressable: styles })),
17
- )
18
-
19
- export const TouchableStyles = {
20
- ...presets,
21
- default: createTouchableStyle((t) => ({
22
- feedback: {
23
- type: 'opacity',
24
- value: 0.5,
25
- },
26
- })),
27
-
28
- }