@helpwave/hightide-native 0.5.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.
- package/package.json +3 -3
- package/src/components/card/Card.tsx +2 -4
- package/src/components/chat/ChatAttachmentMessageBubble.tsx +155 -94
- package/src/components/chat/ChatConversationList.tsx +4 -12
- package/src/components/chat/ChatConversationRow.tsx +159 -164
- package/src/components/chat/ChatDateDivider.tsx +3 -8
- package/src/components/chat/ChatMessageBubble.tsx +54 -52
- package/src/components/chat/ChatMessageComposer.tsx +4 -12
- package/src/components/chat/ChatMessageList.tsx +3 -9
- package/src/components/chat/ChatQuickReplyChip.tsx +41 -27
- package/src/components/chat/ChatSystemLine.tsx +4 -12
- package/src/components/chat/ChatThreadHeader.tsx +136 -101
- package/src/components/layout/Divider.tsx +2 -4
- package/src/components/list/ListActionItem.tsx +57 -65
- package/src/components/list/ListItem.tsx +8 -28
- package/src/components/list/ListItemTextContent.tsx +4 -2
- package/src/components/list/ListNavigationItem.tsx +55 -63
- package/src/components/user-interaction/Button.tsx +43 -49
- package/src/components/user-interaction/Checkbox.tsx +47 -48
- package/src/components/user-interaction/IconButton.tsx +40 -42
- package/src/components/user-interaction/Input.tsx +70 -67
- package/src/components/user-interaction/MultiSelect/MultiSelect.tsx +40 -0
- package/src/components/user-interaction/MultiSelect/MultiSelectContext.tsx +70 -0
- package/src/components/user-interaction/MultiSelect/MultiSelectMenu.tsx +87 -0
- package/src/components/user-interaction/MultiSelect/MultiSelectOption.tsx +87 -0
- package/src/components/user-interaction/MultiSelect/MultiSelectRoot.tsx +194 -0
- package/src/components/user-interaction/MultiSelect/MultiSelectTrigger.tsx +123 -0
- package/src/components/user-interaction/MultiSelect/index.ts +6 -0
- package/src/components/user-interaction/SearchBar.tsx +11 -17
- package/src/components/user-interaction/Select/Select.tsx +40 -0
- package/src/components/user-interaction/Select/SelectContext.tsx +69 -0
- package/src/components/user-interaction/Select/SelectMenu.tsx +87 -0
- package/src/components/user-interaction/Select/SelectOption.tsx +77 -0
- package/src/components/user-interaction/Select/SelectRoot.tsx +186 -0
- package/src/components/user-interaction/Select/SelectTrigger.tsx +92 -0
- package/src/components/user-interaction/Select/index.ts +6 -0
- package/src/components/user-interaction/Switch.tsx +46 -98
- package/src/components/user-interaction/Textarea.tsx +179 -0
- package/src/components/user-interaction/ThemedPressable.tsx +48 -49
- package/src/components/user-interaction/index.ts +1 -0
- package/src/components/visualization-and-display/Avatar.tsx +19 -17
- package/src/components/visualization-and-display/Chip.tsx +4 -12
- package/src/components/visualization-and-display/ThemedText.tsx +12 -5
- package/src/enums/chatMessageDirection.ts +18 -0
- package/src/enums/chatMessageStatus.ts +18 -0
- package/src/enums/hightideThemeModes.ts +18 -0
- package/src/enums/index.ts +7 -0
- package/src/enums/listItemContentOrder.ts +18 -0
- package/src/enums/themedTextAppearance.ts +18 -0
- package/src/enums/useMultiSelectFirstHighlightBehavior.ts +18 -0
- package/src/enums/useSelectFirstHighlightBehavior.ts +18 -0
- package/src/global-contexts/content-theme/ContentThemeProvider.tsx +9 -5
- package/src/global-contexts/theme/ThemeProvider.tsx +4 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useAnimatedStyleTransition.ts +460 -0
- package/src/hooks/useMemoizedTheme.ts +23 -0
- package/src/hooks/useMultiSelect.ts +3 -1
- package/src/hooks/useSelect.ts +3 -1
- package/src/icons/HightideIconRegistry.ts +2 -0
- package/src/theme/adapters/style-adapter-utils.ts +121 -27
- package/src/theme/resolvers/avatar.ts +48 -39
- package/src/theme/resolvers/button.ts +7 -17
- package/src/theme/resolvers/chat/attachment-message-bubble.ts +5 -6
- package/src/theme/resolvers/chat/conversation-row.ts +4 -6
- package/src/theme/resolvers/chat/message-bubble.ts +1 -2
- package/src/theme/resolvers/chat/message-composer.ts +1 -2
- package/src/theme/resolvers/chat/quick-reply-chip.ts +2 -3
- package/src/theme/resolvers/chat/system-line.ts +1 -2
- package/src/theme/resolvers/chat/thread-header.ts +3 -4
- package/src/theme/resolvers/checkbox.ts +2 -2
- package/src/theme/resolvers/chip.ts +1 -2
- package/src/theme/resolvers/iconButton.ts +4 -13
- package/src/theme/resolvers/index.ts +1 -0
- package/src/theme/resolvers/input.ts +30 -14
- package/src/theme/resolvers/listItem.ts +2 -3
- package/src/theme/resolvers/multiSelect.ts +1 -3
- package/src/theme/resolvers/searchBar.ts +1 -2
- package/src/theme/resolvers/select.ts +1 -2
- package/src/theme/resolvers/textarea.ts +14 -0
- package/src/theme/resolvers/themedPressable.ts +4 -15
- package/src/theme/themes/createHightideTheme.ts +6 -0
- package/src/theme/themes/hightideThemes.ts +3 -1
- package/src/theme/types/components/chat.ts +6 -21
- package/src/theme/types/components/hightide.ts +2 -0
- package/src/theme/types/components/index.ts +1 -0
- package/src/theme/types/components/input.ts +3 -0
- package/src/theme/types/components/textarea.ts +9 -0
- package/src/theme/types/resolver.ts +4 -27
- package/src/utils/index.ts +1 -0
- package/src/utils/pressableInteraction.ts +7 -0
- package/src/components/user-interaction/MultiSelect.tsx +0 -281
- 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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
|
@@ -135,7 +134,6 @@ export const toMultiSelectThemeResolvers: ComponentThemeResolver<MultiSelectThem
|
|
|
135
134
|
)),
|
|
136
135
|
overlay: createSimpleStyleResolver((): SelectOverlayStyle => ({
|
|
137
136
|
...StyleAdapterUtils.container(resolve().overlay),
|
|
138
|
-
flex: 1,
|
|
139
137
|
})),
|
|
140
138
|
menu: createStyleResolver((state: SelectMenuState): SelectMenuStyle => (
|
|
141
139
|
StyleAdapterUtils.container(resolve({ hasSearch: state.hasSearch }).menu)
|
|
@@ -170,7 +168,7 @@ export const toMultiSelectThemeResolvers: ComponentThemeResolver<MultiSelectThem
|
|
|
170
168
|
isHighlighted: state.isHighlighted,
|
|
171
169
|
}).checkbox)
|
|
172
170
|
)),
|
|
173
|
-
checkboxIcon:
|
|
171
|
+
checkboxIcon: createStyleResolver((state: MultiSelectOptionState): MultiSelectCheckboxIconStyle => (
|
|
174
172
|
StyleAdapterUtils.icon(resolve({
|
|
175
173
|
color: state.color,
|
|
176
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:
|
|
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:
|
|
130
|
+
icon: createStyleResolver((state: SelectState): SelectIconStyle => (
|
|
132
131
|
StyleAdapterUtils.icon(resolve(toTriggerState(state)).icon)
|
|
133
132
|
)),
|
|
134
133
|
overlay: createSimpleStyleResolver((): SelectOverlayStyle => ({
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { InputThemeResolvers } from '../types/components/input'
|
|
2
|
+
import type { ComponentThemeResolver } from '../types/resolver'
|
|
3
|
+
|
|
4
|
+
import { toInputThemeResolvers } from './input'
|
|
5
|
+
|
|
6
|
+
export const toTextareaThemeResolvers: ComponentThemeResolver<InputThemeResolvers> = (params) => (
|
|
7
|
+
toInputThemeResolvers({
|
|
8
|
+
...params,
|
|
9
|
+
componentTokens: {
|
|
10
|
+
...params.componentTokens,
|
|
11
|
+
input: params.componentTokens.textarea,
|
|
12
|
+
},
|
|
13
|
+
})
|
|
14
|
+
)
|
|
@@ -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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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 => (
|
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
import { toMultiSelectThemeResolvers } from '../resolvers/multiSelect'
|
|
30
30
|
import { toSelectThemeResolvers } from '../resolvers/select'
|
|
31
31
|
import { toSwitchThemeResolvers } from '../resolvers/switch'
|
|
32
|
+
import { toTextareaThemeResolvers } from '../resolvers/textarea'
|
|
32
33
|
import { toThemedPressableThemeResolvers } from '../resolvers/themedPressable'
|
|
33
34
|
import type { HightideThemeSemantics } from '../types/semantics'
|
|
34
35
|
import type { HightideTheme } from '../types/theme'
|
|
@@ -172,6 +173,11 @@ export const createHightideTheme = (themeTokens: ThemeTokens): HightideTheme =>
|
|
|
172
173
|
semanticTokens: hightideSemanticTokenResolvers,
|
|
173
174
|
componentTokens: componentTokenResolvers,
|
|
174
175
|
}),
|
|
176
|
+
textarea: toTextareaThemeResolvers({
|
|
177
|
+
themeTokens,
|
|
178
|
+
semanticTokens: hightideSemanticTokenResolvers,
|
|
179
|
+
componentTokens: componentTokenResolvers,
|
|
180
|
+
}),
|
|
175
181
|
searchBar: toSearchBarThemeResolvers({
|
|
176
182
|
themeTokens,
|
|
177
183
|
semanticTokens: hightideSemanticTokenResolvers,
|
|
@@ -13,6 +13,8 @@ export const themes = {
|
|
|
13
13
|
dark: hightideDarkTheme,
|
|
14
14
|
} as const
|
|
15
15
|
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -19,6 +19,7 @@ import type { ListItemThemeResolvers } from './listItem'
|
|
|
19
19
|
import type { MultiSelectThemeResolvers } from './multiSelect'
|
|
20
20
|
import type { SelectThemeResolvers } from './select'
|
|
21
21
|
import type { SwitchThemeResolvers } from './switch'
|
|
22
|
+
import type { TextareaThemeResolvers } from './textarea'
|
|
22
23
|
import type { ThemedPressableThemeResolvers } from './themedPressable'
|
|
23
24
|
|
|
24
25
|
export type IconThemeResolvers = Record<IconSize, IconTokens>
|
|
@@ -31,6 +32,7 @@ export type HightideComponentThemes = {
|
|
|
31
32
|
checkbox: CheckboxThemeResolvers,
|
|
32
33
|
switch: SwitchThemeResolvers,
|
|
33
34
|
input: InputThemeResolvers,
|
|
35
|
+
textarea: TextareaThemeResolvers,
|
|
34
36
|
searchBar: SearchBarThemeResolvers,
|
|
35
37
|
select: SelectThemeResolvers,
|
|
36
38
|
multiSelect: MultiSelectThemeResolvers,
|
|
@@ -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>,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type {
|
|
2
|
+
InputContainerStyle as TextareaContainerStyle,
|
|
3
|
+
InputIconStyle as TextareaIconStyle,
|
|
4
|
+
InputPlaceholderStyle as TextareaPlaceholderStyle,
|
|
5
|
+
InputState as TextareaState,
|
|
6
|
+
InputStateLayerStyle as TextareaStateLayerStyle,
|
|
7
|
+
InputTextStyle as TextareaTextStyle,
|
|
8
|
+
InputThemeResolvers as TextareaThemeResolvers
|
|
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]
|
|
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
|
-
}
|
package/src/utils/index.ts
CHANGED