@codeleap/mobile 2.3.0 → 2.3.1

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 (121) hide show
  1. package/dist/components/List/styles.js +1 -1
  2. package/dist/components/List/styles.js.map +1 -1
  3. package/dist/utils/theme.d.ts +1 -0
  4. package/dist/utils/theme.js +7 -2
  5. package/dist/utils/theme.js.map +1 -1
  6. package/package.json +1 -1
  7. package/src/components/ActionIcon/index.tsx +32 -0
  8. package/src/components/ActionIcon/styles.ts +97 -0
  9. package/src/components/ActivityIndicator/index.tsx +50 -0
  10. package/src/components/ActivityIndicator/styles.ts +68 -0
  11. package/src/components/Animated.tsx +34 -0
  12. package/src/components/AutoComplete/index.tsx +163 -0
  13. package/src/components/AutoComplete/styles.ts +44 -0
  14. package/src/components/Backdrop/index.tsx +48 -0
  15. package/src/components/Backdrop/styles.ts +33 -0
  16. package/src/components/Button/index.tsx +167 -0
  17. package/src/components/Button/styles.ts +129 -0
  18. package/src/components/Calendar/index.tsx +65 -0
  19. package/src/components/Calendar/style.ts +35 -0
  20. package/src/components/Calendar/types.ts +102 -0
  21. package/src/components/Checkbox/index.tsx +91 -0
  22. package/src/components/Checkbox/styles.ts +81 -0
  23. package/src/components/ContentView/index.tsx +63 -0
  24. package/src/components/ContentView/styles.ts +24 -0
  25. package/src/components/Drawer/index.tsx +33 -0
  26. package/src/components/Drawer/styles.ts +43 -0
  27. package/src/components/EmptyPlaceholder/index.tsx +88 -0
  28. package/src/components/EmptyPlaceholder/styles.ts +58 -0
  29. package/src/components/FileInput/index.tsx +181 -0
  30. package/src/components/FileInput/styles.ts +15 -0
  31. package/src/components/Grid/index.tsx +117 -0
  32. package/src/components/Grid/styles.ts +11 -0
  33. package/src/components/Icon/index.tsx +69 -0
  34. package/src/components/Icon/styles.ts +57 -0
  35. package/src/components/Image/index.tsx +91 -0
  36. package/src/components/Image/styles.ts +20 -0
  37. package/src/components/ImageView/Spotlight.tsx +157 -0
  38. package/src/components/ImageView/component.tsx +38 -0
  39. package/src/components/ImageView/index.ts +2 -0
  40. package/src/components/InputLabel/index.tsx +38 -0
  41. package/src/components/InputLabel/styles.ts +19 -0
  42. package/src/components/List/PaginationIndicator.tsx +71 -0
  43. package/src/components/List/index.tsx +114 -0
  44. package/src/components/List/styles.ts +19 -0
  45. package/src/components/Modal/index.tsx +218 -0
  46. package/src/components/Modal/styles.ts +153 -0
  47. package/src/components/MultiSelect/index.tsx +138 -0
  48. package/src/components/MultiSelect/styles.ts +18 -0
  49. package/src/components/MultiSelect/types.ts +42 -0
  50. package/src/components/Navigation/Navigation.tsx +54 -0
  51. package/src/components/Navigation/constants.ts +8 -0
  52. package/src/components/Navigation/index.tsx +3 -0
  53. package/src/components/Navigation/types.ts +35 -0
  54. package/src/components/Navigation/utils.tsx +57 -0
  55. package/src/components/Pager/index.tsx +121 -0
  56. package/src/components/Pager/styles.ts +81 -0
  57. package/src/components/RadioInput/index.tsx +106 -0
  58. package/src/components/RadioInput/styles.ts +67 -0
  59. package/src/components/Scroll/index.tsx +124 -0
  60. package/src/components/Scroll/styles.ts +18 -0
  61. package/src/components/Sections/index.tsx +91 -0
  62. package/src/components/SegmentedControl/index.tsx +204 -0
  63. package/src/components/SegmentedControl/styles.ts +89 -0
  64. package/src/components/Select/index.tsx +167 -0
  65. package/src/components/Select/styles.ts +62 -0
  66. package/src/components/Select/types.ts +43 -0
  67. package/src/components/Slider/Mark.tsx +46 -0
  68. package/src/components/Slider/Thumb.tsx +29 -0
  69. package/src/components/Slider/index.tsx +130 -0
  70. package/src/components/Slider/styles.ts +76 -0
  71. package/src/components/Slider/types.ts +30 -0
  72. package/src/components/Switch/index.tsx +91 -0
  73. package/src/components/Switch/styles.ts +38 -0
  74. package/src/components/Text/index.tsx +97 -0
  75. package/src/components/Text/styles.ts +50 -0
  76. package/src/components/TextInput/index.tsx +319 -0
  77. package/src/components/TextInput/styles.ts +127 -0
  78. package/src/components/Touchable/index.tsx +172 -0
  79. package/src/components/Touchable/styles.ts +28 -0
  80. package/src/components/View/index.tsx +103 -0
  81. package/src/components/View/styles.ts +24 -0
  82. package/src/components/components.ts +42 -0
  83. package/src/components/defaultStyles.ts +62 -0
  84. package/src/components/legacy/Modal/index.tsx +163 -0
  85. package/src/components/legacy/Modal/styles.ts +125 -0
  86. package/src/components/legacy/Pager/index.tsx +242 -0
  87. package/src/components/legacy/Pager/styles.ts +51 -0
  88. package/src/components/legacy/index.ts +2 -0
  89. package/src/modules/documentPicker.ts +7 -0
  90. package/src/modules/fastImage.ts +2 -0
  91. package/src/modules/imageCropPicker.d.ts +497 -0
  92. package/src/modules/index.d.ts +682 -0
  93. package/src/modules/reactNavigation.ts +15 -0
  94. package/src/modules/textInputMask.ts +11 -0
  95. package/src/modules/types/documentPicker.d.ts +215 -0
  96. package/src/modules/types/fileTypes.ts +138 -0
  97. package/src/modules/types/textInputMask.ts +9 -0
  98. package/src/types/index.ts +1 -0
  99. package/src/types/utility.ts +9 -0
  100. package/src/utils/KeyboardAware/context.tsx +75 -0
  101. package/src/utils/KeyboardAware/index.ts +17 -0
  102. package/src/utils/KeyboardAware/keyboardHooks.ts +124 -0
  103. package/src/utils/KeyboardAware/lib/KeyboardAwareFlatList.ts +4 -0
  104. package/src/utils/KeyboardAware/lib/KeyboardAwareHOC.tsx +618 -0
  105. package/src/utils/KeyboardAware/lib/KeyboardAwareInterface.ts +13 -0
  106. package/src/utils/KeyboardAware/lib/KeyboardAwareScrollView.ts +6 -0
  107. package/src/utils/KeyboardAware/lib/KeyboardAwareSectionList.ts +6 -0
  108. package/src/utils/KeyboardAware/types.ts +159 -0
  109. package/src/utils/ModalManager/components.tsx +112 -0
  110. package/src/utils/ModalManager/context.tsx +260 -0
  111. package/src/utils/ModalManager/index.ts +16 -0
  112. package/src/utils/OSAlert.ts +180 -0
  113. package/src/utils/PermissionManager/context.tsx +302 -0
  114. package/src/utils/PermissionManager/index.ts +20 -0
  115. package/src/utils/PermissionManager/types.ts +24 -0
  116. package/src/utils/hooks.ts +163 -0
  117. package/src/utils/index.ts +11 -0
  118. package/src/utils/input.ts +51 -0
  119. package/src/utils/misc.ts +83 -0
  120. package/src/utils/notifications.ts +206 -0
  121. package/src/utils/theme.ts +58 -0
