@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.
- package/package.json +3 -3
- package/src/components/card/Card.tsx +2 -4
- package/src/components/chat/ChatAttachmentMessageBubble.tsx +152 -90
- 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 +51 -45
- 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 +69 -80
- 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 +165 -12
- package/src/components/user-interaction/ThemedPressable.tsx +48 -49
- 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/input.ts +30 -14
- package/src/theme/resolvers/listItem.ts +2 -3
- package/src/theme/resolvers/multiSelect.ts +1 -2
- package/src/theme/resolvers/searchBar.ts +1 -2
- package/src/theme/resolvers/select.ts +1 -2
- package/src/theme/resolvers/themedPressable.ts +4 -15
- package/src/theme/themes/hightideThemes.ts +3 -1
- package/src/theme/types/components/chat.ts +6 -21
- package/src/theme/types/components/input.ts +3 -0
- package/src/theme/types/components/textarea.ts +1 -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 -282
- package/src/components/user-interaction/Select.tsx +0 -242
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
PixelRatio,
|
|
2
3
|
StyleSheet,
|
|
3
4
|
type StyleProp,
|
|
4
5
|
type TextStyle,
|
|
@@ -10,14 +11,16 @@ import type {
|
|
|
10
11
|
BorderRadiusToken,
|
|
11
12
|
BorderToken,
|
|
12
13
|
ContainerTokens,
|
|
13
|
-
|
|
14
|
+
CrossAxisAlignmentToken,
|
|
14
15
|
CrossAxisLineAligmentToken,
|
|
15
16
|
IconTokens,
|
|
16
17
|
LayoutDirectionToken,
|
|
17
18
|
MainAxisAligmentToken,
|
|
18
19
|
MarginToken,
|
|
19
20
|
PaddingToken,
|
|
20
|
-
|
|
21
|
+
PositioningToken,
|
|
22
|
+
TextStyleTokens,
|
|
23
|
+
TransformTokens
|
|
21
24
|
} from '@helpwave/hightide-design/component-token-resolvers'
|
|
22
25
|
import {
|
|
23
26
|
defaultWritingMode,
|
|
@@ -25,6 +28,8 @@ import {
|
|
|
25
28
|
} from '@helpwave/hightide-design/component-token-resolvers'
|
|
26
29
|
import type { ShadowToken } from '@helpwave/hightide-design/theme-tokens'
|
|
27
30
|
import type { IconStyle } from '../../icons'
|
|
31
|
+
import type { SingleOrArray } from '@helpwave/hightide-utils/utils'
|
|
32
|
+
import { ArrayUtil } from '@helpwave/hightide-utils/utils'
|
|
28
33
|
|
|
29
34
|
function getStyleProperty<
|
|
30
35
|
T extends ViewStyle,
|
|
@@ -87,19 +92,19 @@ const toFlexStartEnd = (
|
|
|
87
92
|
}
|
|
88
93
|
|
|
89
94
|
const shadowStyleAdapter = (
|
|
90
|
-
shadow?: ShadowToken
|
|
95
|
+
shadow?: SingleOrArray<ShadowToken>
|
|
91
96
|
): ViewStyle['boxShadow'] | undefined => {
|
|
92
97
|
if (shadow === undefined) {
|
|
93
98
|
return undefined
|
|
94
99
|
}
|
|
95
100
|
|
|
96
|
-
return
|
|
101
|
+
return ArrayUtil.resolveSingleOrArray(shadow).map((shadow) => ({
|
|
97
102
|
color: shadow.color,
|
|
98
103
|
offsetX: shadow.x,
|
|
99
104
|
offsetY: shadow.y,
|
|
100
105
|
blurRadius: shadow.blur,
|
|
101
106
|
spreadDistance: shadow.spread,
|
|
102
|
-
}
|
|
107
|
+
}))
|
|
103
108
|
}
|
|
104
109
|
|
|
105
110
|
const flexDirectionStyleAdapter = (
|
|
@@ -127,7 +132,7 @@ const justifyContentStyleAdapter = (
|
|
|
127
132
|
}
|
|
128
133
|
|
|
129
134
|
const alignItemsStyleAdapter = (
|
|
130
|
-
alignment?:
|
|
135
|
+
alignment?: CrossAxisAlignmentToken
|
|
131
136
|
): ViewStyle['alignItems'] | undefined => {
|
|
132
137
|
if (alignment === undefined) {
|
|
133
138
|
return undefined
|
|
@@ -141,7 +146,7 @@ const alignItemsStyleAdapter = (
|
|
|
141
146
|
}
|
|
142
147
|
|
|
143
148
|
const alignSelfStyleAdapter = (
|
|
144
|
-
alignment?:
|
|
149
|
+
alignment?: CrossAxisAlignmentToken
|
|
145
150
|
): ViewStyle['alignSelf'] | undefined => {
|
|
146
151
|
if (alignment === undefined) {
|
|
147
152
|
return undefined
|
|
@@ -194,12 +199,12 @@ const borderRadiusStyleAdapter = (
|
|
|
194
199
|
}
|
|
195
200
|
}
|
|
196
201
|
|
|
197
|
-
return {
|
|
202
|
+
return defined({
|
|
198
203
|
borderTopLeftRadius: borderRadius.topLeft,
|
|
199
204
|
borderTopRightRadius: borderRadius.topRight,
|
|
200
205
|
borderBottomLeftRadius: borderRadius.bottomLeft,
|
|
201
206
|
borderBottomRightRadius: borderRadius.bottomRight,
|
|
202
|
-
}
|
|
207
|
+
})
|
|
203
208
|
}
|
|
204
209
|
|
|
205
210
|
const borderWidthStyleAdapter = (
|
|
@@ -216,12 +221,12 @@ const borderWidthStyleAdapter = (
|
|
|
216
221
|
|
|
217
222
|
const sides = resolveDirectionalTokens([width], defaultWritingMode)
|
|
218
223
|
|
|
219
|
-
return {
|
|
224
|
+
return defined({
|
|
220
225
|
borderTopWidth: sides.top,
|
|
221
226
|
borderRightWidth: sides.right,
|
|
222
227
|
borderBottomWidth: sides.bottom,
|
|
223
228
|
borderLeftWidth: sides.left,
|
|
224
|
-
}
|
|
229
|
+
})
|
|
225
230
|
}
|
|
226
231
|
|
|
227
232
|
const borderColorStyleAdapter = (
|
|
@@ -238,12 +243,12 @@ const borderColorStyleAdapter = (
|
|
|
238
243
|
|
|
239
244
|
const sides = resolveDirectionalTokens([color], defaultWritingMode)
|
|
240
245
|
|
|
241
|
-
return {
|
|
246
|
+
return defined({
|
|
242
247
|
borderTopColor: sides.top,
|
|
243
248
|
borderRightColor: sides.right,
|
|
244
249
|
borderBottomColor: sides.bottom,
|
|
245
250
|
borderLeftColor: sides.left,
|
|
246
|
-
}
|
|
251
|
+
})
|
|
247
252
|
}
|
|
248
253
|
|
|
249
254
|
const borderStyleAdapter = (
|
|
@@ -263,11 +268,11 @@ const borderStyleAdapter = (
|
|
|
263
268
|
return undefined
|
|
264
269
|
}
|
|
265
270
|
|
|
266
|
-
return {
|
|
271
|
+
return defined({
|
|
267
272
|
borderStyle: border.style,
|
|
268
273
|
...borderWidthStyleAdapter(border.width),
|
|
269
274
|
...borderColorStyleAdapter(border.color),
|
|
270
|
-
}
|
|
275
|
+
})
|
|
271
276
|
}
|
|
272
277
|
|
|
273
278
|
const paddingStyleAdapter = (
|
|
@@ -284,12 +289,12 @@ const paddingStyleAdapter = (
|
|
|
284
289
|
|
|
285
290
|
const sides = resolveDirectionalTokens([padding], defaultWritingMode)
|
|
286
291
|
|
|
287
|
-
return {
|
|
292
|
+
return defined({
|
|
288
293
|
paddingTop: sides.top,
|
|
289
294
|
paddingRight: sides.right,
|
|
290
295
|
paddingBottom: sides.bottom,
|
|
291
296
|
paddingLeft: sides.left,
|
|
292
|
-
}
|
|
297
|
+
})
|
|
293
298
|
}
|
|
294
299
|
|
|
295
300
|
const marginStyleAdapter = (
|
|
@@ -306,12 +311,12 @@ const marginStyleAdapter = (
|
|
|
306
311
|
|
|
307
312
|
const sides = resolveDirectionalTokens([margin], defaultWritingMode)
|
|
308
313
|
|
|
309
|
-
return {
|
|
314
|
+
return defined({
|
|
310
315
|
marginTop: sides.top,
|
|
311
316
|
marginRight: sides.right,
|
|
312
317
|
marginBottom: sides.bottom,
|
|
313
318
|
marginLeft: sides.left,
|
|
314
|
-
}
|
|
319
|
+
})
|
|
315
320
|
}
|
|
316
321
|
|
|
317
322
|
const sizeStyleAdapter = (
|
|
@@ -328,14 +333,16 @@ const sizeStyleAdapter = (
|
|
|
328
333
|
return undefined
|
|
329
334
|
}
|
|
330
335
|
|
|
331
|
-
return {
|
|
336
|
+
return defined({
|
|
332
337
|
width: size.width,
|
|
333
338
|
height: size.height,
|
|
334
339
|
minWidth: size.minWidth,
|
|
335
|
-
minHeight
|
|
340
|
+
// minHeight is rounded to the nearest pixel to avoid blurry edges and gaps multiselects on certain devices.
|
|
341
|
+
// See https://reactnative.dev/docs/pixelratio#pixelroundtonearestpixel for more information.
|
|
342
|
+
minHeight: typeof size.minHeight === 'number' ? PixelRatio.roundToNearestPixel(size.minHeight) : size.minHeight,
|
|
336
343
|
maxWidth: size.maxWidth,
|
|
337
344
|
maxHeight: size.maxHeight,
|
|
338
|
-
}
|
|
345
|
+
})
|
|
339
346
|
}
|
|
340
347
|
|
|
341
348
|
const outlineStyleAdapter = (
|
|
@@ -350,12 +357,12 @@ const outlineStyleAdapter = (
|
|
|
350
357
|
return undefined
|
|
351
358
|
}
|
|
352
359
|
|
|
353
|
-
return {
|
|
360
|
+
return defined({
|
|
354
361
|
outlineColor: outline.color,
|
|
355
362
|
outlineOffset: outline.offset,
|
|
356
363
|
outlineWidth: outline.width,
|
|
357
364
|
outlineStyle: outline.style,
|
|
358
|
-
}
|
|
365
|
+
})
|
|
359
366
|
}
|
|
360
367
|
|
|
361
368
|
const layoutStyleAdapter = (
|
|
@@ -376,18 +383,101 @@ const layoutStyleAdapter = (
|
|
|
376
383
|
return undefined
|
|
377
384
|
}
|
|
378
385
|
|
|
379
|
-
return {
|
|
386
|
+
return defined({
|
|
380
387
|
flexWrap: layout.flexWrap,
|
|
381
388
|
flexGrow: layout.flexGrow,
|
|
382
389
|
flexShrink: layout.flexShrink,
|
|
383
390
|
flexBasis: layout.flexBasis,
|
|
384
391
|
flexDirection: flexDirectionStyleAdapter(layout.direction),
|
|
385
392
|
justifyContent: justifyContentStyleAdapter(layout.mainAxisAlignment),
|
|
386
|
-
alignItems: alignItemsStyleAdapter(layout.
|
|
387
|
-
alignContent: alignContentStyleAdapter(layout.
|
|
393
|
+
alignItems: alignItemsStyleAdapter(layout.crossAxisAlignment),
|
|
394
|
+
alignContent: alignContentStyleAdapter(layout.crossAxisLineAlignment),
|
|
388
395
|
alignSelf: alignSelfStyleAdapter(layout.selfCrossAxisAlignment),
|
|
389
396
|
gap: layout.gap,
|
|
397
|
+
})
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
const positionStyleAdapter = (
|
|
401
|
+
position?: PositioningToken
|
|
402
|
+
): OptionalViewStyle<
|
|
403
|
+
| 'position'
|
|
404
|
+
| 'left'
|
|
405
|
+
| 'right'
|
|
406
|
+
| 'top'
|
|
407
|
+
| 'bottom'
|
|
408
|
+
| 'zIndex'
|
|
409
|
+
> | undefined => {
|
|
410
|
+
if (position === undefined) {
|
|
411
|
+
return undefined
|
|
390
412
|
}
|
|
413
|
+
|
|
414
|
+
if (position.type === 'static') {
|
|
415
|
+
return defined({
|
|
416
|
+
position: position.type,
|
|
417
|
+
zIndex: position.zIndex,
|
|
418
|
+
})
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
return defined({
|
|
422
|
+
position: position.type,
|
|
423
|
+
left: position.left,
|
|
424
|
+
right: position.right,
|
|
425
|
+
top: position.top,
|
|
426
|
+
bottom: position.bottom,
|
|
427
|
+
zIndex: position.zIndex,
|
|
428
|
+
})
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
const transformStyleAdapter = (
|
|
432
|
+
transform?: TransformTokens
|
|
433
|
+
): ViewStyle['transform'] | undefined => {
|
|
434
|
+
if (transform === undefined) {
|
|
435
|
+
return undefined
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
const transforms = []
|
|
439
|
+
|
|
440
|
+
if (transform.translate?.x !== undefined) {
|
|
441
|
+
transforms.push({ translateX: transform.translate.x })
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
if (transform.translate?.y !== undefined) {
|
|
445
|
+
transforms.push({ translateY: transform.translate.y })
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
if (transform.scale?.x !== undefined) {
|
|
449
|
+
transforms.push({ scaleX: transform.scale.x })
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
if (transform.scale?.y !== undefined) {
|
|
453
|
+
transforms.push({ scaleY: transform.scale.y })
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
if (transform.rotation?.x !== undefined) {
|
|
457
|
+
transforms.push({ rotateX: transform.rotation.x })
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
if (transform.rotation?.y !== undefined) {
|
|
461
|
+
transforms.push({ rotateY: transform.rotation.y })
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
if (transform.rotation?.z !== undefined) {
|
|
465
|
+
transforms.push({ rotateZ: transform.rotation.z })
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
if (transform.skew?.x !== undefined) {
|
|
469
|
+
transforms.push({ skewX: `${transform.skew.x}deg` })
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
if (transform.skew?.y !== undefined) {
|
|
473
|
+
transforms.push({ skewY: `${transform.skew.y}deg` })
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
if (transforms.length === 0) {
|
|
477
|
+
return undefined
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
return transforms
|
|
391
481
|
}
|
|
392
482
|
|
|
393
483
|
function containerStyleAdapter(tokens: ContainerTokens): ViewStyle {
|
|
@@ -401,6 +491,8 @@ function containerStyleAdapter(tokens: ContainerTokens): ViewStyle {
|
|
|
401
491
|
backgroundColor: tokens.backgroundColor,
|
|
402
492
|
opacity: tokens.opacity,
|
|
403
493
|
boxShadow: shadowStyleAdapter(tokens.decoration?.shadow),
|
|
494
|
+
transform: transformStyleAdapter(tokens.transform),
|
|
495
|
+
...positionStyleAdapter(tokens.position),
|
|
404
496
|
...layoutStyleAdapter(tokens.layout),
|
|
405
497
|
...sizeStyleAdapter(tokens.size),
|
|
406
498
|
...borderStyleAdapter(tokens.border),
|
|
@@ -454,6 +546,8 @@ export const StyleAdapterUtils = {
|
|
|
454
546
|
size: sizeStyleAdapter,
|
|
455
547
|
outline: outlineStyleAdapter,
|
|
456
548
|
layout: layoutStyleAdapter,
|
|
549
|
+
position: positionStyleAdapter,
|
|
550
|
+
transform: transformStyleAdapter,
|
|
457
551
|
container: containerStyleAdapter,
|
|
458
552
|
text: textStyleAdapter,
|
|
459
553
|
icon: iconStyleAdapter,
|
|
@@ -26,10 +26,8 @@ import type {
|
|
|
26
26
|
} from '../types/components/avatar'
|
|
27
27
|
import {
|
|
28
28
|
createStyleResolver,
|
|
29
|
-
createValueResolver,
|
|
30
29
|
type ComponentThemeResolver
|
|
31
30
|
} from '../types/resolver'
|
|
32
|
-
import type { ThemeTokens } from '@helpwave/hightide-design/theme-tokens'
|
|
33
31
|
|
|
34
32
|
import { StyleAdapterUtils } from '../adapters'
|
|
35
33
|
|
|
@@ -61,6 +59,28 @@ export const mergeAvatarTokens = (
|
|
|
61
59
|
...override?.container?.decoration,
|
|
62
60
|
},
|
|
63
61
|
},
|
|
62
|
+
image: {
|
|
63
|
+
...base.image,
|
|
64
|
+
...override?.image,
|
|
65
|
+
size: {
|
|
66
|
+
...base.image.size,
|
|
67
|
+
...override?.image?.size,
|
|
68
|
+
},
|
|
69
|
+
shape: {
|
|
70
|
+
...base.image.shape,
|
|
71
|
+
...override?.image?.shape,
|
|
72
|
+
},
|
|
73
|
+
layout: {
|
|
74
|
+
...base.image.layout,
|
|
75
|
+
...override?.image?.layout,
|
|
76
|
+
},
|
|
77
|
+
decoration: {
|
|
78
|
+
...base.image.decoration,
|
|
79
|
+
...override?.image?.decoration,
|
|
80
|
+
},
|
|
81
|
+
position: override?.image?.position ?? base.image.position,
|
|
82
|
+
transform: override?.image?.transform ?? base.image.transform,
|
|
83
|
+
},
|
|
64
84
|
text: {
|
|
65
85
|
...base.text,
|
|
66
86
|
...override?.text,
|
|
@@ -94,6 +114,17 @@ export const withNumericAvatarSize = (
|
|
|
94
114
|
borderRadius: { type: 'all', value: borderRadius },
|
|
95
115
|
},
|
|
96
116
|
},
|
|
117
|
+
image: {
|
|
118
|
+
...tokens.image,
|
|
119
|
+
size: {
|
|
120
|
+
width: size,
|
|
121
|
+
height: size,
|
|
122
|
+
},
|
|
123
|
+
shape: {
|
|
124
|
+
...tokens.image.shape,
|
|
125
|
+
borderRadius: { type: 'all', value: borderRadius },
|
|
126
|
+
},
|
|
127
|
+
},
|
|
97
128
|
icon: {
|
|
98
129
|
...tokens.icon,
|
|
99
130
|
size,
|
|
@@ -102,8 +133,7 @@ export const withNumericAvatarSize = (
|
|
|
102
133
|
}
|
|
103
134
|
|
|
104
135
|
export const createAvatarStyleResolvers = (
|
|
105
|
-
resolveTokens: (state: AvatarState) => AvatarTokens
|
|
106
|
-
themeTokens: ThemeTokens
|
|
136
|
+
resolveTokens: (state: AvatarState) => AvatarTokens
|
|
107
137
|
): AvatarThemeResolvers => ({
|
|
108
138
|
container: createStyleResolver((state: AvatarState): AvatarStyle => {
|
|
109
139
|
const { container } = resolveTokens(state)
|
|
@@ -122,36 +152,15 @@ export const createAvatarStyleResolvers = (
|
|
|
122
152
|
} : {}),
|
|
123
153
|
}
|
|
124
154
|
}),
|
|
125
|
-
image: createStyleResolver((state: AvatarState): AvatarImageStyle =>
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
top: 0,
|
|
135
|
-
width,
|
|
136
|
-
height,
|
|
137
|
-
borderRadius: borderRadius?.type === 'all'
|
|
138
|
-
? borderRadius.value
|
|
139
|
-
: undefined,
|
|
140
|
-
}
|
|
141
|
-
}),
|
|
142
|
-
text: createStyleResolver((state: AvatarState): AvatarTextStyle => ({
|
|
143
|
-
...StyleAdapterUtils.text(resolveTokens(state).text),
|
|
144
|
-
textAlign: 'center',
|
|
145
|
-
})),
|
|
146
|
-
icon: createValueResolver((state: AvatarState): AvatarIconStyle => {
|
|
147
|
-
const { icon } = resolveTokens(state)
|
|
148
|
-
|
|
149
|
-
return StyleAdapterUtils.icon({
|
|
150
|
-
size: icon.size ?? themeTokens.icongraphy.sizes.md,
|
|
151
|
-
strokeWidth: icon.strokeWidth ?? themeTokens.icongraphy.strokeWidth,
|
|
152
|
-
color: icon.color ?? themeTokens.color.primary.onColor,
|
|
153
|
-
})
|
|
154
|
-
}),
|
|
155
|
+
image: createStyleResolver((state: AvatarState): AvatarImageStyle => (
|
|
156
|
+
StyleAdapterUtils.container(resolveTokens(state).image) as AvatarImageStyle
|
|
157
|
+
)),
|
|
158
|
+
text: createStyleResolver((state: AvatarState): AvatarTextStyle => (
|
|
159
|
+
StyleAdapterUtils.text(resolveTokens(state).text)
|
|
160
|
+
)),
|
|
161
|
+
icon: createStyleResolver((state: AvatarState): AvatarIconStyle => (
|
|
162
|
+
StyleAdapterUtils.icon(resolveTokens(state).icon)
|
|
163
|
+
)),
|
|
155
164
|
})
|
|
156
165
|
|
|
157
166
|
export const toAvatarThemeResolvers: ComponentThemeResolver<AvatarThemeResolvers> = ({
|
|
@@ -180,7 +189,7 @@ export const toAvatarThemeResolvers: ComponentThemeResolver<AvatarThemeResolvers
|
|
|
180
189
|
return tokens
|
|
181
190
|
}
|
|
182
191
|
|
|
183
|
-
return createAvatarStyleResolvers(resolveTokens
|
|
192
|
+
return createAvatarStyleResolvers(resolveTokens)
|
|
184
193
|
}
|
|
185
194
|
|
|
186
195
|
export const createAvatarWithStatusThemeResolvers = (
|
|
@@ -194,7 +203,7 @@ export const createAvatarWithStatusThemeResolvers = (
|
|
|
194
203
|
const { themeTokens, semanticTokens, componentTokens } = context
|
|
195
204
|
|
|
196
205
|
return {
|
|
197
|
-
avatar:
|
|
206
|
+
avatar: createStyleResolver((state: AvatarWithStatusState) => {
|
|
198
207
|
const { avatarOverride } = resolve(state)
|
|
199
208
|
|
|
200
209
|
const resolveTokens = (avatarState: AvatarState): AvatarTokens => {
|
|
@@ -222,7 +231,7 @@ export const createAvatarWithStatusThemeResolvers = (
|
|
|
222
231
|
return tokens
|
|
223
232
|
}
|
|
224
233
|
|
|
225
|
-
return createAvatarStyleResolvers(resolveTokens
|
|
234
|
+
return createAvatarStyleResolvers(resolveTokens)
|
|
226
235
|
}),
|
|
227
236
|
statusDot: createStyleResolver((state: AvatarWithStatusState): AvatarStatusDotStyle => {
|
|
228
237
|
const tokens = resolve(state)
|
|
@@ -333,7 +342,7 @@ export const toAvatarGroupThemeResolvers: ComponentThemeResolver<
|
|
|
333
342
|
})
|
|
334
343
|
|
|
335
344
|
return {
|
|
336
|
-
avatar:
|
|
345
|
+
avatar: createStyleResolver((state: AvatarGroupState) => {
|
|
337
346
|
const { avatarOverride } = resolve(state)
|
|
338
347
|
|
|
339
348
|
const resolveTokens = (avatarState: AvatarState): AvatarTokens => {
|
|
@@ -361,7 +370,7 @@ export const toAvatarGroupThemeResolvers: ComponentThemeResolver<
|
|
|
361
370
|
return tokens
|
|
362
371
|
}
|
|
363
372
|
|
|
364
|
-
return createAvatarStyleResolvers(resolveTokens
|
|
373
|
+
return createAvatarStyleResolvers(resolveTokens)
|
|
365
374
|
}),
|
|
366
375
|
container: createStyleResolver((state: AvatarGroupState): AvatarGroupContainerStyle => {
|
|
367
376
|
const tokens = resolve(state)
|
|
@@ -7,7 +7,6 @@ import type {
|
|
|
7
7
|
} from '../types/components/button'
|
|
8
8
|
import {
|
|
9
9
|
createStyleResolver,
|
|
10
|
-
createValueResolver,
|
|
11
10
|
toPressableInteractionState,
|
|
12
11
|
type ComponentThemeResolver
|
|
13
12
|
} from '../types/resolver'
|
|
@@ -31,22 +30,13 @@ export const toButtonThemeResolvers: ComponentThemeResolver<ButtonThemeResolvers
|
|
|
31
30
|
})
|
|
32
31
|
|
|
33
32
|
return {
|
|
34
|
-
container: createStyleResolver((state: ButtonState): ButtonStyle => (
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
...StyleAdapterUtils.container(tokens.stateLayer),
|
|
42
|
-
position: 'absolute',
|
|
43
|
-
top: 0,
|
|
44
|
-
right: 0,
|
|
45
|
-
bottom: 0,
|
|
46
|
-
left: 0,
|
|
47
|
-
}
|
|
48
|
-
}),
|
|
49
|
-
icon: createValueResolver((state: ButtonState): ButtonIconStyle => (
|
|
33
|
+
container: createStyleResolver((state: ButtonState): ButtonStyle => (
|
|
34
|
+
StyleAdapterUtils.container(resolve(state).container)
|
|
35
|
+
)),
|
|
36
|
+
stateLayer: createStyleResolver((state: ButtonState): ButtonStyle => (
|
|
37
|
+
StyleAdapterUtils.container(resolve(state).stateLayer)
|
|
38
|
+
)),
|
|
39
|
+
icon: createStyleResolver((state: ButtonState): ButtonIconStyle => (
|
|
50
40
|
StyleAdapterUtils.icon(resolve(state).icon)
|
|
51
41
|
)),
|
|
52
42
|
text: createStyleResolver((state: ButtonState): ButtonTextStyle => (
|
|
@@ -26,7 +26,6 @@ import type {
|
|
|
26
26
|
} from '../../types/components/chat'
|
|
27
27
|
import {
|
|
28
28
|
createStyleResolver,
|
|
29
|
-
createValueResolver,
|
|
30
29
|
toPressableInteractionState,
|
|
31
30
|
type ComponentThemeResolver
|
|
32
31
|
} from '../../types/resolver'
|
|
@@ -72,13 +71,13 @@ export const toChatAttachmentMessageBubbleThemeResolvers: ComponentThemeResolver
|
|
|
72
71
|
): ChatMessageBubbleMetaDataTextStyle => (
|
|
73
72
|
StyleAdapterUtils.text(resolve(state.direction).chatMessageBubbleOverrides.metaDataText = {})
|
|
74
73
|
)),
|
|
75
|
-
metaDataIcon:
|
|
74
|
+
metaDataIcon: createStyleResolver((
|
|
76
75
|
state: ChatAttachmentMessageBubbleState
|
|
77
76
|
): ChatMessageBubbleMetaDataIconStyle => (
|
|
78
77
|
StyleAdapterUtils.icon(resolve(state.direction).chatMessageBubbleOverrides.metaDataIcon = {})
|
|
79
78
|
)),
|
|
80
79
|
},
|
|
81
|
-
contentContainer:
|
|
80
|
+
contentContainer: createStyleResolver((state: ChatAttachmentMessageBubbleState) => {
|
|
82
81
|
const contentContainer = resolve(state.direction).contentContainer
|
|
83
82
|
|
|
84
83
|
const resolvePressable = (pressableState: PressableState) => componentTokens.pressable({
|
|
@@ -112,7 +111,7 @@ export const toChatAttachmentMessageBubbleThemeResolvers: ComponentThemeResolver
|
|
|
112
111
|
...StyleAdapterUtils.text(resolvePressable(pressableState).text),
|
|
113
112
|
...StyleAdapterUtils.text(contentContainer.text = {}),
|
|
114
113
|
})),
|
|
115
|
-
icon:
|
|
114
|
+
icon: createStyleResolver((pressableState: PressableState): PressableIconStyle => (
|
|
116
115
|
StyleAdapterUtils.icon(resolvePressable(pressableState).icon)
|
|
117
116
|
)),
|
|
118
117
|
}
|
|
@@ -122,7 +121,7 @@ export const toChatAttachmentMessageBubbleThemeResolvers: ComponentThemeResolver
|
|
|
122
121
|
): ChatAttachmentMessageBubbleFileIconContainerStyle => (
|
|
123
122
|
StyleAdapterUtils.container(resolve(state.direction).fileIconContainer)
|
|
124
123
|
)),
|
|
125
|
-
fileIcon:
|
|
124
|
+
fileIcon: createStyleResolver((
|
|
126
125
|
state: ChatAttachmentMessageBubbleState
|
|
127
126
|
): ChatAttachmentMessageBubbleFileIconStyle => (
|
|
128
127
|
StyleAdapterUtils.icon(resolve(state.direction).fileIcon)
|
|
@@ -132,7 +131,7 @@ export const toChatAttachmentMessageBubbleThemeResolvers: ComponentThemeResolver
|
|
|
132
131
|
): ChatAttachmentMessageBubbleDownloadIconContainerStyle => (
|
|
133
132
|
StyleAdapterUtils.container(resolve(state.direction).downloadIconContainer)
|
|
134
133
|
)),
|
|
135
|
-
downloadIcon:
|
|
134
|
+
downloadIcon: createStyleResolver((
|
|
136
135
|
state: ChatAttachmentMessageBubbleState
|
|
137
136
|
): ChatAttachmentMessageBubbleDownloadIconStyle => (
|
|
138
137
|
StyleAdapterUtils.icon(resolve(state.direction).downloadIcon)
|
|
@@ -32,9 +32,7 @@ import type {
|
|
|
32
32
|
} from '../../types/components/avatar'
|
|
33
33
|
import {
|
|
34
34
|
createSimpleStyleResolver,
|
|
35
|
-
createSimpleValueResolver,
|
|
36
35
|
createStyleResolver,
|
|
37
|
-
createValueResolver,
|
|
38
36
|
toPressableInteractionState,
|
|
39
37
|
type ComponentThemeResolver
|
|
40
38
|
} from '../../types/resolver'
|
|
@@ -61,7 +59,7 @@ export const toChatConversationRowThemeResolvers: ComponentThemeResolver<ChatCon
|
|
|
61
59
|
})
|
|
62
60
|
|
|
63
61
|
return {
|
|
64
|
-
pressable:
|
|
62
|
+
pressable: createStyleResolver((state: ChatConversationRowState) => {
|
|
65
63
|
const { pressableOverrides } = resolve(state)
|
|
66
64
|
|
|
67
65
|
const resolvePressable = (pressableState: PressableState) => componentTokens.pressable({
|
|
@@ -89,7 +87,7 @@ export const toChatConversationRowThemeResolvers: ComponentThemeResolver<ChatCon
|
|
|
89
87
|
...StyleAdapterUtils.text(resolvePressable(pressableState).text),
|
|
90
88
|
...StyleAdapterUtils.text(pressableOverrides.text ?? {}),
|
|
91
89
|
})),
|
|
92
|
-
icon:
|
|
90
|
+
icon: createStyleResolver((pressableState: PressableState): PressableIconStyle => ({
|
|
93
91
|
...StyleAdapterUtils.icon(resolvePressable(pressableState).icon),
|
|
94
92
|
...StyleAdapterUtils.icon(pressableOverrides.icon ?? {}),
|
|
95
93
|
})),
|
|
@@ -119,10 +117,10 @@ export const toChatConversationRowThemeResolvers: ComponentThemeResolver<ChatCon
|
|
|
119
117
|
unreadBadgeText: createSimpleStyleResolver((): ChatConversationRowUnreadBadgeTextStyle => (
|
|
120
118
|
StyleAdapterUtils.text(resolve().unreadBadgeText)
|
|
121
119
|
)),
|
|
122
|
-
sentIndicator:
|
|
120
|
+
sentIndicator: createSimpleStyleResolver((): ChatConversationRowSentIndicatorStyle => (
|
|
123
121
|
StyleAdapterUtils.icon(resolve().sentIndicator)
|
|
124
122
|
)),
|
|
125
|
-
avatar:
|
|
123
|
+
avatar: createStyleResolver((state: AvatarState): AvatarThemeResolvers => {
|
|
126
124
|
const { avatarOverride } = resolve()
|
|
127
125
|
|
|
128
126
|
const resolveTokens = (avatarState: AvatarState): AvatarTokens => {
|
|
@@ -13,7 +13,6 @@ import type {
|
|
|
13
13
|
} from '../../types/components/chat'
|
|
14
14
|
import {
|
|
15
15
|
createStyleResolver,
|
|
16
|
-
createValueResolver,
|
|
17
16
|
type ComponentThemeResolver
|
|
18
17
|
} from '../../types/resolver'
|
|
19
18
|
|
|
@@ -49,7 +48,7 @@ export const toChatMessageBubbleThemeResolvers: ComponentThemeResolver<ChatMessa
|
|
|
49
48
|
metaDataText: createStyleResolver((state: ChatMessageBubbleState): ChatMessageBubbleMetaDataTextStyle => (
|
|
50
49
|
StyleAdapterUtils.text(resolve(state.direction).metaDataText)
|
|
51
50
|
)),
|
|
52
|
-
metaDataIcon:
|
|
51
|
+
metaDataIcon: createStyleResolver((state: ChatMessageBubbleState): ChatMessageBubbleMetaDataIconStyle => (
|
|
53
52
|
StyleAdapterUtils.icon(resolve(state.direction).metaDataIcon)
|
|
54
53
|
)),
|
|
55
54
|
}
|
|
@@ -6,7 +6,6 @@ import type {
|
|
|
6
6
|
} from '../../types/components/chat'
|
|
7
7
|
import {
|
|
8
8
|
createSimpleStyleResolver,
|
|
9
|
-
createSimpleValueResolver,
|
|
10
9
|
type ComponentThemeResolver
|
|
11
10
|
} from '../../types/resolver'
|
|
12
11
|
|
|
@@ -30,7 +29,7 @@ export const toChatMessageComposerThemeResolvers: ComponentThemeResolver<ChatMes
|
|
|
30
29
|
...StyleAdapterUtils.container(resolve().input),
|
|
31
30
|
...StyleAdapterUtils.text(resolve().text),
|
|
32
31
|
})),
|
|
33
|
-
placeholderColor:
|
|
32
|
+
placeholderColor: createSimpleStyleResolver((): TextStyle => ({
|
|
34
33
|
color: resolve().placeholder.color
|
|
35
34
|
})),
|
|
36
35
|
}
|
|
@@ -9,7 +9,6 @@ import type {
|
|
|
9
9
|
} from '../../types/components/chat'
|
|
10
10
|
import {
|
|
11
11
|
createStyleResolver,
|
|
12
|
-
createValueResolver,
|
|
13
12
|
toPressableInteractionState,
|
|
14
13
|
type ComponentThemeResolver
|
|
15
14
|
} from '../../types/resolver'
|
|
@@ -28,7 +27,7 @@ export const toChatQuickReplyChipThemeResolvers: ComponentThemeResolver<ChatQuic
|
|
|
28
27
|
})
|
|
29
28
|
|
|
30
29
|
return {
|
|
31
|
-
pressable:
|
|
30
|
+
pressable: createStyleResolver((state: ChatQuickReplyChipState) => {
|
|
32
31
|
const tokens = resolve(state.isActive)
|
|
33
32
|
|
|
34
33
|
const resolvePressable = (pressableState: PressableState) => componentTokens.pressable({
|
|
@@ -62,7 +61,7 @@ export const toChatQuickReplyChipThemeResolvers: ComponentThemeResolver<ChatQuic
|
|
|
62
61
|
...StyleAdapterUtils.text(resolvePressable(pressableState).text),
|
|
63
62
|
...StyleAdapterUtils.text(tokens.text = {}),
|
|
64
63
|
})),
|
|
65
|
-
icon:
|
|
64
|
+
icon: createStyleResolver((pressableState: PressableState): PressableIconStyle => ({
|
|
66
65
|
...StyleAdapterUtils.icon(resolvePressable(pressableState).icon),
|
|
67
66
|
...StyleAdapterUtils.icon(tokens.icon = {}),
|
|
68
67
|
})),
|
|
@@ -9,7 +9,6 @@ import type {
|
|
|
9
9
|
} from '../../types/components/chat'
|
|
10
10
|
import {
|
|
11
11
|
createStyleResolver,
|
|
12
|
-
createValueResolver,
|
|
13
12
|
type ComponentThemeResolver
|
|
14
13
|
} from '../../types/resolver'
|
|
15
14
|
|
|
@@ -33,7 +32,7 @@ export const toChatSystemLineThemeResolvers: ComponentThemeResolver<ChatSystemLi
|
|
|
33
32
|
text: createStyleResolver((state: ChatSystemLineState): ChatSystemLineTextStyle => (
|
|
34
33
|
StyleAdapterUtils.text(resolve(state.color).text)
|
|
35
34
|
)),
|
|
36
|
-
icon:
|
|
35
|
+
icon: createStyleResolver((state: ChatSystemLineState): ChatSystemLineIconStyle => (
|
|
37
36
|
StyleAdapterUtils.icon(resolve(state.color).icon)
|
|
38
37
|
)),
|
|
39
38
|
}
|