@codeleap/web 3.13.3 → 3.14.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeleap/web",
3
- "version": "3.13.3",
3
+ "version": "3.14.0",
4
4
  "main": "src/index.ts",
5
5
  "repository": {
6
6
  "url": "https://github.com/codeleap-uk/internal-libs-monorepo.git",
@@ -7,10 +7,14 @@ import { ActionIconComposition, ActionIconParts, ActionIconPresets } from './sty
7
7
 
8
8
  export * from './styles'
9
9
 
10
+ /** IconButton */
10
11
  export type ActionIconProps = Omit<TouchableProps, 'styles' | 'variants'> & ComponentCommonProps & {
11
12
  iconProps?: Partial<IconProps>
13
+ /** prop */
12
14
  icon?: IconProps['name']
15
+ /** prop */
13
16
  name?: IconProps['name']
17
+
14
18
  styles?: StylesOf<ActionIconComposition>
15
19
  } & ComponentVariants<typeof ActionIconPresets>
16
20
 
@@ -14,11 +14,14 @@ import { ComponentCommonProps, ComponentWithDefaultProps } from '../../types'
14
14
 
15
15
  export * from './styles'
16
16
 
17
+ /** * LoadingIndicator */
17
18
  export type ActivityIndicatorProps = ComponentCommonProps & {
18
19
  style?: React.CSSProperties
19
20
  styles?: StylesOf<ActivityIndicatorComposition>
20
21
  css?: CSSInterpolation | CSSInterpolation[]
22
+ /** prop */
21
23
  component?: React.ComponentType<Omit<ActivityIndicatorProps & {ref?: React.Ref<any>}, 'component'>>
24
+ /** prop */
22
25
  size?: number
23
26
  } & ComponentVariants<typeof ActivityIndicatorStyles>
24
27
 
@@ -7,19 +7,27 @@ import { ComponentCommonProps } from '../../types'
7
7
 
8
8
  export * from './styles'
9
9
 
10
+ /** * Badge */
10
11
  export type BadgeProps = ComponentVariants<typeof BadgePresets>
11
12
  & ViewProps<'div'>
12
13
  & ComponentCommonProps
13
14
  & {
14
15
  styles?: StylesOf<BadgeComposition>
16
+ /** prop */
15
17
  maxCount?: number
18
+ /** prop */
16
19
  minCount?: number
20
+ /** prop */
17
21
  debugName?: string
18
22
  innerWrapperProps?: Partial<PropsOf<typeof View>>
19
23
  textProps?: Partial<PropsOf<typeof Text>>
24
+ /** prop */
20
25
  getBadgeContent?: (props: BadgeContent) => string
26
+ /** prop */
21
27
  renderBadgeContent?: (props: BadgeContent & { content: string }) => JSX.Element
28
+ /** prop */
22
29
  disabled?: boolean
30
+ /** prop */
23
31
  badge?: number | boolean
24
32
  }
25
33
 
@@ -14,20 +14,29 @@ import { ActivityIndicator, ActivityIndicatorProps } from '../ActivityIndicator'
14
14
  import { ButtonComposition, ButtonPresets, ButtonParts } from './styles'
15
15
  import { ComponentCommonProps } from '../../types'
16
16
 
17
+ /** * Button */
17
18
  export type ButtonProps =
18
19
  ComponentVariants<typeof ButtonPresets> &
19
20
  Partial<Omit<TouchableProps<'button'>, 'variants' | 'styles'>> &
20
21
  ComponentCommonProps & {
22
+ /** prop */
21
23
  text?: string
24
+ /** prop */
22
25
  rightIcon?: IconPlaceholder
26
+ /** prop */
23
27
  icon?: IconPlaceholder
28
+ /** prop */
24
29
  onPress?: AnyFunction
25
30
  styles?: StylesOf<ButtonComposition>
26
31
  style?: React.CSSProperties
32
+ /** prop */
27
33
  loading?: boolean
28
34
  loadingShowText?: boolean
35
+ /** prop */
29
36
  debugName: string
37
+ /** prop */
30
38
  debounce?: number
39
+ /** prop */
31
40
  selected?: boolean
32
41
  children?: React.ReactNode | ((props: Partial<Omit<ButtonProps, 'children'>>) => JSX.Element)
33
42
  loaderProps?: Partial<ActivityIndicatorProps>
@@ -17,15 +17,20 @@ import { ComponentCommonProps } from '../../types/utility'
17
17
 
18
18
  export * from './styles'
19
19
 
20
+ /** * Checkbox */
20
21
  export type CheckboxProps = Pick<
21
22
  InputBaseProps,
22
23
  'debugName' | 'disabled' | 'label'
23
24
  > & ComponentCommonProps & {
24
25
  styles?: StylesOf<CheckboxComposition>
26
+ /** prop */
25
27
  value: boolean
28
+ /** prop */
26
29
  onValueChange: (value: boolean) => void
27
30
  style?: PropsOf<typeof View>['style']
31
+ /** prop */
28
32
  checkboxOnLeft?: boolean
33
+ /** prop */
29
34
  checkIcon?: IconPlaceholder
30
35
  } & ComponentVariants<typeof CheckboxPresets>
31
36
 
@@ -8,7 +8,7 @@ import { Touchable, TouchableProps } from '../Touchable'
8
8
  import { View, ViewProps } from '../View'
9
9
  import { OverlayComposition, OverlayPresets } from './styles'
10
10
  import { NativeHTMLElement } from '../../types'
11
- import { useLockScroll, usePopState } from '../../lib'
11
+ import { usePopState } from '../../lib'
12
12
 
13
13
  export type OverlayProps<T extends NativeHTMLElement = 'div'> = {
14
14
  visible?: boolean
@@ -37,8 +37,6 @@ export const Overlay = <T extends NativeHTMLElement>(overlayProps:OverlayProps<T
37
37
 
38
38
  usePopState(visible, props.onPress, scrollLocked)
39
39
 
40
- useLockScroll(visible)
41
-
42
40
  const Component = props.onClick || props.onPress ? Touchable : View
43
41
 
44
42
  return (
@@ -1,22 +1,10 @@
1
- import { ComponentVariants, TypeGuards, useDefaultComponentStyle } from '@codeleap/common'
2
- import React, { ComponentPropsWithoutRef, ElementType } from 'react'
3
- import { StylesOf } from '../../types/utility'
4
- import { TextComposition, TextPresets } from './styles'
1
+ import { TypeGuards, useDefaultComponentStyle } from '@codeleap/common'
2
+ import React, { ElementType } from 'react'
3
+ import { TextPresets } from './styles'
4
+ import { TextProps } from './types'
5
5
 
6
6
  export * from './styles'
7
-
8
- export type TextProps<T extends ElementType> =
9
- ComponentPropsWithoutRef<T> &
10
- ComponentVariants<typeof TextPresets> & {
11
- component?: T
12
- text: string
13
- styles?: StylesOf<TextComposition>
14
- msg?: string
15
- debugName?: string
16
- debounce?: number
17
- pressDisabled?: boolean
18
- onPress?: (event: React.MouseEventHandler<T>) => void
19
- }
7
+ export * from './types'
20
8
 
21
9
  const defaultProps: Partial<TextProps<'p'>> = {
22
10
  debugName: 'Text component',
@@ -0,0 +1,16 @@
1
+ import { StylesOf, ComponentVariants } from '@codeleap/common'
2
+ import { ComponentPropsWithoutRef, ElementType } from 'react'
3
+ import { TextComposition, TextPresets } from './styles'
4
+
5
+ export type TextProps<T extends ElementType> =
6
+ ComponentPropsWithoutRef<T> &
7
+ ComponentVariants<typeof TextPresets> & {
8
+ component?: T
9
+ text: string
10
+ styles?: StylesOf<TextComposition>
11
+ msg?: string
12
+ debugName?: string
13
+ debounce?: number
14
+ pressDisabled?: boolean
15
+ onPress?: (event: React.MouseEventHandler<T>) => void
16
+ }
@@ -21,30 +21,53 @@ export type TouchableProps<T extends ElementType = 'button'> = ComponentPropsWit
21
21
  debounce?: number
22
22
  leadingDebounce?: boolean
23
23
  setPressed?: (pressed: boolean) => void
24
+ analyticsEnabled?: boolean
25
+ analyticsName?: string
26
+ analyticsData?: Record<string, any>
24
27
  } & ComponentVariants<typeof TouchablePresets>
25
28
 
29
+ const defaultProps: TouchableProps<'button'> = {
30
+ propagate: true,
31
+ debounce: null,
32
+ component: View,
33
+ style: {},
34
+ styles: {},
35
+ responsiveVariants: {},
36
+ variants: [],
37
+ css: [],
38
+ analyticsEnabled: false,
39
+ analyticsName: null,
40
+ analyticsData: {},
41
+ }
26
42
  export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
27
43
  touchableProps: TouchableProps<T>,
28
44
  ref,
29
45
  ) => {
46
+ const mergedProps: TouchableProps = {
47
+ ...(defaultProps),
48
+ ...(touchableProps),
49
+ }
30
50
  const {
31
- propagate = true,
32
- debounce = null,
51
+ propagate,
52
+ debounce,
33
53
  leadingDebounce,
34
54
  setPressed,
35
- component: Component = View,
55
+ component: Component,
36
56
  disabled,
37
57
  onPress,
38
58
  onClick,
39
59
  debugName,
40
60
  debugComponent,
41
- style = {},
42
- styles = {},
43
- responsiveVariants = {},
44
- variants = [],
45
- css = [],
61
+ style,
62
+ styles,
63
+ responsiveVariants,
64
+ variants,
65
+ css,
66
+ analyticsEnabled,
67
+ analyticsName,
68
+ analyticsData,
46
69
  ...props
47
- } = touchableProps as TouchableProps
70
+ } = mergedProps
48
71
 
49
72
  const pressed = React.useRef(!!leadingDebounce)
50
73
 
@@ -60,7 +83,7 @@ export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
60
83
  responsiveVariants,
61
84
  variants,
62
85
  styles,
63
- rootElement: 'wrapper'
86
+ rootElement: 'wrapper',
64
87
  })
65
88
 
66
89
  const { logger } = useCodeleapContext()
@@ -76,7 +99,7 @@ export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
76
99
  logger.warn(
77
100
  'No onPress passed to touchable',
78
101
  touchableProps,
79
- 'User interaction'
102
+ 'User interaction',
80
103
  )
81
104
  return
82
105
  }
@@ -85,8 +108,14 @@ export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
85
108
  logger.log(
86
109
  `<${debugComponent || 'Touchable'}/> pressed`,
87
110
  { debugName, debugComponent },
88
- 'User interaction'
111
+ 'User interaction',
89
112
  )
113
+ if (analyticsEnabled) {
114
+ const name = analyticsName || debugName
115
+ if (!!name?.trim?.()) {
116
+ logger.analytics?.interaction(name, analyticsData)
117
+ }
118
+ }
90
119
 
91
120
  if (TypeGuards.isFunction(onClick)) onClick?.(event)
92
121
  onPress?.()
@@ -127,6 +156,10 @@ export const TouchableCP = <T extends NativeHTMLElement = 'button'>(
127
156
  )
128
157
  }