@@ -0,0 +1,130 @@
1
+ import { SliderMark } from './Mark'
2
+ import { ThumbTooltip } from './Thumb'
3
+ import * as React from 'react'
4
+ import { Slider as RNSlider } from '@miblanchard/react-native-slider'
5
+
6
+ import { useRef } from 'react'
7
+ import { StyleSheet } from 'react-native'
8
+ import { View } from '../View'
9
+ import {
10
+ getNestedStylesByKey,
11
+ useDefaultComponentStyle,
12
+ } from '@codeleap/common'
13
+
14
+ import { SliderProps } from './types'
15
+ import { InputLabel } from '../InputLabel'
16
+ import { SliderStyles } from './styles'
17
+
18
+ export * from './styles'
19
+
20
+ export const Slider: React.FC<SliderProps> = (sliderProps) => {
21
+ const [tooltipVisible, setTooltipVisible] = React.useState(false)
22
+
23
+ const {
24
+ debounce,
25
+ onValueChange,
26
+ labels,
27
+ value,
28
+ label,
29
+ valueOverThumb,
30
+ formatTooltip,
31
+ styles = {},
32
+ style,
33
+ tooltipVisibilityWindow = 830,
34
+ variants,
35
+ ...props
36
+ } = sliderProps
37
+
38
+ const changeDebounce = typeof debounce === 'number' ? debounce : 100
39
+
40
+ const debounceTimeout = useRef(null)
41
+ const toggleTooltipTimeout = useRef(null)
42
+ const valueRef = useRef(value)
43
+
44
+ const variantStyles = useDefaultComponentStyle<'u:Slider', typeof SliderStyles>('u:Slider', {
45
+ variants,
46
+ styles,
47
+ transform: StyleSheet.flatten,
48
+ })
49
+
50
+ function setValue() {
51
+ onValueChange(valueRef.current)
52
+ }
53
+
54
+ function onChange(val) {
55
+ let eventValue = val
56
+
57
+ if (Array.isArray(val) && typeof value === 'number') {
58
+ eventValue = val[0]
59
+ }
60
+
61
+ if (eventValue === value) return
62
+
63
+ valueRef.current = eventValue as number
64
+
65
+ if (debounceTimeout.current) clearTimeout(debounceTimeout.current)
66
+
67
+ debounceTimeout.current = setTimeout(() => {
68
+ setValue()
69
+ }, changeDebounce)
70
+ }
71
+
72
+ return (
73
+ <View style={[variantStyles.wrapper, style]}>
74
+ <InputLabel label={label} styles={getNestedStylesByKey('label', variantStyles)} />
75
+ <RNSlider
76
+ value={value}
77
+ onSlidingStart={() => {
78
+ if (toggleTooltipTimeout.current) { clearTimeout(toggleTooltipTimeout.current) }
79
+
80
+ setTooltipVisible(true)
81
+ }}
82
+ onSlidingComplete={() => {
83
+ toggleTooltipTimeout.current = setTimeout(
84
+ () => setTooltipVisible(false),
85
+ tooltipVisibilityWindow,
86
+ )
87
+ }}
88
+ onValueChange={onChange}
89
+ renderAboveThumbComponent={(idx) => {
90
+ if (!valueOverThumb) return null
91
+ const thisValue = Array.isArray(value) ? value[idx] : value
92
+ return (
93
+ <ThumbTooltip
94
+ visible={tooltipVisible}
95
+ variantStyles={variantStyles}
96
+ styles={styles}
97
+ >
98
+ {formatTooltip ? formatTooltip(thisValue) : thisValue.toString()}
99
+ </ThumbTooltip>
100
+ )
101
+ }}
102
+ renderTrackMarkComponent={(idx) => (
103
+ <SliderMark
104
+ index={idx}
105
+ sliderProps={sliderProps}
106
+ styles={styles}
107
+ variantStyles={variantStyles}
108
+ />
109
+ )}
110
+ maximumValue={labels ? labels.length - 1 : 10}
111
+ trackMarks={labels ? Object.keys(labels).map((z) => parseInt(z)) : []}
112
+ containerStyle={
113
+ [variantStyles.inputContainer] as any
114
+ }
115
+ thumbStyle={
116
+ StyleSheet.flatten([variantStyles.handle]) as any
117
+ }
118
+ trackStyle={[variantStyles.track] as any}
119
+ minimumTrackTintColor={
120
+ StyleSheet.flatten([
121
+ variantStyles.selectedTrack,
122
+
123
+ ])?.backgroundColor
124
+ }
125
+ {...props}
126
+ />
127
+ </View>
128
+ )
129
+ }
130
+
@@ -0,0 +1,76 @@
1
+ import { assignTextStyle, createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
+ import { InputLabelComposition } from '../InputLabel'
3
+
4
+ export type SliderComposition =
5
+ | 'wrapper'
6
+ | 'handle'
7
+ | 'track'
8
+ | `label${Capitalize<InputLabelComposition>}`
9
+ | 'selectedTrack'
10
+ | 'inputContainer'
11
+ | 'tooltip'
12
+ | 'tooltip:visible'
13
+ | 'tooltip:hidden'
14
+ | 'trackLabels'
15
+ | 'mark'
16
+ | 'tooltipArrow'
17
+ | 'tooltipText'
18
+
19
+ const createSliderStyle = createDefaultVariantFactory<SliderComposition>()
20
+
21
+ const presets = includePresets((styles) => createSliderStyle(() => ({ wrapper: styles })),
22
+ )
23
+
24
+ export const SliderStyles = {
25
+ ...presets,
26
+ default: createSliderStyle((theme) => ({
27
+ wrapper: {},
28
+ handle: {
29
+ backgroundColor: theme.colors.primary,
30
+ },
31
+ selectedTrack: {
32
+ backgroundColor: theme.colors.primary,
33
+ },
34
+ track: {
35
+ backgroundColor: theme.colors.gray,
36
+ },
37
+ tooltip: {
38
+ padding: theme.spacing.value(0.5),
39
+ backgroundColor: theme.colors.primary,
40
+ position: 'relative',
41
+ borderRadius: theme.borderRadius.small,
42
+ },
43
+ 'tooltip:visible': {
44
+ opacity: 1,
45
+ },
46
+ 'tooltip:hidden': {
47
+ opacity: 0,
48
+ },
49
+ mark: {
50
+ position: 'absolute',
51
+ backgroundColor: theme.colors.primary,
52
+ borderRadius: 29,
53
+ height: 10,
54
+ width: 10,
55
+ top: -5,
56
+ },
57
+ trackLabels: {
58
+ position: 'absolute',
59
+ top: 8,
60
+ ...assignTextStyle('p3')(theme).text,
61
+ },
62
+ tooltipArrow: {
63
+ height: 6,
64
+ width: 6,
65
+ position: 'absolute',
66
+ backgroundColor: theme.colors.primary,
67
+ transform: [{ rotate: '45deg' }],
68
+ bottom: -3,
69
+ left: '50%',
70
+ },
71
+ tooltipText: {
72
+ color: theme.colors.white,
73
+ ...assignTextStyle('p3')(theme).text,
74
+ },
75
+ })),
76
+ }
@@ -0,0 +1,30 @@
1
+ import { ComponentVariants, Form } from '@codeleap/common'
2
+
3
+ import {
4
+ SliderComposition, SliderStyles,
5
+ } from './styles'
6
+
7
+ import { SliderProps as RNSliderProps } from '@miblanchard/react-native-slider/lib/types'
8
+ import { StylesOf } from '../../types'
9
+ import { ViewProps } from '../View'
10
+ export type SliderProps = Partial<Omit<RNSliderProps, 'value' | 'onValueChange'>> & {
11
+ debounce?: number
12
+ labels: string[]
13
+ value: number
14
+ valueOverThumb?: boolean
15
+ showMarks?: boolean
16
+ onValueChange: (val: number) => void
17
+ label: Form.Label
18
+ formatTooltip?: (val: number) => React.ReactNode
19
+ variants?: ComponentVariants<typeof SliderStyles>['variants']
20
+ styles?: StylesOf<SliderComposition>
21
+ style?: ViewProps['style']
22
+ tooltipVisibilityWindow?: number
23
+ }
24
+
25
+ export type SliderMarkProps = {
26
+ sliderProps: SliderProps
27
+ index: number
28
+ styles: SliderProps['styles']
29
+ variantStyles: SliderProps['styles']
30
+ }
@@ -0,0 +1,91 @@
1
+ import * as React from 'react'
2
+ import {
3
+
4
+ ComponentVariants,
5
+ useDefaultComponentStyle,
6
+ StylesOf,
7
+ useCodeleapContext,
8
+ FormTypes,
9
+ useValidate,
10
+ } from '@codeleap/common'
11
+ import { ComponentPropsWithRef, forwardRef, ReactNode } from 'react'
12
+ import { StyleSheet, Switch as NativeSwitch } from 'react-native'
13
+ import { FormError } from '../TextInput'
14
+ import { View } from '../View'
15
+
16
+ import {
17
+ SwitchStyles,
18
+ SwitchComposition,
19
+ } from './styles'
20
+ import { InputLabel } from '../InputLabel'
21
+ export * from './styles'
22
+ type NativeSwitchProps = Omit<
23
+ ComponentPropsWithRef<typeof NativeSwitch>,
24
+ 'thumbColor' | 'trackColor'
25
+ >
26
+ type SwitchProps = NativeSwitchProps & {
27
+ variants?: ComponentVariants<typeof SwitchStyles>['variants']
28
+ label?: ReactNode
29
+ styles?: StylesOf<SwitchComposition>
30
+ validate?: FormTypes.ValidatorFunctionWithoutForm | string
31
+ }
32
+
33
+ export const Switch = forwardRef<NativeSwitch, SwitchProps>(
34
+ (switchProps, ref) => {
35
+ const {
36
+ variants = [],
37
+ style = {},
38
+ styles = {},
39
+ validate,
40
+ label,
41
+ value,
42
+ ...props
43
+ } = switchProps
44
+
45
+ const variantStyles = useDefaultComponentStyle('Switch', {
46
+ variants,
47
+ })
48
+ const { error, showError } = useValidate(switchProps.value, validate)
49
+ function getStyles(key: SwitchComposition) {
50
+ return [
51
+ variantStyles[key],
52
+ styles[key],
53
+ key === 'wrapper' ? style : {},
54
+ showError ? variantStyles[key + ':error'] : {},
55
+ showError ? styles[key + ':error'] : {},
56
+ value ? variantStyles[key + ':on'] : {},
57
+ value ? styles[key + ':on'] : {},
58
+ switchProps.disabled ? variantStyles[key + ':disabled'] : {},
59
+ switchProps.disabled ? styles[key + ':disabled'] : {},
60
+ ]
61
+ }
62
+
63
+ const inputStyles = getStyles('input')
64
+
65
+ const { color, backgroundColor } = StyleSheet.flatten(inputStyles)
66
+ const { Theme } = useCodeleapContext()
67
+
68
+ const thumbColor = color || Theme.colors.primary
69
+ const trackColor = backgroundColor || Theme.colors.gray
70
+ return (
71
+ <View style={getStyles('wrapper')}>
72
+ <View style={getStyles('inputWrapper')}>
73
+ <NativeSwitch
74
+ thumbColor={thumbColor}
75
+ trackColor={{ false: trackColor, true: trackColor }}
76
+ ios_backgroundColor={trackColor}
77
+ value={value}
78
+ ref={ref}
79
+ {...props}
80
+ />
81
+ <InputLabel label={label} styles={{
82
+ asterisk: getStyles('labelAsterisk'),
83
+ text: getStyles('labelText'),
84
+ wrapper: getStyles('labelWrapper'),
85
+ }} />
86
+ </View>
87
+ <FormError text={error.message} style={getStyles('error')} />
88
+ </View>
89
+ )
90
+ },
91
+ ) as React.FC<SwitchProps>
@@ -0,0 +1,38 @@
1
+ import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
+ import { InputLabelComposition } from '../InputLabel'
3
+
4
+ export type SwitchParts = 'wrapper' | `label${Capitalize<InputLabelComposition>}` | 'input' | 'error' | 'inputWrapper'
5
+ export type SwitchComposition =
6
+ | SwitchParts
7
+ | `${SwitchParts}:disabled`
8
+ | `${SwitchParts}:on`
9
+
10
+ const createSwitchStyle = createDefaultVariantFactory<SwitchComposition>()
11
+
12
+ const presets = includePresets((styles) => createSwitchStyle(() => ({ wrapper: styles })),
13
+ )
14
+
15
+ export const SwitchStyles = {
16
+ ...presets,
17
+ default: createSwitchStyle((theme) => ({
18
+ wrapper: {},
19
+ inputWrapper: {
20
+ ...theme.presets.row,
21
+ ...theme.presets.alignCenter,
22
+ },
23
+ labelWrapper: {
24
+ ...theme.spacing.marginLeft(0.5),
25
+ },
26
+ input: {
27
+ color: theme.colors.white,
28
+ backgroundColor: theme.colors.gray,
29
+ },
30
+ 'input:on': {
31
+ color: theme.colors.primary,
32
+ backgroundColor: theme.colors.gray,
33
+ },
34
+ error: {
35
+ color: theme.colors.negative,
36
+ },
37
+ })),
38
+ }
@@ -0,0 +1,97 @@
1
+ import * as React from 'react'
2
+ import { ComponentPropsWithoutRef, forwardRef } from 'react'
3
+ import {
4
+ ComponentVariants,
5
+ useDefaultComponentStyle,
6
+ BaseViewProps,
7
+ TypeGuards,
8
+ useState,
9
+ } from '@codeleap/common'
10
+ import { Animated, GestureResponderEvent, Platform, StyleSheet, Text as NativeText } from 'react-native'
11
+ import { MotiText as _MotiText, MotiProps } from 'moti'
12
+ import { useAnimateColor, usePressableFeedback } from '../../utils'
13
+ import { TextStyles } from './styles'
14
+ import { View } from '../View'
15
+
16
+ export * from './styles'
17
+
18
+ export type TextProps = ComponentPropsWithoutRef<typeof NativeText> & {
19
+ text?: React.ReactNode
20
+ variants?: ComponentVariants<typeof TextStyles>['variants']
21
+ animated?: boolean
22
+ colorChangeConfig?: Partial<Animated.TimingAnimationConfig>
23
+ debugName?: string
24
+ } & BaseViewProps & MotiProps
25
+
26
+ const MotiText = Animated.createAnimatedComponent(_MotiText)
27
+
28
+ export const Text = forwardRef<NativeText, TextProps>((textProps, ref) => {
29
+ const { variants = [], text, children, style, colorChangeConfig, ...props } = textProps
30
+
31
+ const pressPolyfillEnabled = Platform.OS === 'android' && !!props.onPress
32
+
33
+ const [pressed, setPressed] = useState(false)
34
+ const handlePress = (pressed) => {
35
+ if (!pressPolyfillEnabled) return
36
+ return () => {
37
+ if (props.onPress) {
38
+ setPressed(pressed)
39
+
40
+ }
41
+ }
42
+ }
43
+ const variantStyles = useDefaultComponentStyle<'u:Text', typeof TextStyles>('u:Text', {
44
+ variants,
45
+ transform: StyleSheet.flatten,
46
+ rootElement: 'text',
47
+ })
48
+
49
+ const styles = StyleSheet.flatten([variantStyles.text, style])
50
+
51
+ const animatedColor = useAnimateColor(styles.color, colorChangeConfig)
52
+
53
+ if (!!text && !TypeGuards.isString(text)) return <>{text}</>
54
+
55
+ const Component = textProps.animated ? MotiText : NativeText
56
+
57
+ const colorStyle = { color: props.animated ? animatedColor : styles.color }
58
+
59
+ const { getFeedbackStyle } = usePressableFeedback(styles, {
60
+ disabled: !pressPolyfillEnabled,
61
+ feedbackConfig: variantStyles.pressFeedback,
62
+ hightlightPropertyIn: 'color',
63
+ hightlightPropertyOut: 'backgroundColor',
64
+ })
65
+ const feedbackStyle = pressPolyfillEnabled ? getFeedbackStyle(pressed) : undefined
66
+
67
+ return <Component {...props}
68
+ onPressIn={handlePress(true)} onPressOut={handlePress(false)}
69
+ style={[styles, colorStyle, feedbackStyle]}
70
+ // @ts-ignore
71
+ ref={ref}
72
+ >
73
+ {text}
74
+ {children}
75
+ </Component>
76
+
77
+ })
78
+
79
+ // const childArr = React.Children.toArray([
80
+ // text,
81
+ // children,
82
+ // ])
83
+
84
+ // return <View style={[styles, colorStyle]}>
85
+ // {
86
+ // childArr.map((child) => {
87
+ // if (TypeGuards.isString(child)) {
88
+ // // @ts-ignore
89
+ // return <Component {...props} ref={ref}>
90
+ // {child}
91
+ // </Component>
92
+
93
+ // }
94
+ // return child
95
+ // })
96
+ // }
97
+ // </View>
@@ -0,0 +1,50 @@
1
+ import { assignTextStyle, createDefaultVariantFactory, includePresets, shadeColor, StylesOf } from '@codeleap/common'
2
+ import { FeedbackConfig } from '../../utils'
3
+
4
+ export type TextComposition = 'text' | 'touchFeedback'
5
+
6
+ export type TextStylesGen<TCSS = any> = StylesOf<'text', TCSS> & {
7
+ 'pressFeedback'?: FeedbackConfig
8
+ }
9
+
10
+ const createTextStyle = createDefaultVariantFactory<
11
+ TextComposition, TextStylesGen
12
+ >()
13
+
14
+ const presets = includePresets((styles) => createTextStyle(() => ({ text: styles })),
15
+ )
16
+
17
+ export const TextStyles = {
18
+ ...presets,
19
+ default: createTextStyle((theme) => {
20
+ const defaultStyle = assignTextStyle('p1')(theme).text
21
+ return {
22
+ text: {
23
+ fontFamily: theme.typography.fontFamily,
24
+ ...defaultStyle,
25
+ },
26
+ pressFeedback: {
27
+ type: 'highlight',
28
+ brightness: 0,
29
+ shiftOpacity: 0.3,
30
+ },
31
+ }
32
+ }),
33
+ h1: assignTextStyle('h1'),
34
+ h2: assignTextStyle('h2'),
35
+ h3: assignTextStyle('h3'),
36
+ h4: assignTextStyle('h4'),
37
+ h5: assignTextStyle('h5'),
38
+ h6: assignTextStyle('h6'),
39
+ p1: assignTextStyle('p1'),
40
+ p2: assignTextStyle('p2'),
41
+ p3: assignTextStyle('p3'),
42
+ p4: assignTextStyle('p4'),
43
+ link: assignTextStyle('p1'),
44
+ OSAlertBody: createTextStyle((theme) => ({
45
+ text: {
46
+ ...assignTextStyle('p1')(theme).text,
47
+ ...theme.presets.textCenter,
48
+ },
49
+ })),
50
+ }