@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeleap/mobile",
3
- "version": "2.2.11",
3
+ "version": "2.3.0",
4
4
  "main": "src/index.ts",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -44,6 +44,7 @@
44
44
  "@miblanchard/react-native-slider": "^2.1.0",
45
45
  "date-fns": "^2.28.0",
46
46
  "react-native-animatable": "^1.3.3",
47
+ "react-native-device-info": "^10.3.0",
47
48
  "react-native-masked-text": "^1.13.0",
48
49
  "react-native-pose": "^0.9.1",
49
50
  "react-native-super-grid": "^4.4.2",
@@ -1,32 +0,0 @@
1
- import { ComponentVariants, getNestedStylesByKey, useDefaultComponentStyle } from '@codeleap/common'
2
- import React from 'react'
3
- import { StyleSheet } from 'react-native'
4
- import { StylesOf } from '../../types'
5
- import { Icon, IconProps } from '../Icon'
6
- import { Touchable, TouchableProps } from '../Touchable'
7
- import { ActionIconComposition, ActionIconStyles } from './styles'
8
-
9
- export type ActionIconProps= {
10
- iconProps?: Partial<IconProps>
11
- icon?: IconProps['name']
12
- styles?: StylesOf<ActionIconComposition>
13
- } & Omit<TouchableProps, 'styles' | 'variants'> & ComponentVariants<typeof ActionIconStyles>
14
-
15
- export const ActionIcon:React.FC<ActionIconProps> = (props) => {
16
- const { icon, iconProps, variants, styles, children, ...touchableProps } = props
17
- const variantStyles = useDefaultComponentStyle<'u:ActionIcon', typeof ActionIconStyles>('u:ActionIcon', {
18
- variants, styles, transform: StyleSheet.flatten,
19
- })
20
- const touchableStyles = getNestedStylesByKey('touchable', variantStyles)
21
-
22
- return <Touchable styles={touchableStyles} {...touchableProps}>
23
- <Icon name={icon} style={
24
- [
25
- variantStyles.icon,
26
- touchableProps?.disabled && variantStyles['icon:disabled'],
27
- ]} {...iconProps}/>
28
- {children}
29
- </Touchable>
30
- }
31
-
32
- export * from './styles'
@@ -1,97 +0,0 @@
1
- import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
- import { TouchableComposition } from '../Touchable'
3
-
4
- export type ActionIconParts = 'icon' | `touchable${Capitalize<TouchableComposition>}`
5
- export type ActionIconStates = ':disabled' | ''
6
- export type ActionIconComposition = `${ActionIconParts}${ActionIconStates}`
7
- const createActionIconStyle = createDefaultVariantFactory<ActionIconComposition>()
8
-
9
- const presets = includePresets((style) => createActionIconStyle(() => ({ touchableWrapper: style })))
10
-
11
- export const ActionIconStyles = {
12
- ...presets,
13
- default: createActionIconStyle((theme) => {
14
-
15
- return {
16
- icon: {
17
- color: theme.colors.icon,
18
- ...theme.sized(5 * 0.6),
19
-
20
- },
21
- touchableWrapper: {
22
- ...theme.sized(5),
23
- borderRadius: theme.borderRadius.round,
24
- ...theme.presets.center,
25
- },
26
- 'icon:disabled': {
27
- color: theme.colors.disabled,
28
- },
29
-
30
- }
31
- }),
32
- originalColor: createActionIconStyle(theme => ({
33
- icon: {
34
- color: 'auto',
35
- },
36
- })),
37
- small: createActionIconStyle((theme) => ({
38
- touchableWrapper: {
39
- ...theme.sized(3.5),
40
-
41
- },
42
- icon: {
43
- ...theme.sized(3.5 * 0.6),
44
-
45
- },
46
- })),
47
- large: createActionIconStyle((theme) => ({
48
- touchableWrapper: {
49
- ...theme.sized(6.5),
50
-
51
- },
52
- icon: {
53
- ...theme.sized(6.5 * 0.6),
54
-
55
- },
56
- })),
57
- primary: createActionIconStyle((theme) => ({
58
- icon: {
59
- color: theme.colors.primary,
60
-
61
- },
62
-
63
- })),
64
- negative: createActionIconStyle((theme) => ({
65
- icon: {
66
- color: theme.colors.negative,
67
-
68
- },
69
-
70
- })),
71
- positive: createActionIconStyle((theme) => ({
72
- icon: {
73
- color: theme.colors.positive,
74
-
75
- },
76
-
77
- })),
78
- black: createActionIconStyle((theme) => ({
79
- icon: {
80
- color: theme.colors.black,
81
-
82
- },
83
-
84
- })),
85
- white: createActionIconStyle((theme) => ({
86
- icon: {
87
- color: theme.colors.white,
88
-
89
- },
90
-
91
- })),
92
- neutral: createActionIconStyle((theme) => ({
93
- icon: {
94
- color: theme.colors.neutral,
95
- },
96
- })),
97
- }
@@ -1,50 +0,0 @@
1
- import * as React from 'react'
2
- import { ComponentPropsWithoutRef, forwardRef } from 'react'
3
- import { ActivityIndicator as Indicator, StyleSheet } from 'react-native'
4
- import {
5
-
6
- useDefaultComponentStyle,
7
- ComponentVariants,
8
- useCodeleapContext,
9
- } from '@codeleap/common'
10
- import { StylesOf } from '../../types'
11
- import {
12
- ActivityIndicatorComposition,
13
- ActivityIndicatorStyles,
14
- } from './styles'
15
-
16
- export * from './styles'
17
- export type ActivityIndicatorProps = ComponentPropsWithoutRef<
18
- typeof Indicator
19
- > & {
20
- variants?: ComponentVariants<typeof ActivityIndicatorStyles>['variants']
21
- styles?: StylesOf<ActivityIndicatorComposition>
22
- }
23
-
24
- export const ActivityIndicator = forwardRef<Indicator, ActivityIndicatorProps>(
25
- (activityIndicatorProps, ref) => {
26
- const { variants = [], style, styles: propStyles, ...props } = activityIndicatorProps
27
-
28
- const variantStyles = useDefaultComponentStyle('ActivityIndicator', {
29
- variants,
30
- transform: StyleSheet.flatten,
31
- styles: propStyles,
32
- })
33
-
34
- const { Theme } = useCodeleapContext()
35
-
36
- const styles = StyleSheet.flatten([variantStyles.wrapper, style])
37
- const color = styles?.color || Theme.colors.gray
38
- const size = styles?.height || styles?.width || 'large'
39
-
40
- return (
41
- <Indicator
42
- size={size}
43
- ref={ref}
44
- color={color}
45
- style={styles}
46
- {...props}
47
- />
48
- )
49
- },
50
- )
@@ -1,68 +0,0 @@
1
- import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
-
3
- export type ActivityIndicatorComposition =
4
- | 'wrapper'
5
- | 'backCircle'
6
- | 'frontCircle'
7
- | 'circle'
8
-
9
- const createActivityIndicatorStyle =
10
- createDefaultVariantFactory<ActivityIndicatorComposition>()
11
-
12
- const presets = includePresets((styles) => createActivityIndicatorStyle(() => ({ wrapper: styles })),
13
- )
14
-
15
- export const getActivityIndicatorBaseStyles = (size:number) => {
16
- const sizes = {
17
- height: size,
18
- width: size,
19
- borderWidth: size * 0.25,
20
- }
21
-
22
- return {
23
- wrapper: {
24
- position: 'relative',
25
- ...sizes,
26
- } as any,
27
- circle: {
28
- borderRadius: 100,
29
- position: 'absolute',
30
- borderStyle: 'solid',
31
- top: 0,
32
- bottom: 0,
33
- left: 0,
34
- right: 0,
35
- } as any,
36
- backCircle: {
37
-
38
- // borderColor: theme.colors.primary,
39
- minWidth: '100%',
40
- opacity: 0.5,
41
- } as any,
42
- frontCircle: {
43
- position: 'absolute',
44
- borderColor: 'transparent',
45
- // borderTopColor: theme.colors.primary,
46
- } as any,
47
- }
48
- }
49
-
50
- export const ActivityIndicatorStyles = {
51
- ...presets,
52
- default: createActivityIndicatorStyle((theme) => {
53
- const baseStyles = getActivityIndicatorBaseStyles(35)
54
-
55
- return {
56
- ...baseStyles,
57
- backCircle: {
58
- ...baseStyles.backCircle,
59
- borderColor: theme.colors.primary,
60
- },
61
- frontCircle: {
62
- ...baseStyles.frontCircle,
63
- borderTopColor: theme.colors.primary,
64
- },
65
- }
66
-
67
- }),
68
- }
@@ -1,34 +0,0 @@
1
- import { onUpdate } from '@codeleap/common'
2
- import React, { useRef } from 'react'
3
-
4
- import posed from 'react-native-pose'
5
- import { Touchable } from './Touchable'
6
- import { View } from './View'
7
- const Components = {
8
- Touchable,
9
- View,
10
- }
11
-
12
- const PosedComponents = Object.fromEntries(
13
- Object.entries(Components).map(([key, Render]) => [key, posed(Render)]),
14
- )
15
-
16
- type AnimatedComponents = typeof Components
17
- type CP = keyof AnimatedComponents
18
-
19
- type AnimatedProps<T extends CP, CFG = Record<string, any>> = {
20
- component: T
21
- config: CFG
22
- pose: keyof CFG
23
- initialPose?: keyof CFG
24
- } & Omit<Parameters<AnimatedComponents[T]>[0], 'component'>
25
-
26
- export const Animated = <T extends CP, CFG = any>({
27
- config,
28
- component,
29
- ...props
30
- }: AnimatedProps<T, CFG>) => {
31
- const Component = useRef(PosedComponents[component](config)).current
32
-
33
- return <Component withParent={false} {...props} />
34
- }
@@ -1,163 +0,0 @@
1
- import * as React from 'react'
2
- import { ComponentVariants,
3
- FormTypes,
4
- getNestedStylesByKey,
5
- IconPlaceholder,
6
- onUpdate,
7
- PropsOf,
8
- ReactStateProps,
9
- TypeGuards,
10
- useDebounce,
11
- useDefaultComponentStyle,
12
- useMemo,
13
- useState,
14
- } from '@codeleap/common'
15
- import { ModalHeaderProps } from '../Modal'
16
- import { TextInput, TextInputProps } from '../TextInput'
17
- import { View, ViewProps } from '../View'
18
- import { CustomSelectProps, Select } from '../Select'
19
- import { AutoCompleteStyles, AutoCompleteComposition } from './styles'
20
- import { StylesOf } from '../../types'
21
- import { StyleSheet } from 'react-native'
22
- import { Text } from '../Text'
23
- import { Button } from '../Button'
24
-
25
- export type AutoCompleteHeaderProps = ReactStateProps<'search', string> &
26
- Omit<PropsOf<typeof View>, 'style'|'styles'|'variants'>
27
- & {
28
- label: FormTypes.Label
29
- searchInputProps?: Partial<TextInputProps>
30
- styles: ModalHeaderProps['styles'] & { searchInput?: TextInputProps['styles']; titleWrapper?:ViewProps['style']}
31
- debugName: string
32
- icon?: IconPlaceholder
33
- toggle: ModalHeaderProps['toggle']
34
- }
35
-
36
- export const AutoCompleteHeader:React.FC<AutoCompleteHeaderProps> = (props) => {
37
- const { search, setSearch, icon = 'search', debugName, label, styles, toggle, searchInputProps, ...viewProps } = props
38
-
39
- return <View style={[styles.wrapper]} {...viewProps}>
40
- <View style={styles.titleWrapper}>
41
- <Text style={styles.title} text={label}/>
42
- <Button
43
- icon={'close' as IconPlaceholder}
44
- debugName={`Close Autocomplete ${debugName} button`}
45
- onPress={toggle} variants={['icon']}
46
- styles={styles.closeButton}/>
47
- </View>
48
- <TextInput subtitle={() => null} leftIcon={{
49
- icon: icon as IconPlaceholder,
50
- }} debugName={`AutoComplete ${debugName} search input`} value={search} onChangeText={setSearch} styles={styles.searchInput} {...searchInputProps}/>
51
- </View>
52
- }
53
-
54
- export type AutoCompleteOption<T> = CustomSelectProps<T>['options'][number] & {searchTerm?: string}
55
-
56
- export type AutoCompleteProps<
57
- T,
58
- Base extends CustomSelectProps<T> = CustomSelectProps<T>
59
- > = Omit<Base, 'options'| 'variants' | 'styles'> & {
60
- options: AutoCompleteOption<T>[]
61
- caseSensitive?: boolean
62
- debounce?: number
63
- headerProps?: Partial<AutoCompleteHeaderProps>
64
- styles?: StylesOf<AutoCompleteComposition>
65
- filterFn?: (search?: string, option?:AutoCompleteOption<T>) => boolean
66
- } & ComponentVariants<typeof AutoCompleteStyles>
67
-
68
- export const AutoComplete = <T extends string|number = string>(props: AutoCompleteProps<T>) => {
69
- const {
70
- options,
71
- caseSensitive = false,
72
- debounce = 200,
73
- filterFn,
74
- headerProps = {},
75
- variants,
76
- styles,
77
- ...selectProps
78
- } = props
79
-
80
- const [search, setSearch] = useState('')
81
- const [debouncedSearch, resetDebounce] = useDebounce(search, debounce)
82
- const [filteredOptions, setFilteredOptions] = useState(options)
83
-
84
- const [loading, setLoading] = useState(false)
85
- const variantStyles = useDefaultComponentStyle<'u:AutoComplete', typeof AutoCompleteStyles>('u:AutoComplete', {
86
- variants,
87
- transform: StyleSheet.flatten,
88
- styles,
89
- })
90
- const serialVariants = JSON.stringify(variantStyles)
91
- const { searchInputStyles, closeButtonStyles } = useMemo(() => ({
92
- searchInputStyles: getNestedStylesByKey('searchInput', variantStyles),
93
- closeButtonStyles: getNestedStylesByKey('closeButton', variantStyles),
94
-
95
- }), [serialVariants])
96
-
97
- onUpdate(() => {
98
- setLoading(true)
99
- let persist = true
100
- setTimeout(() => {
101
-
102
- const newOpts = options.filter((option) => {
103
- if (filterFn) {
104
- return filterFn(debouncedSearch, option)
105
- }
106
- const { label, searchTerm, value } = option
107
- let term = searchTerm || (TypeGuards.isString(label) ? label : value.toString())
108
-
109
- if (!caseSensitive) {
110
- term = term.toLowerCase()
111
- }
112
-
113
- return term.includes(debouncedSearch.toLowerCase())
114
- })
115
- if (persist) {
116
- setFilteredOptions(newOpts)
117
- setTimeout(() => {
118
- if (persist) {
119
- setLoading(false)
120
- }
121
- }, debounce * 1.5)
122
- }
123
-
124
- })
125
- return () => {
126
- persist = false
127
- resetDebounce()
128
- }
129
- }, [debouncedSearch, caseSensitive, options.length, filterFn])
130
- return <Select
131
- styles={variantStyles}
132
- options={ loading ? [] : filteredOptions}
133
- header={
134
- <AutoCompleteHeader
135
- debugName={selectProps.debugName}
136
- label={selectProps.label}
137
- search={search}
138
- setSearch={setSearch}
139
- toggle={selectProps.toggle}
140
- styles={{
141
- wrapper: variantStyles.header,
142
- closeButton: closeButtonStyles,
143
- title: variantStyles.title,
144
- searchInput: searchInputStyles,
145
- titleWrapper: variantStyles.titleWrapper,
146
- }}
147
-
148
- {...headerProps}
149
- />
150
- }
151
-
152
- {...selectProps}
153
- listProps={{
154
- ...selectProps?.listProps,
155
- placeholder: {
156
- loading,
157
- ...selectProps?.listProps?.placeholder,
158
- },
159
- }}
160
- />
161
-
162
- }
163
- export * from './styles'
@@ -1,44 +0,0 @@
1
- import { assignTextStyle, createDefaultVariantFactory } from '@codeleap/common'
2
- import { SelectComposition, SelectStyles } from '../Select'
3
- import { TextInputComposition } from '../TextInput'
4
-
5
- export type AutoCompleteComposition = SelectComposition | `searchInput${Capitalize<TextInputComposition>}` | 'titleWrapper'
6
-
7
- const createAutoCompleteStyle = createDefaultVariantFactory<AutoCompleteComposition>()
8
-
9
- export const AutoCompleteStyles = {
10
- ...SelectStyles,
11
- default: createAutoCompleteStyle((theme) => {
12
- const defaultStyle = SelectStyles.default(theme)
13
-
14
- return {
15
- ...defaultStyle,
16
- header: {
17
- ...theme.spacing.paddingHorizontal(2),
18
- ...theme.spacing.paddingTop(1),
19
- ...theme.presets.column,
20
- ...theme.presets.alignStart,
21
- },
22
-
23
- searchInputWrapper: {
24
- ...theme.presets.fullWidth,
25
- ...theme.spacing.marginTop(2),
26
- },
27
-
28
- titleWrapper: {
29
- ...theme.presets.row,
30
- ...theme.presets.alignCenter,
31
- ...theme.presets.fullWidth,
32
- ...theme.presets.justifyCenter,
33
- },
34
- title: {
35
- ...theme.presets.textCenter,
36
- flex: 1,
37
- },
38
- closeButtonWrapper: {
39
- position: 'absolute',
40
- right: 0,
41
- },
42
- }
43
- }),
44
- }
@@ -1,48 +0,0 @@
1
- import React from 'react'
2
- import { ComponentVariants, onUpdate, PropsOf, useDefaultComponentStyle } from '@codeleap/common'
3
- import { useDynamicAnimation } from 'moti'
4
- import { Touchable } from '../Touchable'
5
- import { View } from '../View'
6
-
7
- import { StylesOf } from '../../types/utility'
8
- import { StyleSheet } from 'react-native'
9
- import { useStaticAnimationStyles } from '../../utils'
10
- import { BackdropComposition, BackdropStyles } from './styles'
11
-
12
- export * from './styles'
13
- export type BackdropProps = PropsOf<typeof Touchable> & {
14
- visible: boolean
15
- wrapperProps?: PropsOf<typeof View>
16
- variants?: ComponentVariants<typeof BackdropStyles>['variants']
17
- styles?: StylesOf<BackdropComposition>
18
- }
19
-
20
- export const Backdrop = (backdropProps:BackdropProps) => {
21
- const { variants = [], styles = {}, visible, children, wrapperProps = {}, ...props } = backdropProps
22
-
23
- const variantStyles = useDefaultComponentStyle<'u:Backdrop', typeof BackdropStyles>('u:Backdrop', {
24
- variants,
25
- rootElement: 'wrapper',
26
- styles,
27
- transform: StyleSheet.flatten,
28
- })
29
-
30
- const animationStates = useStaticAnimationStyles(variantStyles, ['wrapper:hidden', 'wrapper:visible'])
31
-
32
- const animation = useDynamicAnimation(() => {
33
- return visible ? animationStates['wrapper:visible'] : animationStates['wrapper:hidden']
34
- })
35
-
36
- onUpdate(() => {
37
- animation.animateTo(visible ? animationStates['wrapper:visible'] : animationStates['wrapper:hidden'])
38
- }, [visible, animationStates])
39
-
40
- return <View pointerEvents={visible ? 'auto' : 'none' } animated style={variantStyles.wrapper} state={animation} {...wrapperProps}>
41
- {
42
- props?.onPress ?
43
- <Touchable style={variantStyles.touchable} {...props} noFeedback android_ripple={null}/>
44
- : null
45
- }
46
- {children}
47
- </View>
48
- }
@@ -1,33 +0,0 @@
1
- import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
-
3
- export type BackdropComposition =
4
- 'wrapper'|
5
- 'touchable' |
6
- 'wrapper:visible' |
7
- 'wrapper:hidden'
8
-
9
- const createBackdropVariant = createDefaultVariantFactory<BackdropComposition>()
10
-
11
- const presets = includePresets((style) => createBackdropVariant(() => ({ wrapper: style })))
12
-
13
- export const BackdropStyles = {
14
- ...presets,
15
- default: createBackdropVariant((theme) => ({
16
- wrapper: {
17
- backgroundColor: theme.colors.black,
18
- ...theme.presets.whole,
19
- ...theme.presets.absolute,
20
- },
21
- 'wrapper:visible': {
22
- opacity: 0.5,
23
- },
24
- 'wrapper:hidden': {
25
-
26
- opacity: 0,
27
- },
28
- touchable: {
29
- ...theme.presets.whole,
30
- ...theme.presets.absolute,
31
- },
32
- })),
33
- }