129
158
 
130
- export const Touchable = forwardRef(TouchableCP) as <T extends NativeHTMLElement = 'button'>(
159
+ export const Touchable = forwardRef(TouchableCP) as (<T extends NativeHTMLElement = 'button'>(
131
160
  touchableProps: TouchableProps<T>
132
- ) => JSX.Element
161
+ ) => JSX.Element) & {
162
+ defaultProps: Partial<TouchableProps<'button'>>
163
+ }
164
+
165
+ Touchable.defaultProps = defaultProps
package/src/lib/hooks.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { AnyFunction, onMount, onUpdate, range, useIsomorphicEffect, useUncontrolled } from '@codeleap/common'
1
+ import { AnyFunction, onMount, onUpdate, range, useUncontrolled } from '@codeleap/common'
2
2
  import { useCallback, useMemo, useRef, useState } from 'react'
3
3
  import { v4 } from 'uuid'
4
4
  import { easeInOut, EasingFunction, AnimationProps, useAnimate, useAnimation, animate } from 'framer-motion'
@@ -352,23 +352,3 @@ export function useAnimatedVariantStyles<T extends Record<string|number|symbol,
352
352
 
353
353
  return animated
354
354
  }
355
-
356
- export function useLockScroll(isLock: boolean) {
357
- useIsomorphicEffect(() => {
358
- const htmlStyle = document?.documentElement?.style
359
-
360
- if (!!htmlStyle) {
361
- if (htmlStyle.overflowX !== 'hidden') {
362
- htmlStyle.overflowX = 'hidden'
363
- }
364
-
365
- console.log({ isLock, flow: htmlStyle.overflowY })
366
-
367
- if (isLock) {
368
- htmlStyle.overflowY = 'hidden'
369
- } else if (!isLock && htmlStyle.overflowY === 'hidden') {
370
- htmlStyle.overflowY = 'auto'
371
- }
372
- }
373
- }, [isLock])
374
- }