@helpwave/hightide-native 0.1.1 → 0.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.
- package/package.json +2 -2
- package/src/components/chat/ChatAttachmentMessageBubble.tsx +3 -0
- package/src/components/chat/ChatConversationRow.tsx +127 -27
- package/src/components/chat/ChatQuickReplyChip.tsx +7 -1
- package/src/components/chat/ChatThreadHeader.tsx +88 -48
- package/src/components/list/ListActionItem.tsx +60 -11
- package/src/components/list/ListItem.tsx +47 -21
- package/src/components/list/ListItemAccessory.tsx +34 -0
- package/src/components/list/ListItemTextContent.tsx +53 -0
- package/src/components/list/ListNavigationItem.tsx +60 -16
- package/src/components/list/index.ts +2 -0
- package/src/components/user-interaction/Button.tsx +6 -15
- package/src/components/user-interaction/IconButton.tsx +5 -7
- package/src/components/user-interaction/MultiSelect.tsx +72 -46
- package/src/components/user-interaction/Select.tsx +5 -1
- package/src/components/user-interaction/ThemedPressable.tsx +9 -4
- package/src/components/visualization-and-display/Chip.tsx +12 -5
- package/src/components/visualization-and-display/ThemedIcon.tsx +12 -8
- package/src/components/visualization-and-display/ThemedText.tsx +6 -2
- package/src/global-contexts/HightideProvider.tsx +9 -17
- package/src/global-contexts/content-theme/ContentThemeContext.ts +5 -2
- package/src/global-contexts/content-theme/ContentThemeProvider.tsx +64 -10
- package/src/global-contexts/theme/ThemeProvider.tsx +9 -4
- package/src/theme/adapters/index.ts +1 -4
- package/src/theme/adapters/style-adapter-utils.ts +433 -0
- package/src/theme/resolvers/avatar.ts +9 -10
- package/src/theme/resolvers/button.ts +6 -7
- package/src/theme/resolvers/card.ts +3 -2
- package/src/theme/resolvers/chat/attachment-message-bubble.ts +25 -37
- package/src/theme/resolvers/chat/conversation-list.ts +5 -4
- package/src/theme/resolvers/chat/conversation-row.ts +114 -14
- package/src/theme/resolvers/chat/date-divider.ts +4 -4
- package/src/theme/resolvers/chat/message-bubble.ts +9 -10
- package/src/theme/resolvers/chat/message-composer.ts +5 -6
- package/src/theme/resolvers/chat/message-list.ts +3 -2
- package/src/theme/resolvers/chat/quick-reply-chip.ts +12 -20
- package/src/theme/resolvers/chat/system-line.ts +5 -6
- package/src/theme/resolvers/chat/thread-header.ts +60 -12
- package/src/theme/resolvers/checkbox.ts +6 -6
- package/src/theme/resolvers/chip.ts +9 -4
- package/src/theme/resolvers/divider.ts +3 -3
- package/src/theme/resolvers/iconButton.ts +5 -10
- package/src/theme/resolvers/input.ts +12 -7
- package/src/theme/resolvers/listItem.ts +19 -16
- package/src/theme/resolvers/multiSelect.ts +23 -16
- package/src/theme/resolvers/searchBar.ts +14 -7
- package/src/theme/resolvers/select.ts +22 -15
- package/src/theme/resolvers/switch.ts +5 -4
- package/src/theme/resolvers/themedPressable.ts +10 -5
- package/src/theme/themes/createHightideTheme.ts +13 -4
- package/src/theme/types/components/chat.ts +63 -3
- package/src/theme/types/components/chip.ts +4 -0
- package/src/theme/types/components/iconButton.ts +1 -7
- package/src/theme/types/components/listItem.ts +5 -0
- package/src/theme/types/components/multiSelect.ts +1 -0
- package/src/theme/types/components/select.ts +1 -0
- package/src/theme/types/components/themedPressable.ts +4 -0
- package/src/theme/types/layout.ts +13 -7
- package/src/theme/types/semantics.ts +2 -1
- package/src/theme/types/theme.ts +40 -12
- package/src/theme/types/typography.ts +9 -4
- package/src/theme/adapters/container-adapter.ts +0 -323
- package/src/theme/adapters/defined.ts +0 -11
- package/src/theme/adapters/icon-style-adapter.ts +0 -10
- package/src/theme/adapters/text-style-adapter.ts +0 -16
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
AvatarTokens
|
|
3
|
+
} from '@helpwave/hightide-design/component-token-resolvers'
|
|
2
4
|
|
|
3
5
|
import {
|
|
4
6
|
createAvatarStyleResolvers,
|
|
@@ -6,14 +8,17 @@ import {
|
|
|
6
8
|
toDesignAvatarSize,
|
|
7
9
|
withNumericAvatarSize
|
|
8
10
|
} from '../avatar'
|
|
9
|
-
import { toContainerStyle } from '../../adapters/container-adapter'
|
|
10
|
-
import { toTextStyle } from '../../adapters/text-style-adapter'
|
|
11
11
|
import type {
|
|
12
12
|
ChatThreadHeaderContentRowStyle,
|
|
13
13
|
ChatThreadHeaderStyle,
|
|
14
14
|
ChatThreadHeaderSubtitleStyle,
|
|
15
15
|
ChatThreadHeaderThemeResolvers,
|
|
16
|
-
ChatThreadHeaderTitleStyle
|
|
16
|
+
ChatThreadHeaderTitleStyle,
|
|
17
|
+
PressableContainerStyle,
|
|
18
|
+
PressableIconStyle,
|
|
19
|
+
PressableState,
|
|
20
|
+
PressableStateLayerStyle,
|
|
21
|
+
PressableTextStyle
|
|
17
22
|
} from '../../types/components/chat'
|
|
18
23
|
import type {
|
|
19
24
|
AvatarState,
|
|
@@ -21,10 +26,14 @@ import type {
|
|
|
21
26
|
} from '../../types/components/avatar'
|
|
22
27
|
import {
|
|
23
28
|
createSimpleStyleResolver,
|
|
29
|
+
createStyleResolver,
|
|
24
30
|
createValueResolver,
|
|
31
|
+
toPressableInteractionState,
|
|
25
32
|
type ComponentThemeResolver
|
|
26
33
|
} from '../../types/resolver'
|
|
27
34
|
|
|
35
|
+
import { StyleAdapterUtils } from '../../adapters'
|
|
36
|
+
|
|
28
37
|
export const toChatThreadHeaderThemeResolvers: ComponentThemeResolver<ChatThreadHeaderThemeResolvers> = ({
|
|
29
38
|
themeTokens,
|
|
30
39
|
semanticTokens,
|
|
@@ -37,17 +46,16 @@ export const toChatThreadHeaderThemeResolvers: ComponentThemeResolver<ChatThread
|
|
|
37
46
|
|
|
38
47
|
return {
|
|
39
48
|
container: createSimpleStyleResolver((): ChatThreadHeaderStyle => (
|
|
40
|
-
|
|
49
|
+
StyleAdapterUtils.container(resolve().container)
|
|
50
|
+
)),
|
|
51
|
+
contentRow: createSimpleStyleResolver((): ChatThreadHeaderContentRowStyle => (
|
|
52
|
+
StyleAdapterUtils.container(resolve().contentRow)
|
|
41
53
|
)),
|
|
42
|
-
contentRow: createSimpleStyleResolver((): ChatThreadHeaderContentRowStyle => ({
|
|
43
|
-
...toContainerStyle(resolve().contentRow),
|
|
44
|
-
flex: 1,
|
|
45
|
-
})),
|
|
46
54
|
title: createSimpleStyleResolver((): ChatThreadHeaderTitleStyle => (
|
|
47
|
-
|
|
55
|
+
StyleAdapterUtils.text(resolve().title)
|
|
48
56
|
)),
|
|
49
57
|
subtitle: createSimpleStyleResolver((): ChatThreadHeaderSubtitleStyle => (
|
|
50
|
-
|
|
58
|
+
StyleAdapterUtils.text(resolve().subtitle)
|
|
51
59
|
)),
|
|
52
60
|
avatar: createValueResolver((state: AvatarState): AvatarThemeResolvers => {
|
|
53
61
|
const { avatarOverride } = resolve()
|
|
@@ -71,7 +79,7 @@ export const toChatThreadHeaderThemeResolvers: ComponentThemeResolver<ChatThread
|
|
|
71
79
|
avatarOverride
|
|
72
80
|
)
|
|
73
81
|
|
|
74
|
-
const size = avatarState.size ?? state.size
|
|
82
|
+
const size = avatarState.size ?? state.size ?? avatarOverride.container?.size?.width
|
|
75
83
|
if (typeof size === 'number') {
|
|
76
84
|
return withNumericAvatarSize(tokens, size)
|
|
77
85
|
}
|
|
@@ -81,5 +89,45 @@ export const toChatThreadHeaderThemeResolvers: ComponentThemeResolver<ChatThread
|
|
|
81
89
|
|
|
82
90
|
return createAvatarStyleResolvers(resolveTokens, themeTokens)
|
|
83
91
|
}),
|
|
92
|
+
pressable: createValueResolver(() => {
|
|
93
|
+
const { pressableOverwrites } = resolve()
|
|
94
|
+
|
|
95
|
+
const resolvePressable = (pressableState: PressableState) => componentTokens.pressable({
|
|
96
|
+
themeTokens,
|
|
97
|
+
semanticResolvers: semanticTokens,
|
|
98
|
+
overrides: {
|
|
99
|
+
size: pressableOverwrites.overrides?.size,
|
|
100
|
+
color: pressableOverwrites.overrides?.color,
|
|
101
|
+
coloringStyle: pressableOverwrites.overrides?.coloringStyle,
|
|
102
|
+
coloringColorVariant: pressableOverwrites.overrides?.coloringColorVariant,
|
|
103
|
+
hasAdditionalHorizontalPadding: pressableOverwrites.overrides?.hasAdditionalHorizontalPadding,
|
|
104
|
+
},
|
|
105
|
+
state: toPressableInteractionState(pressableState),
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
container: createStyleResolver((pressableState: PressableState): PressableContainerStyle => ({
|
|
110
|
+
...StyleAdapterUtils.container(resolvePressable(pressableState).container),
|
|
111
|
+
...StyleAdapterUtils.container(pressableOverwrites.container = {}),
|
|
112
|
+
})),
|
|
113
|
+
stateLayer: createStyleResolver((pressableState: PressableState): PressableStateLayerStyle => ({
|
|
114
|
+
...StyleAdapterUtils.container(resolvePressable(pressableState).stateLayer),
|
|
115
|
+
position: 'absolute',
|
|
116
|
+
top: 0,
|
|
117
|
+
right: 0,
|
|
118
|
+
bottom: 0,
|
|
119
|
+
left: 0,
|
|
120
|
+
...StyleAdapterUtils.container(pressableOverwrites.stateLayer = {}),
|
|
121
|
+
})),
|
|
122
|
+
text: createStyleResolver((pressableState: PressableState): PressableTextStyle => ({
|
|
123
|
+
...StyleAdapterUtils.text(resolvePressable(pressableState).text),
|
|
124
|
+
...StyleAdapterUtils.text(pressableOverwrites.text = {}),
|
|
125
|
+
})),
|
|
126
|
+
icon: createValueResolver((pressableState: PressableState): PressableIconStyle => ({
|
|
127
|
+
...StyleAdapterUtils.icon(resolvePressable(pressableState).icon),
|
|
128
|
+
...StyleAdapterUtils.icon(pressableOverwrites.icon = {}),
|
|
129
|
+
})),
|
|
130
|
+
}
|
|
131
|
+
}),
|
|
84
132
|
}
|
|
85
133
|
}
|
|
@@ -2,8 +2,6 @@ import type {
|
|
|
2
2
|
CheckboxState as DesignCheckboxState,
|
|
3
3
|
CheckboxStateValue
|
|
4
4
|
} from '@helpwave/hightide-design/component-token-resolvers'
|
|
5
|
-
import { toContainerStyle } from '../adapters/container-adapter'
|
|
6
|
-
import { toIconStyle } from '../adapters/icon-style-adapter'
|
|
7
5
|
import type {
|
|
8
6
|
CheckboxIconStyle,
|
|
9
7
|
CheckboxState,
|
|
@@ -17,6 +15,8 @@ import {
|
|
|
17
15
|
type ComponentThemeResolver
|
|
18
16
|
} from '../types/resolver'
|
|
19
17
|
|
|
18
|
+
import { StyleAdapterUtils } from '../adapters'
|
|
19
|
+
|
|
20
20
|
const toDesignCheckboxState = (state: CheckboxState): DesignCheckboxState => {
|
|
21
21
|
const active = new Set<CheckboxStateValue>()
|
|
22
22
|
|
|
@@ -73,11 +73,11 @@ export const toCheckboxThemeResolvers: ComponentThemeResolver<CheckboxThemeResol
|
|
|
73
73
|
|
|
74
74
|
return {
|
|
75
75
|
container: createStyleResolver((state: CheckboxState): CheckboxStyle => (
|
|
76
|
-
|
|
76
|
+
StyleAdapterUtils.container(resolve(state).container)
|
|
77
77
|
)),
|
|
78
78
|
stateLayer: createStyleResolver((state: CheckboxState): CheckboxStateLayerStyle => {
|
|
79
79
|
const tokens = resolve(state)
|
|
80
|
-
const containerStyle =
|
|
80
|
+
const containerStyle = StyleAdapterUtils.container(tokens.container)
|
|
81
81
|
const touchTargetSize = semanticTokens.touchTargetSize({ themeTokens })
|
|
82
82
|
const width = toNumberSize(containerStyle.width as string | number | undefined)
|
|
83
83
|
const height = toNumberSize(containerStyle.height as string | number | undefined)
|
|
@@ -85,7 +85,7 @@ export const toCheckboxThemeResolvers: ComponentThemeResolver<CheckboxThemeResol
|
|
|
85
85
|
const vertical = Math.max(0, touchTargetSize - height) / 2
|
|
86
86
|
|
|
87
87
|
return {
|
|
88
|
-
...
|
|
88
|
+
...StyleAdapterUtils.container(tokens.stateLayer),
|
|
89
89
|
position: 'absolute',
|
|
90
90
|
top: 0,
|
|
91
91
|
right: 0,
|
|
@@ -98,7 +98,7 @@ export const toCheckboxThemeResolvers: ComponentThemeResolver<CheckboxThemeResol
|
|
|
98
98
|
}
|
|
99
99
|
}),
|
|
100
100
|
icon: createValueResolver((state: CheckboxState): CheckboxIconStyle => (
|
|
101
|
-
|
|
101
|
+
StyleAdapterUtils.icon(resolve(state).icon)
|
|
102
102
|
)),
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { toContainerStyle } from '../adapters/container-adapter'
|
|
2
|
-
import { toTextStyle } from '../adapters/text-style-adapter'
|
|
3
1
|
import type {
|
|
2
|
+
ChipIconStyle,
|
|
4
3
|
ChipState,
|
|
5
4
|
ChipStyle,
|
|
6
5
|
ChipTextStyle,
|
|
@@ -8,9 +7,12 @@ import type {
|
|
|
8
7
|
} from '../types/components/chip'
|
|
9
8
|
import {
|
|
10
9
|
createStyleResolver,
|
|
10
|
+
createValueResolver,
|
|
11
11
|
type ComponentThemeResolver
|
|
12
12
|
} from '../types/resolver'
|
|
13
13
|
|
|
14
|
+
import { StyleAdapterUtils } from '../adapters'
|
|
15
|
+
|
|
14
16
|
export const toChipThemeResolvers: ComponentThemeResolver<ChipThemeResolvers> = ({
|
|
15
17
|
themeTokens,
|
|
16
18
|
semanticTokens,
|
|
@@ -28,10 +30,13 @@ export const toChipThemeResolvers: ComponentThemeResolver<ChipThemeResolvers> =
|
|
|
28
30
|
|
|
29
31
|
return {
|
|
30
32
|
chip: createStyleResolver((state: ChipState): ChipStyle => (
|
|
31
|
-
|
|
33
|
+
StyleAdapterUtils.container(resolve(state).container)
|
|
34
|
+
)),
|
|
35
|
+
icon: createValueResolver((state: ChipState): ChipIconStyle => (
|
|
36
|
+
StyleAdapterUtils.icon(resolve(state).icon)
|
|
32
37
|
)),
|
|
33
38
|
text: createStyleResolver((state: ChipState): ChipTextStyle => (
|
|
34
|
-
|
|
39
|
+
StyleAdapterUtils.text(resolve(state).text)
|
|
35
40
|
)),
|
|
36
41
|
}
|
|
37
42
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { toContainerStyle } from '../adapters/container-adapter'
|
|
2
1
|
import type {
|
|
3
2
|
DividerState,
|
|
4
3
|
DividerStyle,
|
|
@@ -9,6 +8,8 @@ import {
|
|
|
9
8
|
type ComponentThemeResolver
|
|
10
9
|
} from '../types/resolver'
|
|
11
10
|
|
|
11
|
+
import { StyleAdapterUtils } from '../adapters'
|
|
12
|
+
|
|
12
13
|
export const toDividerThemeResolvers: ComponentThemeResolver<DividerThemeResolvers> = ({
|
|
13
14
|
themeTokens,
|
|
14
15
|
semanticTokens,
|
|
@@ -27,8 +28,7 @@ export const toDividerThemeResolvers: ComponentThemeResolver<DividerThemeResolve
|
|
|
27
28
|
|
|
28
29
|
return {
|
|
29
30
|
container: createStyleResolver((state: DividerState): DividerStyle => ({
|
|
30
|
-
...
|
|
31
|
-
alignSelf: 'stretch',
|
|
31
|
+
...StyleAdapterUtils.container(resolve(state)),
|
|
32
32
|
})),
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import { toContainerStyle } from '../adapters/container-adapter'
|
|
2
|
-
import { toIconStyle } from '../adapters/icon-style-adapter'
|
|
3
|
-
import { toTextStyle } from '../adapters/text-style-adapter'
|
|
4
1
|
import type {
|
|
5
2
|
IconButtonIconStyle,
|
|
6
3
|
IconButtonState,
|
|
7
4
|
IconButtonStyle,
|
|
8
|
-
IconButtonTextStyle,
|
|
9
5
|
IconButtonThemeResolvers
|
|
10
6
|
} from '../types/components/iconButton'
|
|
11
7
|
import {
|
|
@@ -15,6 +11,8 @@ import {
|
|
|
15
11
|
type ComponentThemeResolver
|
|
16
12
|
} from '../types/resolver'
|
|
17
13
|
|
|
14
|
+
import { StyleAdapterUtils } from '../adapters'
|
|
15
|
+
|
|
18
16
|
export const toIconButtonThemeResolvers: ComponentThemeResolver<IconButtonThemeResolvers> = ({
|
|
19
17
|
themeTokens,
|
|
20
18
|
semanticTokens,
|
|
@@ -33,12 +31,12 @@ export const toIconButtonThemeResolvers: ComponentThemeResolver<IconButtonThemeR
|
|
|
33
31
|
|
|
34
32
|
return {
|
|
35
33
|
container: createStyleResolver((state: IconButtonState): IconButtonStyle => ({
|
|
36
|
-
...
|
|
34
|
+
...StyleAdapterUtils.container(resolve(state).container),
|
|
37
35
|
})),
|
|
38
36
|
stateLayer: createStyleResolver((state: IconButtonState): IconButtonStyle => {
|
|
39
37
|
const tokens = resolve(state)
|
|
40
38
|
return {
|
|
41
|
-
...
|
|
39
|
+
...StyleAdapterUtils.container(tokens.stateLayer),
|
|
42
40
|
position: 'absolute',
|
|
43
41
|
top: 0,
|
|
44
42
|
right: 0,
|
|
@@ -47,10 +45,7 @@ export const toIconButtonThemeResolvers: ComponentThemeResolver<IconButtonThemeR
|
|
|
47
45
|
}
|
|
48
46
|
}),
|
|
49
47
|
icon: createValueResolver((state: IconButtonState): IconButtonIconStyle => (
|
|
50
|
-
|
|
51
|
-
)),
|
|
52
|
-
text: createStyleResolver((state: IconButtonState): IconButtonTextStyle => (
|
|
53
|
-
toTextStyle(resolve(state).text)
|
|
48
|
+
StyleAdapterUtils.icon(resolve(state).icon)
|
|
54
49
|
)),
|
|
55
50
|
}
|
|
56
51
|
}
|
|
@@ -2,9 +2,6 @@ import type {
|
|
|
2
2
|
InputState as DesignInputState,
|
|
3
3
|
InputStateValue
|
|
4
4
|
} from '@helpwave/hightide-design/component-token-resolvers'
|
|
5
|
-
import { toContainerStyleWithStateLayer } from '../adapters/container-adapter'
|
|
6
|
-
import { toIconStyle } from '../adapters/icon-style-adapter'
|
|
7
|
-
import { toTextStyle } from '../adapters/text-style-adapter'
|
|
8
5
|
import type {
|
|
9
6
|
InputContainerStyle,
|
|
10
7
|
InputIconStyle,
|
|
@@ -19,6 +16,9 @@ import {
|
|
|
19
16
|
type ComponentThemeResolver
|
|
20
17
|
} from '../types/resolver'
|
|
21
18
|
|
|
19
|
+
import { StyleAdapterUtils } from '../adapters'
|
|
20
|
+
import { HexColorUtils } from '@helpwave/hightide-design/utils'
|
|
21
|
+
|
|
22
22
|
const toDesignInputState = (state: InputState = {}): DesignInputState => {
|
|
23
23
|
const active = new Set<InputStateValue>()
|
|
24
24
|
|
|
@@ -64,16 +64,21 @@ export const toInputThemeResolvers: ComponentThemeResolver<InputThemeResolvers>
|
|
|
64
64
|
return {
|
|
65
65
|
container: createStyleResolver((state: InputState): InputContainerStyle => {
|
|
66
66
|
const { container, stateLayer } = resolve(state)
|
|
67
|
-
|
|
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)
|
|
68
73
|
}),
|
|
69
74
|
text: createStyleResolver((state: InputState): InputTextStyle => (
|
|
70
|
-
|
|
75
|
+
StyleAdapterUtils.text(resolve(state).text)
|
|
71
76
|
)),
|
|
72
77
|
placeholder: createStyleResolver((state: InputState): InputPlaceholderStyle => (
|
|
73
|
-
|
|
78
|
+
StyleAdapterUtils.text(resolve(state).placeholder)
|
|
74
79
|
)),
|
|
75
80
|
icon: createValueResolver((state: InputState): InputIconStyle => (
|
|
76
|
-
|
|
81
|
+
StyleAdapterUtils.icon(resolve(state).icon)
|
|
77
82
|
)),
|
|
78
83
|
}
|
|
79
84
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { toContainerStyle } from '../adapters/container-adapter'
|
|
2
|
-
import { toIconStyle } from '../adapters/icon-style-adapter'
|
|
3
|
-
import { toTextStyle } from '../adapters/text-style-adapter'
|
|
4
1
|
import type {
|
|
5
2
|
ListActionItemContentStyle,
|
|
3
|
+
ListActionItemDescriptionStyle,
|
|
6
4
|
ListActionItemIconStyle,
|
|
7
5
|
ListActionItemLeadingItemContainerStyle,
|
|
8
6
|
ListActionItemState,
|
|
@@ -28,6 +26,8 @@ import {
|
|
|
28
26
|
type ComponentThemeResolver
|
|
29
27
|
} from '../types/resolver'
|
|
30
28
|
|
|
29
|
+
import { StyleAdapterUtils } from '../adapters'
|
|
30
|
+
|
|
31
31
|
const toListItemDefaultThemeResolvers: ComponentThemeResolver<ListItemDefaultThemeResolvers> = ({
|
|
32
32
|
themeTokens,
|
|
33
33
|
semanticTokens,
|
|
@@ -43,26 +43,26 @@ const toListItemDefaultThemeResolvers: ComponentThemeResolver<ListItemDefaultThe
|
|
|
43
43
|
|
|
44
44
|
return {
|
|
45
45
|
container: createStyleResolver((state: ListItemState): ListItemStyle => (
|
|
46
|
-
|
|
46
|
+
StyleAdapterUtils.container(resolve(state).container)
|
|
47
47
|
)),
|
|
48
48
|
leadingItemContainer: createStyleResolver((state: ListItemState): ListItemLeadingItemContainerStyle => (
|
|
49
|
-
|
|
49
|
+
StyleAdapterUtils.container(resolve(state).leadingItemContainer)
|
|
50
50
|
)),
|
|
51
51
|
content: createStyleResolver((state: ListItemState): ListItemContentStyle => ({
|
|
52
|
-
...
|
|
52
|
+
...StyleAdapterUtils.container(resolve(state).content),
|
|
53
53
|
flex: 1,
|
|
54
54
|
})),
|
|
55
55
|
trailingItemContainer: createStyleResolver((state: ListItemState): ListItemTrailingItemContainerStyle => (
|
|
56
|
-
|
|
56
|
+
StyleAdapterUtils.container(resolve(state).trailingItemContainer)
|
|
57
57
|
)),
|
|
58
58
|
descriptionText: createStyleResolver((state: ListItemState): ListItemDescriptionStyle => (
|
|
59
|
-
|
|
59
|
+
StyleAdapterUtils.text(resolve(state).descriptionText)
|
|
60
60
|
)),
|
|
61
61
|
titleText: createStyleResolver((state: ListItemState): ListItemTitleStyle => (
|
|
62
|
-
|
|
62
|
+
StyleAdapterUtils.text(resolve(state).titleText)
|
|
63
63
|
)),
|
|
64
64
|
icon: createValueResolver((state: ListItemState): ListItemIconStyle => (
|
|
65
|
-
|
|
65
|
+
StyleAdapterUtils.icon(resolve(state).icon)
|
|
66
66
|
)),
|
|
67
67
|
}
|
|
68
68
|
}
|
|
@@ -83,23 +83,26 @@ const toListActionItemThemeResolvers: ComponentThemeResolver<ListActionItemTheme
|
|
|
83
83
|
|
|
84
84
|
return {
|
|
85
85
|
container: createStyleResolver((state: ListActionItemState): ListActionItemStyle => (
|
|
86
|
-
|
|
86
|
+
StyleAdapterUtils.container(resolve(state).container)
|
|
87
87
|
)),
|
|
88
88
|
leadingItemContainer: createStyleResolver((state: ListActionItemState): ListActionItemLeadingItemContainerStyle => (
|
|
89
|
-
|
|
89
|
+
StyleAdapterUtils.container(resolve(state).leadingItemContainer)
|
|
90
90
|
)),
|
|
91
91
|
content: createStyleResolver((state: ListActionItemState): ListActionItemContentStyle => ({
|
|
92
|
-
...
|
|
92
|
+
...StyleAdapterUtils.container(resolve(state).content),
|
|
93
93
|
flex: 1,
|
|
94
94
|
})),
|
|
95
95
|
trailingItemContainer: createStyleResolver((state: ListActionItemState): ListActionItemTrailingItemContainerStyle => (
|
|
96
|
-
|
|
96
|
+
StyleAdapterUtils.container(resolve(state).trailingItemContainer)
|
|
97
97
|
)),
|
|
98
98
|
titleText: createStyleResolver((state: ListActionItemState): ListActionItemTitleStyle => (
|
|
99
|
-
|
|
99
|
+
StyleAdapterUtils.text(resolve(state).titleText)
|
|
100
|
+
)),
|
|
101
|
+
descriptionText: createStyleResolver((state: ListActionItemState): ListActionItemDescriptionStyle => (
|
|
102
|
+
StyleAdapterUtils.text(resolve(state).descriptionText)
|
|
100
103
|
)),
|
|
101
104
|
icon: createValueResolver((state: ListActionItemState): ListActionItemIconStyle => (
|
|
102
|
-
|
|
105
|
+
StyleAdapterUtils.icon(resolve(state).icon)
|
|
103
106
|
)),
|
|
104
107
|
}
|
|
105
108
|
}
|
|
@@ -2,9 +2,6 @@ import type {
|
|
|
2
2
|
MultiSelectState as DesignMultiSelectState,
|
|
3
3
|
MultiSelectStateValue
|
|
4
4
|
} from '@helpwave/hightide-design/component-token-resolvers'
|
|
5
|
-
import { toContainerStyle, toContainerStyleWithStateLayer } from '../adapters/container-adapter'
|
|
6
|
-
import { toIconStyle } from '../adapters/icon-style-adapter'
|
|
7
|
-
import { toTextStyle } from '../adapters/text-style-adapter'
|
|
8
5
|
import type {
|
|
9
6
|
MultiSelectCheckboxIconStyle,
|
|
10
7
|
MultiSelectCheckboxStyle,
|
|
@@ -30,6 +27,8 @@ import {
|
|
|
30
27
|
type ComponentThemeResolver
|
|
31
28
|
} from '../types/resolver'
|
|
32
29
|
|
|
30
|
+
import { StyleAdapterUtils } from '../adapters'
|
|
31
|
+
|
|
33
32
|
type MultiSelectResolveState = {
|
|
34
33
|
color?: MultiSelectState['color'],
|
|
35
34
|
isDisabled?: boolean,
|
|
@@ -119,25 +118,33 @@ export const toMultiSelectThemeResolvers: ComponentThemeResolver<MultiSelectThem
|
|
|
119
118
|
})
|
|
120
119
|
|
|
121
120
|
return {
|
|
122
|
-
trigger: createStyleResolver((state: MultiSelectState): MultiSelectTriggerStyle => {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}),
|
|
121
|
+
trigger: createStyleResolver((state: MultiSelectState): MultiSelectTriggerStyle => ({
|
|
122
|
+
...StyleAdapterUtils.container(resolve(toTriggerState(state)).trigger),
|
|
123
|
+
overflow: 'hidden',
|
|
124
|
+
})),
|
|
125
|
+
stateLayer: createStyleResolver((state: MultiSelectState): MultiSelectTriggerStyle => ({
|
|
126
|
+
...StyleAdapterUtils.container(resolve(toTriggerState(state)).stateLayer),
|
|
127
|
+
position: 'absolute',
|
|
128
|
+
top: 0,
|
|
129
|
+
right: 0,
|
|
130
|
+
bottom: 0,
|
|
131
|
+
left: 0,
|
|
132
|
+
})),
|
|
126
133
|
triggerText: createStyleResolver((state: MultiSelectState): SelectTriggerTextStyle => (
|
|
127
|
-
|
|
134
|
+
StyleAdapterUtils.text(resolve(toTriggerState(state)).triggerText)
|
|
128
135
|
)),
|
|
129
136
|
overlay: createSimpleStyleResolver((): SelectOverlayStyle => ({
|
|
130
|
-
...
|
|
137
|
+
...StyleAdapterUtils.container(resolve().overlay),
|
|
131
138
|
flex: 1,
|
|
132
139
|
})),
|
|
133
140
|
menu: createStyleResolver((state: SelectMenuState): SelectMenuStyle => (
|
|
134
|
-
|
|
141
|
+
StyleAdapterUtils.container(resolve({ hasSearch: state.hasSearch }).menu)
|
|
135
142
|
)),
|
|
136
143
|
header: createSimpleStyleResolver((): SelectHeaderStyle => (
|
|
137
|
-
|
|
144
|
+
StyleAdapterUtils.container(resolve().header)
|
|
138
145
|
)),
|
|
139
146
|
option: createStyleResolver((state: MultiSelectOptionState): MultiSelectOptionStyle => (
|
|
140
|
-
|
|
147
|
+
StyleAdapterUtils.container(resolve({
|
|
141
148
|
color: state.color,
|
|
142
149
|
isDisabled: state.isDisabled,
|
|
143
150
|
isSelected: state.isSelected,
|
|
@@ -145,7 +152,7 @@ export const toMultiSelectThemeResolvers: ComponentThemeResolver<MultiSelectThem
|
|
|
145
152
|
}).option)
|
|
146
153
|
)),
|
|
147
154
|
optionText: createStyleResolver((state: MultiSelectOptionState): MultiSelectOptionTextStyle => (
|
|
148
|
-
|
|
155
|
+
StyleAdapterUtils.text(resolve({
|
|
149
156
|
color: state.color,
|
|
150
157
|
isDisabled: state.isDisabled,
|
|
151
158
|
isSelected: state.isSelected,
|
|
@@ -153,10 +160,10 @@ export const toMultiSelectThemeResolvers: ComponentThemeResolver<MultiSelectThem
|
|
|
153
160
|
}).optionText)
|
|
154
161
|
)),
|
|
155
162
|
emptyText: createSimpleStyleResolver((): SelectEmptyTextStyle => (
|
|
156
|
-
|
|
163
|
+
StyleAdapterUtils.text(resolve().emptyText)
|
|
157
164
|
)),
|
|
158
165
|
checkbox: createStyleResolver((state: MultiSelectOptionState): MultiSelectCheckboxStyle => (
|
|
159
|
-
|
|
166
|
+
StyleAdapterUtils.container(resolve({
|
|
160
167
|
color: state.color,
|
|
161
168
|
isDisabled: state.isDisabled,
|
|
162
169
|
isSelected: state.isSelected,
|
|
@@ -164,7 +171,7 @@ export const toMultiSelectThemeResolvers: ComponentThemeResolver<MultiSelectThem
|
|
|
164
171
|
}).checkbox)
|
|
165
172
|
)),
|
|
166
173
|
checkboxIcon: createValueResolver((state: MultiSelectOptionState): MultiSelectCheckboxIconStyle => (
|
|
167
|
-
|
|
174
|
+
StyleAdapterUtils.icon(resolve({
|
|
168
175
|
color: state.color,
|
|
169
176
|
isDisabled: state.isDisabled,
|
|
170
177
|
isSelected: state.isSelected,
|
|
@@ -3,8 +3,6 @@ import type {
|
|
|
3
3
|
InputStateValue
|
|
4
4
|
} from '@helpwave/hightide-design/component-token-resolvers'
|
|
5
5
|
import type { ColorPairToken } from '@helpwave/hightide-design/theme-tokens'
|
|
6
|
-
import { toContainerStyle, toContainerStyleWithStateLayer } from '../adapters/container-adapter'
|
|
7
|
-
import { toTextStyle } from '../adapters/text-style-adapter'
|
|
8
6
|
import type {
|
|
9
7
|
SearchBarContainerStyle,
|
|
10
8
|
SearchBarIconButtonStyle,
|
|
@@ -19,6 +17,9 @@ import {
|
|
|
19
17
|
type ComponentThemeResolver
|
|
20
18
|
} from '../types/resolver'
|
|
21
19
|
|
|
20
|
+
import { StyleAdapterUtils } from '../adapters'
|
|
21
|
+
import { HexColorUtils } from '@helpwave/hightide-design/utils'
|
|
22
|
+
|
|
22
23
|
const toDesignSearchBarState = (state: SearchBarState = {}): DesignInputState => {
|
|
23
24
|
const active = new Set<InputStateValue>()
|
|
24
25
|
|
|
@@ -63,7 +64,7 @@ export const toSearchBarThemeResolvers: ComponentThemeResolver<SearchBarThemeRes
|
|
|
63
64
|
|
|
64
65
|
return {
|
|
65
66
|
container: createStyleResolver((state: SearchBarState): SearchBarContainerStyle => ({
|
|
66
|
-
...
|
|
67
|
+
...StyleAdapterUtils.container(resolve(state).container),
|
|
67
68
|
position: 'relative',
|
|
68
69
|
justifyContent: 'center',
|
|
69
70
|
})),
|
|
@@ -71,7 +72,13 @@ export const toSearchBarThemeResolvers: ComponentThemeResolver<SearchBarThemeRes
|
|
|
71
72
|
const tokens = resolve(state)
|
|
72
73
|
const { container, stateLayer, text } = tokens.input
|
|
73
74
|
// TODO remove this computation with a better solution
|
|
74
|
-
|
|
75
|
+
if(container.backgroundColor && stateLayer.backgroundColor)
|
|
76
|
+
container.backgroundColor = HexColorUtils.blend(
|
|
77
|
+
HexColorUtils.resolveColorToken(container.backgroundColor),
|
|
78
|
+
HexColorUtils.resolveColorToken(stateLayer.backgroundColor)
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
const base = StyleAdapterUtils.container(container)
|
|
75
82
|
const horizontalPadding = typeof base.paddingLeft === 'number'
|
|
76
83
|
? base.paddingLeft
|
|
77
84
|
: typeof base.paddingRight === 'number'
|
|
@@ -87,17 +94,17 @@ export const toSearchBarThemeResolvers: ComponentThemeResolver<SearchBarThemeRes
|
|
|
87
94
|
|
|
88
95
|
return {
|
|
89
96
|
...base,
|
|
90
|
-
...
|
|
97
|
+
...StyleAdapterUtils.text(text),
|
|
91
98
|
paddingLeft: horizontalPadding,
|
|
92
99
|
paddingRight: horizontalPadding + trailingInset,
|
|
93
100
|
}
|
|
94
101
|
}),
|
|
95
102
|
placeholder: createStyleResolver((state: SearchBarState): SearchBarPlaceholderStyle => (
|
|
96
|
-
|
|
103
|
+
StyleAdapterUtils.text(resolve(state).input.placeholder)
|
|
97
104
|
)),
|
|
98
105
|
iconButton: createStyleResolver((state: SearchBarState): SearchBarIconButtonStyle => {
|
|
99
106
|
const { iconButton } = resolve(state)
|
|
100
|
-
const style =
|
|
107
|
+
const style = StyleAdapterUtils.container(iconButton)
|
|
101
108
|
|
|
102
109
|
return {
|
|
103
110
|
...style,
|
|
@@ -2,9 +2,6 @@ import type {
|
|
|
2
2
|
SelectState as DesignSelectState,
|
|
3
3
|
SelectStateValue
|
|
4
4
|
} from '@helpwave/hightide-design/component-token-resolvers'
|
|
5
|
-
import { toContainerStyle, toContainerStyleWithStateLayer } from '../adapters/container-adapter'
|
|
6
|
-
import { toIconStyle } from '../adapters/icon-style-adapter'
|
|
7
|
-
import { toTextStyle } from '../adapters/text-style-adapter'
|
|
8
5
|
import type {
|
|
9
6
|
SelectIconStyle,
|
|
10
7
|
SelectMenuStyle,
|
|
@@ -27,6 +24,8 @@ import {
|
|
|
27
24
|
type ComponentThemeResolver
|
|
28
25
|
} from '../types/resolver'
|
|
29
26
|
|
|
27
|
+
import { StyleAdapterUtils } from '../adapters'
|
|
28
|
+
|
|
30
29
|
type SelectResolveState = {
|
|
31
30
|
color?: SelectState['color'],
|
|
32
31
|
isDisabled?: boolean,
|
|
@@ -114,28 +113,36 @@ export const toSelectThemeResolvers: ComponentThemeResolver<SelectThemeResolvers
|
|
|
114
113
|
})
|
|
115
114
|
|
|
116
115
|
return {
|
|
117
|
-
trigger: createStyleResolver((state: SelectState): SelectTriggerStyle => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}),
|
|
116
|
+
trigger: createStyleResolver((state: SelectState): SelectTriggerStyle => ({
|
|
117
|
+
...StyleAdapterUtils.container(resolve(toTriggerState(state)).trigger),
|
|
118
|
+
overflow: 'hidden',
|
|
119
|
+
})),
|
|
120
|
+
stateLayer: createStyleResolver((state: SelectState): SelectTriggerStyle => ({
|
|
121
|
+
...StyleAdapterUtils.container(resolve(toTriggerState(state)).stateLayer),
|
|
122
|
+
position: 'absolute',
|
|
123
|
+
top: 0,
|
|
124
|
+
right: 0,
|
|
125
|
+
bottom: 0,
|
|
126
|
+
left: 0,
|
|
127
|
+
})),
|
|
121
128
|
triggerText: createStyleResolver((state: SelectState): SelectTriggerTextStyle => (
|
|
122
|
-
|
|
129
|
+
StyleAdapterUtils.text(resolve(toTriggerState(state)).triggerText)
|
|
123
130
|
)),
|
|
124
131
|
icon: createValueResolver((state: SelectState): SelectIconStyle => (
|
|
125
|
-
|
|
132
|
+
StyleAdapterUtils.icon(resolve(toTriggerState(state)).icon)
|
|
126
133
|
)),
|
|
127
134
|
overlay: createSimpleStyleResolver((): SelectOverlayStyle => ({
|
|
128
|
-
...
|
|
135
|
+
...StyleAdapterUtils.container(resolve().overlay),
|
|
129
136
|
flex: 1,
|
|
130
137
|
})),
|
|
131
138
|
menu: createStyleResolver((state: SelectMenuState): SelectMenuStyle => (
|
|
132
|
-
|
|
139
|
+
StyleAdapterUtils.container(resolve({ hasSearch: state.hasSearch }).menu)
|
|
133
140
|
)),
|
|
134
141
|
header: createSimpleStyleResolver((): SelectHeaderStyle => (
|
|
135
|
-
|
|
142
|
+
StyleAdapterUtils.container(resolve().header)
|
|
136
143
|
)),
|
|
137
144
|
option: createStyleResolver((state: SelectOptionState): SelectOptionStyle => (
|
|
138
|
-
|
|
145
|
+
StyleAdapterUtils.container(resolve({
|
|
139
146
|
color: state.color,
|
|
140
147
|
isDisabled: state.isDisabled,
|
|
141
148
|
isSelected: state.isSelected,
|
|
@@ -143,7 +150,7 @@ export const toSelectThemeResolvers: ComponentThemeResolver<SelectThemeResolvers
|
|
|
143
150
|
}).option)
|
|
144
151
|
)),
|
|
145
152
|
optionText: createStyleResolver((state: SelectOptionState): SelectOptionTextStyle => (
|
|
146
|
-
|
|
153
|
+
StyleAdapterUtils.text(resolve({
|
|
147
154
|
color: state.color,
|
|
148
155
|
isDisabled: state.isDisabled,
|
|
149
156
|
isSelected: state.isSelected,
|
|
@@ -151,7 +158,7 @@ export const toSelectThemeResolvers: ComponentThemeResolver<SelectThemeResolvers
|
|
|
151
158
|
}).optionText)
|
|
152
159
|
)),
|
|
153
160
|
emptyText: createSimpleStyleResolver((): SelectEmptyTextStyle => (
|
|
154
|
-
|
|
161
|
+
StyleAdapterUtils.text(resolve().emptyText)
|
|
155
162
|
)),
|
|
156
163
|
}
|
|
157
164
|
}
|