@helpwave/hightide-native 0.6.0 → 0.7.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 (86) hide show
  1. package/package.json +3 -3
  2. package/src/components/card/Card.tsx +2 -4
  3. package/src/components/chat/ChatAttachmentMessageBubble.tsx +152 -90
  4. package/src/components/chat/ChatConversationList.tsx +4 -12
  5. package/src/components/chat/ChatConversationRow.tsx +159 -164
  6. package/src/components/chat/ChatDateDivider.tsx +3 -8
  7. package/src/components/chat/ChatMessageBubble.tsx +51 -45
  8. package/src/components/chat/ChatMessageComposer.tsx +4 -12
  9. package/src/components/chat/ChatMessageList.tsx +3 -9
  10. package/src/components/chat/ChatQuickReplyChip.tsx +41 -27
  11. package/src/components/chat/ChatSystemLine.tsx +4 -12
  12. package/src/components/chat/ChatThreadHeader.tsx +136 -101
  13. package/src/components/layout/Divider.tsx +2 -4
  14. package/src/components/list/ListActionItem.tsx +57 -65
  15. package/src/components/list/ListItem.tsx +8 -28
  16. package/src/components/list/ListItemTextContent.tsx +4 -2
  17. package/src/components/list/ListNavigationItem.tsx +55 -63
  18. package/src/components/user-interaction/Button.tsx +43 -49
  19. package/src/components/user-interaction/Checkbox.tsx +47 -48
  20. package/src/components/user-interaction/IconButton.tsx +40 -42
  21. package/src/components/user-interaction/Input.tsx +69 -80
  22. package/src/components/user-interaction/MultiSelect/MultiSelect.tsx +40 -0
  23. package/src/components/user-interaction/MultiSelect/MultiSelectContext.tsx +70 -0
  24. package/src/components/user-interaction/MultiSelect/MultiSelectMenu.tsx +87 -0
  25. package/src/components/user-interaction/MultiSelect/MultiSelectOption.tsx +87 -0
  26. package/src/components/user-interaction/MultiSelect/MultiSelectRoot.tsx +194 -0
  27. package/src/components/user-interaction/MultiSelect/MultiSelectTrigger.tsx +123 -0
  28. package/src/components/user-interaction/MultiSelect/index.ts +6 -0
  29. package/src/components/user-interaction/SearchBar.tsx +11 -17
  30. package/src/components/user-interaction/Select/Select.tsx +40 -0
  31. package/src/components/user-interaction/Select/SelectContext.tsx +69 -0
  32. package/src/components/user-interaction/Select/SelectMenu.tsx +87 -0
  33. package/src/components/user-interaction/Select/SelectOption.tsx +77 -0
  34. package/src/components/user-interaction/Select/SelectRoot.tsx +186 -0
  35. package/src/components/user-interaction/Select/SelectTrigger.tsx +92 -0
  36. package/src/components/user-interaction/Select/index.ts +6 -0
  37. package/src/components/user-interaction/Switch.tsx +46 -98
  38. package/src/components/user-interaction/Textarea.tsx +165 -12
  39. package/src/components/user-interaction/ThemedPressable.tsx +48 -49
  40. package/src/components/visualization-and-display/Avatar.tsx +19 -17
  41. package/src/components/visualization-and-display/Chip.tsx +4 -12
  42. package/src/components/visualization-and-display/ThemedText.tsx +12 -5
  43. package/src/enums/chatMessageDirection.ts +18 -0
  44. package/src/enums/chatMessageStatus.ts +18 -0
  45. package/src/enums/hightideThemeModes.ts +18 -0
  46. package/src/enums/index.ts +7 -0
  47. package/src/enums/listItemContentOrder.ts +18 -0
  48. package/src/enums/themedTextAppearance.ts +18 -0
  49. package/src/enums/useMultiSelectFirstHighlightBehavior.ts +18 -0
  50. package/src/enums/useSelectFirstHighlightBehavior.ts +18 -0
  51. package/src/global-contexts/content-theme/ContentThemeProvider.tsx +9 -5
  52. package/src/global-contexts/theme/ThemeProvider.tsx +4 -1
  53. package/src/hooks/index.ts +2 -0
  54. package/src/hooks/useAnimatedStyleTransition.ts +460 -0
  55. package/src/hooks/useMemoizedTheme.ts +23 -0
  56. package/src/hooks/useMultiSelect.ts +3 -1
  57. package/src/hooks/useSelect.ts +3 -1
  58. package/src/icons/HightideIconRegistry.ts +2 -0
  59. package/src/theme/adapters/style-adapter-utils.ts +121 -27
  60. package/src/theme/resolvers/avatar.ts +48 -39
  61. package/src/theme/resolvers/button.ts +7 -17
  62. package/src/theme/resolvers/chat/attachment-message-bubble.ts +5 -6
  63. package/src/theme/resolvers/chat/conversation-row.ts +4 -6
  64. package/src/theme/resolvers/chat/message-bubble.ts +1 -2
  65. package/src/theme/resolvers/chat/message-composer.ts +1 -2
  66. package/src/theme/resolvers/chat/quick-reply-chip.ts +2 -3
  67. package/src/theme/resolvers/chat/system-line.ts +1 -2
  68. package/src/theme/resolvers/chat/thread-header.ts +3 -4
  69. package/src/theme/resolvers/checkbox.ts +2 -2
  70. package/src/theme/resolvers/chip.ts +1 -2
  71. package/src/theme/resolvers/iconButton.ts +4 -13
  72. package/src/theme/resolvers/input.ts +30 -14
  73. package/src/theme/resolvers/listItem.ts +2 -3
  74. package/src/theme/resolvers/multiSelect.ts +1 -2
  75. package/src/theme/resolvers/searchBar.ts +1 -2
  76. package/src/theme/resolvers/select.ts +1 -2
  77. package/src/theme/resolvers/themedPressable.ts +4 -15
  78. package/src/theme/themes/hightideThemes.ts +3 -1
  79. package/src/theme/types/components/chat.ts +6 -21
  80. package/src/theme/types/components/input.ts +3 -0
  81. package/src/theme/types/components/textarea.ts +1 -0
  82. package/src/theme/types/resolver.ts +4 -27
  83. package/src/utils/index.ts +1 -0
  84. package/src/utils/pressableInteraction.ts +7 -0
  85. package/src/components/user-interaction/MultiSelect.tsx +0 -282
  86. package/src/components/user-interaction/Select.tsx +0 -242
@@ -27,7 +27,6 @@ import type {
27
27
  import {
28
28
  createSimpleStyleResolver,
29
29
  createStyleResolver,
30
- createValueResolver,
31
30
  toPressableInteractionState,
32
31
  type ComponentThemeResolver
33
32
  } from '../../types/resolver'
@@ -57,7 +56,7 @@ export const toChatThreadHeaderThemeResolvers: ComponentThemeResolver<ChatThread
57
56
  subtitle: createSimpleStyleResolver((): ChatThreadHeaderSubtitleStyle => (
58
57
  StyleAdapterUtils.text(resolve().subtitle)
59
58
  )),
60
- avatar: createValueResolver((state: AvatarState): AvatarThemeResolvers => {
59
+ avatar: createStyleResolver((state: AvatarState): AvatarThemeResolvers => {
61
60
  const { avatarOverride } = resolve()
62
61
 
63
62
  const resolveTokens = (avatarState: AvatarState): AvatarTokens => {
@@ -89,7 +88,7 @@ export const toChatThreadHeaderThemeResolvers: ComponentThemeResolver<ChatThread
89
88
 
90
89
  return createAvatarStyleResolvers(resolveTokens, themeTokens)
91
90
  }),
92
- pressable: createValueResolver(() => {
91
+ pressable: createStyleResolver(() => {
93
92
  const { pressableOverwrites } = resolve()
94
93
 
95
94
  const resolvePressable = (pressableState: PressableState) => componentTokens.pressable({
@@ -123,7 +122,7 @@ export const toChatThreadHeaderThemeResolvers: ComponentThemeResolver<ChatThread
123
122
  ...StyleAdapterUtils.text(resolvePressable(pressableState).text),
124
123
  ...StyleAdapterUtils.text(pressableOverwrites.text = {}),
125
124
  })),
126
- icon: createValueResolver((pressableState: PressableState): PressableIconStyle => ({
125
+ icon: createStyleResolver((pressableState: PressableState): PressableIconStyle => ({
127
126
  ...StyleAdapterUtils.icon(resolvePressable(pressableState).icon),
128
127
  ...StyleAdapterUtils.icon(pressableOverwrites.icon = {}),
129
128
  })),
@@ -11,7 +11,6 @@ import type {
11
11
  } from '../types/components/checkbox'
12
12
  import {
13
13
  createStyleResolver,
14
- createValueResolver,
15
14
  type ComponentThemeResolver
16
15
  } from '../types/resolver'
17
16
 
@@ -91,13 +90,14 @@ export const toCheckboxThemeResolvers: ComponentThemeResolver<CheckboxThemeResol
91
90
  right: 0,
92
91
  bottom: 0,
93
92
  left: 0,
93
+ zIndex: 20,
94
94
  marginTop: -vertical,
95
95
  marginRight: -horizontal,
96
96
  marginBottom: -vertical,
97
97
  marginLeft: -horizontal,
98
98
  }
99
99
  }),
100
- icon: createValueResolver((state: CheckboxState): CheckboxIconStyle => (
100
+ icon: createStyleResolver((state: CheckboxState): CheckboxIconStyle => (
101
101
  StyleAdapterUtils.icon(resolve(state).icon)
102
102
  )),
103
103
  }
@@ -7,7 +7,6 @@ import type {
7
7
  } from '../types/components/chip'
8
8
  import {
9
9
  createStyleResolver,
10
- createValueResolver,
11
10
  type ComponentThemeResolver
12
11
  } from '../types/resolver'
13
12
 
@@ -32,7 +31,7 @@ export const toChipThemeResolvers: ComponentThemeResolver<ChipThemeResolvers> =
32
31
  chip: createStyleResolver((state: ChipState): ChipStyle => (
33
32
  StyleAdapterUtils.container(resolve(state).container)
34
33
  )),
35
- icon: createValueResolver((state: ChipState): ChipIconStyle => (
34
+ icon: createStyleResolver((state: ChipState): ChipIconStyle => (
36
35
  StyleAdapterUtils.icon(resolve(state).icon)
37
36
  )),
38
37
  text: createStyleResolver((state: ChipState): ChipTextStyle => (
@@ -6,7 +6,6 @@ import type {
6
6
  } from '../types/components/iconButton'
7
7
  import {
8
8
  createStyleResolver,
9
- createValueResolver,
10
9
  toPressableInteractionState,
11
10
  type ComponentThemeResolver
12
11
  } from '../types/resolver'
@@ -33,18 +32,10 @@ export const toIconButtonThemeResolvers: ComponentThemeResolver<IconButtonThemeR
33
32
  container: createStyleResolver((state: IconButtonState): IconButtonStyle => ({
34
33
  ...StyleAdapterUtils.container(resolve(state).container),
35
34
  })),
36
- stateLayer: createStyleResolver((state: IconButtonState): IconButtonStyle => {
37
- const tokens = resolve(state)
38
- return {
39
- ...StyleAdapterUtils.container(tokens.stateLayer),
40
- position: 'absolute',
41
- top: 0,
42
- right: 0,
43
- bottom: 0,
44
- left: 0,
45
- }
46
- }),
47
- icon: createValueResolver((state: IconButtonState): IconButtonIconStyle => (
35
+ stateLayer: createStyleResolver((state: IconButtonState): IconButtonStyle => (
36
+ StyleAdapterUtils.container(resolve(state).stateLayer)
37
+ )),
38
+ icon: createStyleResolver((state: IconButtonState): IconButtonIconStyle => (
48
39
  StyleAdapterUtils.icon(resolve(state).icon)
49
40
  )),
50
41
  }
@@ -7,17 +7,16 @@ import type {
7
7
  InputIconStyle,
8
8
  InputPlaceholderStyle,
9
9
  InputState,
10
+ InputStateLayerStyle,
10
11
  InputTextStyle,
11
12
  InputThemeResolvers
12
13
  } from '../types/components/input'
13
14
  import {
14
15
  createStyleResolver,
15
- createValueResolver,
16
16
  type ComponentThemeResolver
17
17
  } from '../types/resolver'
18
18
 
19
19
  import { StyleAdapterUtils } from '../adapters'
20
- import { HexColorUtils } from '../../utils/hex'
21
20
 
22
21
  const toDesignInputState = (state: InputState = {}): DesignInputState => {
23
22
  const active = new Set<InputStateValue>()
@@ -62,22 +61,39 @@ export const toInputThemeResolvers: ComponentThemeResolver<InputThemeResolvers>
62
61
  })
63
62
 
64
63
  return {
65
- container: createStyleResolver((state: InputState): InputContainerStyle => {
66
- const { container, stateLayer } = resolve(state)
67
- if(container.backgroundColor && stateLayer.backgroundColor)
68
- container.backgroundColor = HexColorUtils.blend(
69
- HexColorUtils.resolveColorToken(container.backgroundColor),
70
- HexColorUtils.resolveColorToken(stateLayer.backgroundColor)
71
- )
72
- return StyleAdapterUtils.container(container)
73
- }),
74
- text: createStyleResolver((state: InputState): InputTextStyle => (
75
- StyleAdapterUtils.text(resolve(state).text)
64
+ container: createStyleResolver((state: InputState): InputContainerStyle => (
65
+ StyleAdapterUtils.container(resolve(state).container)
76
66
  )),
67
+ stateLayer: createStyleResolver((state: InputState): InputStateLayerStyle => {
68
+ const style = resolve(state)
69
+ const stateLayer = style.stateLayer
70
+ const container = style.container
71
+ const resolvedContainerBorder = StyleAdapterUtils.borderWidth(container.border?.width)
72
+ return {
73
+ ...StyleAdapterUtils.container(stateLayer),
74
+ ...StyleAdapterUtils.position({
75
+ type: 'absolute',
76
+ zIndex: stateLayer.position?.zIndex ?? 20,
77
+ bottom: -(resolvedContainerBorder?.borderBottomWidth ?? 0),
78
+ top: -(resolvedContainerBorder?.borderTopWidth ?? 0),
79
+ left: -(resolvedContainerBorder?.borderLeftWidth ?? 0),
80
+ right: -(resolvedContainerBorder?.borderRightWidth ?? 0),
81
+ })
82
+ }
83
+ }),
84
+ text: createStyleResolver((state: InputState): InputTextStyle => {
85
+ const style = resolve(state).text
86
+ return {
87
+ ...StyleAdapterUtils.text(style),
88
+ flex: 1,
89
+ padding: 0,
90
+ margin: 0,
91
+ }
92
+ }),
77
93
  placeholder: createStyleResolver((state: InputState): InputPlaceholderStyle => (
78
94
  StyleAdapterUtils.text(resolve(state).placeholder)
79
95
  )),
80
- icon: createValueResolver((state: InputState): InputIconStyle => (
96
+ icon: createStyleResolver((state: InputState): InputIconStyle => (
81
97
  StyleAdapterUtils.icon(resolve(state).icon)
82
98
  )),
83
99
  }
@@ -21,7 +21,6 @@ import type {
21
21
  } from '../types/components/listItem'
22
22
  import {
23
23
  createStyleResolver,
24
- createValueResolver,
25
24
  toPressableInteractionState,
26
25
  type ComponentThemeResolver
27
26
  } from '../types/resolver'
@@ -61,7 +60,7 @@ const toListItemDefaultThemeResolvers: ComponentThemeResolver<ListItemDefaultThe
61
60
  titleText: createStyleResolver((state: ListItemState): ListItemTitleStyle => (
62
61
  StyleAdapterUtils.text(resolve(state).titleText)
63
62
  )),
64
- icon: createValueResolver((state: ListItemState): ListItemIconStyle => (
63
+ icon: createStyleResolver((state: ListItemState): ListItemIconStyle => (
65
64
  StyleAdapterUtils.icon(resolve(state).icon)
66
65
  )),
67
66
  }
@@ -101,7 +100,7 @@ const toListActionItemThemeResolvers: ComponentThemeResolver<ListActionItemTheme
101
100
  descriptionText: createStyleResolver((state: ListActionItemState): ListActionItemDescriptionStyle => (
102
101
  StyleAdapterUtils.text(resolve(state).descriptionText)
103
102
  )),
104
- icon: createValueResolver((state: ListActionItemState): ListActionItemIconStyle => (
103
+ icon: createStyleResolver((state: ListActionItemState): ListActionItemIconStyle => (
105
104
  StyleAdapterUtils.icon(resolve(state).icon)
106
105
  )),
107
106
  }
@@ -23,7 +23,6 @@ import type {
23
23
  import {
24
24
  createSimpleStyleResolver,
25
25
  createStyleResolver,
26
- createValueResolver,
27
26
  type ComponentThemeResolver
28
27
  } from '../types/resolver'
29
28
 
@@ -169,7 +168,7 @@ export const toMultiSelectThemeResolvers: ComponentThemeResolver<MultiSelectThem
169
168
  isHighlighted: state.isHighlighted,
170
169
  }).checkbox)
171
170
  )),
172
- checkboxIcon: createValueResolver((state: MultiSelectOptionState): MultiSelectCheckboxIconStyle => (
171
+ checkboxIcon: createStyleResolver((state: MultiSelectOptionState): MultiSelectCheckboxIconStyle => (
173
172
  StyleAdapterUtils.icon(resolve({
174
173
  color: state.color,
175
174
  isDisabled: state.isDisabled,
@@ -13,7 +13,6 @@ import type {
13
13
  } from '../types/components/searchBar'
14
14
  import {
15
15
  createStyleResolver,
16
- createValueResolver,
17
16
  type ComponentThemeResolver
18
17
  } from '../types/resolver'
19
18
 
@@ -114,7 +113,7 @@ export const toSearchBarThemeResolvers: ComponentThemeResolver<SearchBarThemeRes
114
113
  transform: [{ translateY: '-50%' }],
115
114
  }
116
115
  }),
117
- iconButtonColor: createValueResolver((state: SearchBarState): ColorPairToken => {
116
+ iconButtonColor: createStyleResolver((state: SearchBarState): ColorPairToken => {
118
117
  const iconColor = resolve(state).icon.color
119
118
 
120
119
  return {
@@ -20,7 +20,6 @@ import type {
20
20
  import {
21
21
  createSimpleStyleResolver,
22
22
  createStyleResolver,
23
- createValueResolver,
24
23
  type ComponentThemeResolver
25
24
  } from '../types/resolver'
26
25
 
@@ -128,7 +127,7 @@ export const toSelectThemeResolvers: ComponentThemeResolver<SelectThemeResolvers
128
127
  triggerText: createStyleResolver((state: SelectState): SelectTriggerTextStyle => (
129
128
  StyleAdapterUtils.text(resolve(toTriggerState(state)).triggerText)
130
129
  )),
131
- icon: createValueResolver((state: SelectState): SelectIconStyle => (
130
+ icon: createStyleResolver((state: SelectState): SelectIconStyle => (
132
131
  StyleAdapterUtils.icon(resolve(toTriggerState(state)).icon)
133
132
  )),
134
133
  overlay: createSimpleStyleResolver((): SelectOverlayStyle => ({
@@ -7,7 +7,6 @@ import type {
7
7
  } from '../types/components/themedPressable'
8
8
  import {
9
9
  createStyleResolver,
10
- createValueResolver,
11
10
  toPressableInteractionState,
12
11
  type ComponentThemeResolver
13
12
  } from '../types/resolver'
@@ -35,21 +34,11 @@ export const toThemedPressableThemeResolvers: ComponentThemeResolver<ThemedPress
35
34
  return {
36
35
  container: createStyleResolver((state: ThemedPressableState): ThemedPressableStyle => ({
37
36
  ...StyleAdapterUtils.container(resolve(state).container),
38
- alignSelf: 'flex-start',
39
37
  })),
40
- stateLayer: createStyleResolver((state: ThemedPressableState): ThemedPressableStyle => {
41
- const tokens = resolve(state)
42
-
43
- return {
44
- ...StyleAdapterUtils.container(tokens.stateLayer),
45
- position: 'absolute',
46
- top: 0,
47
- right: 0,
48
- bottom: 0,
49
- left: 0,
50
- }
51
- }),
52
- icon: createValueResolver((state: ThemedPressableState): ThemedPressableIconStyle => (
38
+ stateLayer: createStyleResolver((state: ThemedPressableState): ThemedPressableStyle => (
39
+ StyleAdapterUtils.container(resolve(state).stateLayer)
40
+ )),
41
+ icon: createStyleResolver((state: ThemedPressableState): ThemedPressableIconStyle => (
53
42
  StyleAdapterUtils.icon(resolve(state).icon)
54
43
  )),
55
44
  text: createStyleResolver((state: ThemedPressableState): ThemedPressableTextStyle => (
@@ -13,6 +13,8 @@ export const themes = {
13
13
  dark: hightideDarkTheme,
14
14
  } as const
15
15
 
16
- export type HightideThemeModes = 'dark' | 'light'
16
+ import type { HightideThemeModes } from '../../enums/hightideThemeModes'
17
+
18
+ export type { HightideThemeModes }
17
19
 
18
20
  export type ThemeMode = string | HightideThemeModes
@@ -11,13 +11,15 @@ import type {
11
11
  StyleResolverFunction
12
12
  } from '../resolver'
13
13
  import type { IconStyle } from '../../../icons'
14
- import type { ThemedPressableState } from './themedPressable'
14
+ import type { ThemedPressableState, ThemedPressableThemeResolvers } from './themedPressable'
15
15
  import type {
16
16
  AvatarState,
17
17
  AvatarThemeResolvers
18
18
  } from './avatar'
19
19
 
20
- export type ChatMessageDirection = 'incoming' | 'outgoing'
20
+ import type { ChatMessageDirection } from '../../../enums/chatMessageDirection'
21
+
22
+ export type { ChatMessageDirection }
21
23
 
22
24
  export type ChatConversationRowState = InteractionState & {
23
25
  isUnread?: boolean,
@@ -147,25 +149,8 @@ export type ChatThreadHeaderThemeResolvers = {
147
149
  AvatarThemeResolvers
148
150
  >,
149
151
  pressable: StyleResolverFunction<
150
- Record<string, never>,
151
- {
152
- container: StyleResolverFunction<
153
- PressableState,
154
- PressableContainerStyle
155
- >,
156
- stateLayer: StyleResolverFunction<
157
- PressableState,
158
- PressableStateLayerStyle
159
- >,
160
- text: StyleResolverFunction<
161
- PressableState,
162
- PressableTextStyle
163
- >,
164
- icon: StyleResolverFunction<
165
- PressableState,
166
- PressableIconStyle
167
- >,
168
- }
152
+ ThemedPressableState,
153
+ ThemedPressableThemeResolvers
169
154
  >,
170
155
  }
171
156
 
@@ -14,6 +14,8 @@ export type InputState = InteractionState & {
14
14
 
15
15
  export type InputContainerStyle = ViewStyle
16
16
 
17
+ export type InputStateLayerStyle = ViewStyle
18
+
17
19
  export type InputTextStyle = TextStyle
18
20
 
19
21
  export type InputPlaceholderStyle = TextStyle
@@ -22,6 +24,7 @@ export type InputIconStyle = IconStyle
22
24
 
23
25
  export type InputThemeResolvers = {
24
26
  container: StyleResolverFunction<InputState, InputContainerStyle>,
27
+ stateLayer: StyleResolverFunction<InputState, InputStateLayerStyle>,
25
28
  text: StyleResolverFunction<InputState, InputTextStyle>,
26
29
  placeholder: StyleResolverFunction<InputState, InputPlaceholderStyle>,
27
30
  icon: StyleResolverFunction<InputState, InputIconStyle>,
@@ -3,6 +3,7 @@ export type {
3
3
  InputIconStyle as TextareaIconStyle,
4
4
  InputPlaceholderStyle as TextareaPlaceholderStyle,
5
5
  InputState as TextareaState,
6
+ InputStateLayerStyle as TextareaStateLayerStyle,
6
7
  InputTextStyle as TextareaTextStyle,
7
8
  InputThemeResolvers as TextareaThemeResolvers
8
9
  } from './input'
@@ -5,6 +5,7 @@ import type {
5
5
  PressableState,
6
6
  PressableStateValue
7
7
  } from '@helpwave/hightide-design/component-token-resolvers'
8
+ import type { StyleProp } from 'react-native'
8
9
 
9
10
  export type InteractionState = {
10
11
  isDisabled?: boolean,
@@ -41,12 +42,12 @@ export const toPressableInteractionState = (
41
42
  }
42
43
 
43
44
  export type StyleOverwrite<TState, TStyle> =
44
- TStyle | ((state: TState, prev: TStyle) => TStyle)
45
+ StyleProp<TStyle> | ((state: TState, prev: TStyle) => StyleProp<TStyle>)
45
46
 
46
47
  export type StyleResolverFunction<TState, TStyle> = (
47
48
  props: TState,
48
49
  overwrite?: StyleOverwrite<TState, TStyle>,
49
- ) => TStyle
50
+ ) => StyleProp<TStyle>
50
51
 
51
52
  export type SimpleStyleResolver<TStyle> = StyleResolverFunction<Record<string, never>, TStyle>
52
53
 
@@ -70,7 +71,7 @@ export const createStyleResolver = <TState, TStyle>(
70
71
  return (overwrite as (state: TState, prev: TStyle) => TStyle)(props, base)
71
72
  }
72
73
 
73
- return [base, overwrite] as TStyle
74
+ return [base, overwrite]
74
75
  }
75
76
  }
76
77
 
@@ -79,27 +80,3 @@ export const createSimpleStyleResolver = <TStyle>(
79
80
  ): SimpleStyleResolver<TStyle> => {
80
81
  return createStyleResolver<Record<string, never>, TStyle>(resolve)
81
82
  }
82
-
83
- export const createValueResolver = <TState, TValue>(
84
- resolve: (props: TState) => TValue
85
- ): StyleResolverFunction<TState, TValue> => {
86
- return (props, overwrite) => {
87
- const base = resolve(props)
88
-
89
- if (overwrite === undefined) {
90
- return base
91
- }
92
-
93
- if (typeof overwrite === 'function') {
94
- return (overwrite as (state: TState, prev: TValue) => TValue)(props, base)
95
- }
96
-
97
- return overwrite
98
- }
99
- }
100
-
101
- export const createSimpleValueResolver = <TValue>(
102
- resolve: () => TValue
103
- ): SimpleStyleResolver<TValue> => {
104
- return createValueResolver<Record<string, never>, TValue>(resolve)
105
- }
@@ -1,3 +1,4 @@
1
1
  export * from './hex'
2
2
  export * from './hitBoxOverlay'
3
3
  export * from './minimumTouchTargetHitSlop'
4
+ export * from './pressableInteraction'
@@ -0,0 +1,7 @@
1
+ import type { PressableStateCallbackType } from 'react-native'
2
+
3
+ export type PressableInteractionState = PressableStateCallbackType & {
4
+ hovered?: boolean,
5
+ focused?: boolean,
6
+ focusVisible?: boolean,
7
+ }