@kesha-antonov/react-native-chat 6.0.0 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/README.md +28 -5
  2. package/lib/Actions.d.ts.map +1 -1
  3. package/lib/Actions.js +33 -27
  4. package/lib/Actions.js.map +1 -1
  5. package/lib/Chat/Chat.d.ts.map +1 -1
  6. package/lib/Chat/Chat.js +253 -203
  7. package/lib/Chat/Chat.js.map +1 -1
  8. package/lib/Chat/ChatMessageList.d.ts.map +1 -1
  9. package/lib/Chat/ChatMessageList.js +4 -0
  10. package/lib/Chat/ChatMessageList.js.map +1 -1
  11. package/lib/Chat/index.d.ts +9 -1
  12. package/lib/Chat/index.d.ts.map +1 -1
  13. package/lib/Chat/index.js +14 -1
  14. package/lib/Chat/index.js.map +1 -1
  15. package/lib/Chat/types.d.ts +29 -0
  16. package/lib/Chat/types.d.ts.map +1 -1
  17. package/lib/Chat/types.js.map +1 -1
  18. package/lib/Chat/useMessageActions.d.ts +1 -0
  19. package/lib/Chat/useMessageActions.d.ts.map +1 -1
  20. package/lib/Chat/useMessageActions.js +97 -89
  21. package/lib/Chat/useMessageActions.js.map +1 -1
  22. package/lib/ChatHeader.d.ts +50 -0
  23. package/lib/ChatHeader.d.ts.map +1 -0
  24. package/lib/ChatHeader.js +356 -0
  25. package/lib/ChatHeader.js.map +1 -0
  26. package/lib/ChatList/ChatListCell.d.ts +1 -1
  27. package/lib/ChatList/ChatListCell.d.ts.map +1 -1
  28. package/lib/ChatList/ChatListCell.js +42 -11
  29. package/lib/ChatList/ChatListCell.js.map +1 -1
  30. package/lib/ChatList/index.js +332 -323
  31. package/lib/ChatList/index.js.map +1 -1
  32. package/lib/ChatList/types.d.ts +17 -1
  33. package/lib/ChatList/types.d.ts.map +1 -1
  34. package/lib/ChatList/types.js.map +1 -1
  35. package/lib/ChatList/utils.d.ts +4 -1
  36. package/lib/ChatList/utils.d.ts.map +1 -1
  37. package/lib/ChatList/utils.js +3 -2
  38. package/lib/ChatList/utils.js.map +1 -1
  39. package/lib/Composer.js +5 -1
  40. package/lib/Composer.js.map +1 -1
  41. package/lib/InputToolbar/fragments.d.ts +1 -1
  42. package/lib/InputToolbar/fragments.d.ts.map +1 -1
  43. package/lib/InputToolbar/fragments.js +9 -7
  44. package/lib/InputToolbar/fragments.js.map +1 -1
  45. package/lib/InputToolbar/index.d.ts.map +1 -1
  46. package/lib/InputToolbar/index.js +3 -2
  47. package/lib/InputToolbar/index.js.map +1 -1
  48. package/lib/InputToolbar/types.d.ts +6 -0
  49. package/lib/InputToolbar/types.d.ts.map +1 -1
  50. package/lib/InputToolbar/types.js.map +1 -1
  51. package/lib/InputToolbar/useActionsFragment.d.ts.map +1 -1
  52. package/lib/InputToolbar/useActionsFragment.js +83 -59
  53. package/lib/InputToolbar/useActionsFragment.js.map +1 -1
  54. package/lib/InputToolbar/useKeyboardInset.d.ts +1 -1
  55. package/lib/InputToolbar/useKeyboardInset.d.ts.map +1 -1
  56. package/lib/InputToolbar/useKeyboardInset.js +2 -2
  57. package/lib/InputToolbar/useKeyboardInset.js.map +1 -1
  58. package/lib/MessageText.d.ts.map +1 -1
  59. package/lib/MessageText.js +39 -33
  60. package/lib/MessageText.js.map +1 -1
  61. package/lib/MessagesContainer/index.d.ts.map +1 -1
  62. package/lib/MessagesContainer/index.js +113 -94
  63. package/lib/MessagesContainer/index.js.map +1 -1
  64. package/lib/MessagesContainer/types.d.ts +5 -2
  65. package/lib/MessagesContainer/types.d.ts.map +1 -1
  66. package/lib/MessagesContainer/types.js.map +1 -1
  67. package/lib/MessagesContainer/useChained.d.ts +6 -0
  68. package/lib/MessagesContainer/useChained.d.ts.map +1 -0
  69. package/lib/MessagesContainer/useChained.js +38 -0
  70. package/lib/MessagesContainer/useChained.js.map +1 -0
  71. package/lib/MessagesContainer/useListChrome.d.ts.map +1 -1
  72. package/lib/MessagesContainer/useListChrome.js +1 -1
  73. package/lib/MessagesContainer/useListChrome.js.map +1 -1
  74. package/lib/Models.d.ts +2 -1
  75. package/lib/Models.d.ts.map +1 -1
  76. package/lib/Models.js.map +1 -1
  77. package/lib/Send.d.ts.map +1 -1
  78. package/lib/Send.js +18 -13
  79. package/lib/Send.js.map +1 -1
  80. package/lib/Theme.d.ts +11 -0
  81. package/lib/Theme.d.ts.map +1 -1
  82. package/lib/Theme.js +17 -1
  83. package/lib/Theme.js.map +1 -1
  84. package/lib/attachments/AttachmentButton.js +17 -15
  85. package/lib/attachments/AttachmentButton.js.map +1 -1
  86. package/lib/attachments/AttachmentMenu/GalleryGrid.d.ts +3 -1
  87. package/lib/attachments/AttachmentMenu/GalleryGrid.d.ts.map +1 -1
  88. package/lib/attachments/AttachmentMenu/GalleryGrid.js +69 -68
  89. package/lib/attachments/AttachmentMenu/GalleryGrid.js.map +1 -1
  90. package/lib/attachments/AttachmentMenu/TabPanel.d.ts +3 -1
  91. package/lib/attachments/AttachmentMenu/TabPanel.d.ts.map +1 -1
  92. package/lib/attachments/AttachmentMenu/TabPanel.js +23 -21
  93. package/lib/attachments/AttachmentMenu/TabPanel.js.map +1 -1
  94. package/lib/attachments/AttachmentMenu/index.d.ts +6 -2
  95. package/lib/attachments/AttachmentMenu/index.d.ts.map +1 -1
  96. package/lib/attachments/AttachmentMenu/index.js +259 -247
  97. package/lib/attachments/AttachmentMenu/index.js.map +1 -1
  98. package/lib/attachments/buildMessages.d.ts +4 -4
  99. package/lib/attachments/buildMessages.d.ts.map +1 -1
  100. package/lib/attachments/buildMessages.js +9 -8
  101. package/lib/attachments/buildMessages.js.map +1 -1
  102. package/lib/attachments/types.d.ts +19 -0
  103. package/lib/attachments/types.d.ts.map +1 -1
  104. package/lib/attachments/types.js.map +1 -1
  105. package/lib/components/TouchableOpacity.d.ts +5 -0
  106. package/lib/components/TouchableOpacity.d.ts.map +1 -1
  107. package/lib/components/TouchableOpacity.js +59 -54
  108. package/lib/components/TouchableOpacity.js.map +1 -1
  109. package/lib/components/defaultMessageActions.d.ts +3 -1
  110. package/lib/components/defaultMessageActions.d.ts.map +1 -1
  111. package/lib/components/defaultMessageActions.js +9 -1
  112. package/lib/components/defaultMessageActions.js.map +1 -1
  113. package/lib/components/textHighlight.d.ts +14 -0
  114. package/lib/components/textHighlight.d.ts.map +1 -0
  115. package/lib/components/textHighlight.js +39 -0
  116. package/lib/components/textHighlight.js.map +1 -0
  117. package/lib/hooks/useKeyboardVerticalOffset.d.ts +6 -0
  118. package/lib/hooks/useKeyboardVerticalOffset.d.ts.map +1 -1
  119. package/lib/hooks/useKeyboardVerticalOffset.js +35 -13
  120. package/lib/hooks/useKeyboardVerticalOffset.js.map +1 -1
  121. package/lib/i18n.d.ts +2 -0
  122. package/lib/i18n.d.ts.map +1 -1
  123. package/lib/i18n.js +1 -0
  124. package/lib/i18n.js.map +1 -1
  125. package/lib/index.d.ts +3 -1
  126. package/lib/index.d.ts.map +1 -1
  127. package/lib/index.js +1 -0
  128. package/lib/index.js.map +1 -1
  129. package/lib/linkParser.d.ts +4 -1
  130. package/lib/linkParser.d.ts.map +1 -1
  131. package/lib/linkParser.js +115 -78
  132. package/lib/linkParser.js.map +1 -1
  133. package/lib/locales/ar.d.ts.map +1 -1
  134. package/lib/locales/ar.js +1 -0
  135. package/lib/locales/ar.js.map +1 -1
  136. package/lib/locales/de.d.ts.map +1 -1
  137. package/lib/locales/de.js +1 -0
  138. package/lib/locales/de.js.map +1 -1
  139. package/lib/locales/es.d.ts.map +1 -1
  140. package/lib/locales/es.js +1 -0
  141. package/lib/locales/es.js.map +1 -1
  142. package/lib/locales/fr.d.ts.map +1 -1
  143. package/lib/locales/fr.js +1 -0
  144. package/lib/locales/fr.js.map +1 -1
  145. package/lib/locales/hi.d.ts.map +1 -1
  146. package/lib/locales/hi.js +1 -0
  147. package/lib/locales/hi.js.map +1 -1
  148. package/lib/locales/id.d.ts.map +1 -1
  149. package/lib/locales/id.js +1 -0
  150. package/lib/locales/id.js.map +1 -1
  151. package/lib/locales/it.d.ts.map +1 -1
  152. package/lib/locales/it.js +1 -0
  153. package/lib/locales/it.js.map +1 -1
  154. package/lib/locales/ja.d.ts.map +1 -1
  155. package/lib/locales/ja.js +1 -0
  156. package/lib/locales/ja.js.map +1 -1
  157. package/lib/locales/ko.d.ts.map +1 -1
  158. package/lib/locales/ko.js +1 -0
  159. package/lib/locales/ko.js.map +1 -1
  160. package/lib/locales/nl.d.ts.map +1 -1
  161. package/lib/locales/nl.js +1 -0
  162. package/lib/locales/nl.js.map +1 -1
  163. package/lib/locales/pl.d.ts.map +1 -1
  164. package/lib/locales/pl.js +1 -0
  165. package/lib/locales/pl.js.map +1 -1
  166. package/lib/locales/pt.d.ts.map +1 -1
  167. package/lib/locales/pt.js +1 -0
  168. package/lib/locales/pt.js.map +1 -1
  169. package/lib/locales/ru.d.ts.map +1 -1
  170. package/lib/locales/ru.js +1 -0
  171. package/lib/locales/ru.js.map +1 -1
  172. package/lib/locales/tr.d.ts.map +1 -1
  173. package/lib/locales/tr.js +1 -0
  174. package/lib/locales/tr.js.map +1 -1
  175. package/lib/locales/zh.d.ts.map +1 -1
  176. package/lib/locales/zh.js +1 -0
  177. package/lib/locales/zh.js.map +1 -1
  178. package/llms.txt +1 -1
  179. package/package.json +1 -1
package/lib/Theme.d.ts CHANGED
@@ -314,6 +314,10 @@ export interface ChatThemeChatList {
314
314
  headerBackground: string;
315
315
  /** Header title and icons. */
316
316
  headerText: string;
317
+ /** `ChatHeader`'s status line ("last seen", members). */
318
+ headerSubtitle: string;
319
+ /** `ChatHeader`'s status line while it reads "online" or "typing". */
320
+ headerSubtitleActive: string;
317
321
  /** Chat names. */
318
322
  name: string;
319
323
  /** The last message's text. */
@@ -414,6 +418,11 @@ export interface ChatTheme {
414
418
  chatList: ChatThemeChatList;
415
419
  /** Sender name colors, picked per user id (`avatar_nameInMessage*`); empty uses `colors.senderName`. */
416
420
  nameColors: string[];
421
+ /**
422
+ * The text size the user picked, as a multiplier of every size in `typography` (1 by default):
423
+ * messages, times, names, day and service pills, quotes and the composer grow together.
424
+ */
425
+ textScale?: number;
417
426
  }
418
427
  export type PartialChatTheme = {
419
428
  colors?: Partial<ChatThemeColors>;
@@ -435,6 +444,8 @@ export type PartialChatTheme = {
435
444
  attachments?: Partial<ChatThemeAttachments>;
436
445
  chatList?: Partial<ChatThemeChatList>;
437
446
  nameColors?: string[];
447
+ /** Multiplies every size in `typography`; see `ChatTheme.textScale`. */
448
+ textScale?: number;
438
449
  };
439
450
  export declare const defaultLightTheme: ChatTheme;
440
451
  export declare const defaultDarkTheme: ChatTheme;
@@ -1 +1 @@
1
- {"version":3,"file":"Theme.d.ts","sourceRoot":"","sources":["../src/Theme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Theme.d.ts","sourceRoot":"","sources":["../src/Theme.ts"],"names":[],"mappings":"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"}
package/lib/Theme.js CHANGED
@@ -252,6 +252,8 @@ export const defaultLightTheme = {
252
252
  background: '#FFFFFF',
253
253
  headerBackground: '#FFFFFF',
254
254
  headerText: '#1A1D21',
255
+ headerSubtitle: '#79817E',
256
+ headerSubtitleActive: '#298ACF',
255
257
  name: '#1A1D21',
256
258
  message: '#8E9091',
257
259
  senderPrefix: '#298ACF',
@@ -418,6 +420,8 @@ export const defaultDarkTheme = {
418
420
  background: '#1D2733',
419
421
  headerBackground: '#242D39',
420
422
  headerText: '#FFFFFF',
423
+ headerSubtitle: 'rgba(219, 242, 255, 0.49)',
424
+ headerSubtitleActive: '#73BBF7',
421
425
  name: '#E9EEF4',
422
426
  message: '#7D8B99',
423
427
  senderPrefix: '#E9EEF4',
@@ -482,6 +486,17 @@ export function mergeTheme(base, override) {
482
486
  ...base.typography[key],
483
487
  ...override.typography[key]
484
488
  };
489
+
490
+ // The text size multiplies whatever sizes the merge ends with, the app's own included.
491
+ const textScale = override.textScale ?? base.textScale ?? 1;
492
+ if (textScale !== (base.textScale ?? 1)) for (const key of Object.keys(mergedTypography)) {
493
+ const style = mergedTypography[key];
494
+ mergedTypography[key] = {
495
+ ...style,
496
+ fontSize: style.fontSize * textScale,
497
+ lineHeight: style.lineHeight != null ? style.lineHeight * textScale : undefined
498
+ };
499
+ }
485
500
  const overrideScreenEdge = override.spacing?.screenEdge;
486
501
  const mergedScreenEdge = typeof overrideScreenEdge === 'number' ? {
487
502
  left: overrideScreenEdge,
@@ -554,7 +569,8 @@ export function mergeTheme(base, override) {
554
569
  ...base.chatList,
555
570
  ...override.chatList
556
571
  },
557
- nameColors
572
+ nameColors,
573
+ textScale
558
574
  };
559
575
  }
560
576
 
package/lib/Theme.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Theme.js","names":["avatarPaletteDay","avatarPaletteEndDay","avatarPaletteNight","avatarPaletteEndNight","sharedRadii","bubble","bubbleGrouped","inputField","sendButton","reaction","dayPill","media","mediaInner","mediaTimePill","replyQuote","sharedComposer","minHeight","maxHeight","fieldPaddingH","insetIconSize","sharedVoice","cancelThreshold","lockThreshold","sharedSpacing","bubblePaddingV","bubblePaddingBottom","bubblePaddingH","withinGroup","betweenGroups","screenEdge","left","right","inputToolbarPaddingV","sharedTypography","message","fontSize","lineHeight","fontWeight","time","senderName","day","system","replyName","replyText","reactionCount","composer","sharedBubble","hasTail","isTimeInline","outgoingGradientMode","maxWidthInset","bigEmojiMaxCount","bigEmojiSizes","sharedEmojiKeyboardMetrics","defaultHeight","cellSize","emojiSize","defaultLightTheme","colors","accent","background","incomingBubble","outgoingBubble","incomingText","outgoingText","incomingMeta","outgoingMeta","ticksSent","ticksRead","separator","inputBackground","inputBarBackground","inputText","placeholder","dayPillBackground","dayPillText","surface","reactionBackground","reactionActiveBackground","outgoingOverlay","error","inputFieldBorder","incomingLink","outgoingLink","incomingBubbleShadow","outgoingBubbleShadow","incomingBubbleSelected","outgoingBubbleSelected","selectionBackground","mediaTimeBackground","mediaTimeText","incomingReplyLine","incomingReplyName","outgoingReplyLine","outgoingReplyName","incomingReaction","incomingReactionText","incomingReactionTextChosen","outgoingReaction","outgoingReactionText","outgoingReactionTextChosen","incomingVoiceTrack","incomingVoiceFill","outgoingVoiceTrack","outgoingVoiceFill","composerIcon","inputCursor","scrollToBottomBackground","scrollToBottomIcon","scrollToBottomBadge","scrollToBottomBadgeText","unreadSeparatorBackground","unreadSeparatorText","unreadSeparatorArrow","selectionCheckbox","selectionCheckboxCheck","radii","spacing","typography","avatar","size","palette","paletteEnd","textColor","voice","outgoingGradient","wallpaper","isEnabled","isAnimated","pattern","patternOpacity","nameColors","emojiKeyboard","icon","iconSelected","tabIndicator","sectionTitle","searchBackground","searchIcon","searchText","backspace","shadowLine","popupBackground","selector","contextMenu","text","pressed","destructive","scrim","reactionSelected","chatList","headerBackground","headerText","name","senderPrefix","attachment","typing","draft","date","check","badge","badgeMuted","badgeText","muteIcon","pinIcon","verified","online","divider","selectedRow","checkbox","swipeArchive","swipeUnarchive","archiveAvatar","fab","fabIcon","shimmer","shimmerOpacity","shimmerHighlight","attachments","dim","secondaryText","handle","tabBackground","tabText","tabSelected","tabSelectedText","checkboxCheck","cellBackground","sendButtonIcon","defaultDarkTheme","resolveTheme","colorScheme","light","dark","isDark","mergeTheme","base","override","mergedTypography","key","Object","keys","overrideScreenEdge","mergedScreenEdge","undefined","getUserColorIndex","id","count","Number","isFinite","Math","abs","trunc","String","hash","i","length","charCodeAt","getNameColor","theme"],"sources":["../src/Theme.ts"],"sourcesContent":["import { ImageSourcePropType } from 'react-native'\n\n/**\n * Centralized design tokens for the chat UI.\n *\n * The defaults are a classic day theme (pale green outgoing bubbles over the green swirl\n * wallpaper) and a \"Dark Blue\" night theme (a purple-to-blue outgoing gradient fixed to the\n * screen). Consumers can override any subset through the `theme` /\n * `darkTheme` props on `Chat`; overrides are deep-merged over these defaults, and explicit\n * per-component style props still win over the theme. Components read the resolved theme via\n * the `useTheme` hook.\n */\n\nexport interface ChatThemeColors {\n /** Accent used for the send button, record button and active states. */\n accent: string\n /** Chat background, shown when the wallpaper is off (`theme.wallpaper.isEnabled`). */\n background: string\n /** Incoming (left) bubble background. */\n incomingBubble: string\n /**\n * Outgoing (right) bubble background. With `bubble.outgoingGradient` set, the gradient is\n * drawn instead and this is only the base color media controls are tinted with.\n */\n outgoingBubble: string\n /** Incoming message text. */\n incomingText: string\n /** Outgoing message text. */\n outgoingText: string\n /** Time/meta text inside incoming bubbles. */\n incomingMeta: string\n /** Time/meta text inside outgoing bubbles. */\n outgoingMeta: string\n /** Sender name color when `nameColors` is empty. */\n senderName: string\n /** Delivery tick color before the message is read. */\n ticksSent: string\n /** Delivery tick color once the message is read. */\n ticksRead: string\n /** Hairlines and dividers. */\n separator: string\n /** The floating composer pill (at 85%). */\n inputBackground: string\n /** The band behind the composer pill; transparent so the wallpaper shows through. */\n inputBarBackground: string\n /** Composer text color. */\n inputText: string\n /** Composer placeholder color. */\n placeholder: string\n /** Date and service pill background (stands in for a wallpaper-shaded pill). */\n dayPillBackground: string\n /** Date and service pill text. */\n dayPillText: string\n /** Surface color for floating elements (menus, sheets). */\n surface: string\n /** Neutral tint for secondary surfaces (location card, media card). */\n reactionBackground: string\n /** Active tint kept for custom reaction displays. */\n reactionActiveBackground: string\n /** Translucent overlay drawn on top of outgoing bubbles (location and media cards). */\n outgoingOverlay: string\n /** Errors: the failed-message badge, the recording trash can, destructive actions. */\n error: string\n /** Stroke around the composer pill and the glass buttons. */\n inputFieldBorder: string\n\n /** Links in incoming messages. */\n incomingLink: string\n /** Links in outgoing messages. */\n outgoingLink: string\n /** The 1px drop under incoming bubbles; transparent to turn it off. */\n incomingBubbleShadow: string\n /** The 1px drop under outgoing bubbles; transparent to turn it off. */\n outgoingBubbleShadow: string\n /** Incoming bubble tint while selected or flashed after a quote jump. */\n incomingBubbleSelected: string\n /** Outgoing bubble tint while selected or flashed after a quote jump. */\n outgoingBubbleSelected: string\n /** The band across a highlighted row. */\n selectionBackground: string\n /** Time pill over photos. */\n mediaTimeBackground: string\n /** Time and ticks on that pill. */\n mediaTimeText: string\n /** Reply quote line in incoming bubbles when `nameColors` is empty. */\n incomingReplyLine: string\n /** Reply quote name in incoming bubbles when `nameColors` is empty. */\n incomingReplyName: string\n /** Reply quote line in outgoing bubbles. */\n outgoingReplyLine: string\n /** Reply quote name in outgoing bubbles. */\n outgoingReplyName: string\n /** Reaction pill accent in incoming bubbles: solid when chosen, 15.6% when not. */\n incomingReaction: string\n /** Reaction count on an unchosen pill in incoming bubbles. */\n incomingReactionText: string\n /** Reaction count on a chosen pill in incoming bubbles. */\n incomingReactionTextChosen: string\n /** Reaction pill accent in outgoing bubbles. */\n outgoingReaction: string\n /** Reaction count on an unchosen pill in outgoing bubbles. */\n outgoingReactionText: string\n /** Reaction count on a chosen pill in outgoing bubbles. */\n outgoingReactionTextChosen: string\n /** Unplayed voice bars and audio track in incoming bubbles. */\n incomingVoiceTrack: string\n /** Played bars and the play button in incoming bubbles. */\n incomingVoiceFill: string\n /** Unplayed voice bars and audio track in outgoing bubbles. */\n outgoingVoiceTrack: string\n /** Played bars and the play button in outgoing bubbles. */\n outgoingVoiceFill: string\n /** Emoji and attach icons in the composer (`glass_defaultIcon`). */\n composerIcon: string\n /** Composer caret. */\n inputCursor: string\n /** Scroll-to-bottom glass circle. */\n scrollToBottomBackground: string\n /** Scroll-to-bottom chevron. */\n scrollToBottomIcon: string\n /** Unread counter on the scroll-to-bottom button. */\n scrollToBottomBadge: string\n /** Unread counter text. */\n scrollToBottomBadgeText: string\n /** The \"Unread Messages\" bar. */\n unreadSeparatorBackground: string\n /** Its label. */\n unreadSeparatorText: string\n /** Its arrow. */\n unreadSeparatorArrow: string\n /** A selected message's check circle in selection mode (`checkbox`). */\n selectionCheckbox: string\n /** The check mark and the empty circle's ring (`checkboxCheck`). */\n selectionCheckboxCheck: string\n}\n\nexport interface ChatThemeAvatar {\n size: number\n /** Initials avatar colors, picked per user id; the top of the gradient. */\n palette: string[]\n /** Bottom of each initials gradient, matched to `palette` by index; empty draws flat colors. */\n paletteEnd: string[]\n /** Initials text color drawn on a palette background. */\n textColor: string\n}\n\nexport interface ChatThemeRadii {\n bubble: number\n /** The tail-side corners of a bubble facing a grouped neighbour. */\n bubbleGrouped: number\n inputField: number\n sendButton: number\n reaction: number\n dayPill: number\n /** Photo corners inside a bubble. */\n media: number\n /** Photo corners next to other content (a name, a reply, a caption). */\n mediaInner: number\n /** The time pill over a photo. */\n mediaTimePill: number\n /** The reply quote box. */\n replyQuote: number\n}\n\nexport interface ChatThemeHorizontalEdge {\n left: number\n right: number\n}\n\nexport interface ChatThemeSpacing {\n /** Space above the first line of a bubble's text. */\n bubblePaddingV: number\n /** Space below the last line of a bubble's text. */\n bubblePaddingBottom: number\n bubblePaddingH: number\n withinGroup: number\n betweenGroups: number\n /** Horizontal inset applied to the input bar and its accessories (e.g. the reply preview). */\n screenEdge: ChatThemeHorizontalEdge\n /** Gap between the composer pill and the bottom of the chat. */\n inputToolbarPaddingV: number\n}\n\n/** Accepted shape for a `screenEdge` override: a single value for both sides, or either side individually. */\nexport type ChatThemeScreenEdgeOverride = number | Partial<ChatThemeHorizontalEdge>\n\nexport interface ChatThemeTextStyle {\n fontSize: number\n lineHeight?: number\n fontWeight?:\n | 'normal'\n | 'bold'\n | '100'\n | '200'\n | '300'\n | '400'\n | '500'\n | '600'\n | '700'\n | '800'\n | '900'\n}\n\nexport interface ChatThemeTypography {\n message: ChatThemeTextStyle\n time: ChatThemeTextStyle\n senderName: ChatThemeTextStyle\n day: ChatThemeTextStyle\n system: ChatThemeTextStyle\n /** Name in a reply quote. */\n replyName: ChatThemeTextStyle\n /** Text in a reply quote. */\n replyText: ChatThemeTextStyle\n /** Count on a reaction pill. */\n reactionCount: ChatThemeTextStyle\n /** Composer text. */\n composer: ChatThemeTextStyle\n}\n\nexport interface ChatThemeComposer {\n /** Resting height of the composer field (single line). */\n minHeight: number\n /** Max height before the field scrolls internally instead of growing. */\n maxHeight: number\n /** Horizontal padding inside the field pill. */\n fieldPaddingH: number\n /** Size of the inset icons (emoji, attachment, camera). */\n insetIconSize: number\n}\n\nexport interface ChatThemeVoice {\n /**\n * Full slide-to-cancel distance (px), capped at 35% of the window width.\n * Reaching it cancels the take mid-drag; releasing past 55% of\n * it cancels too.\n */\n cancelThreshold: number\n /** Vertical slide distance (px) to lock hands-free recording. */\n lockThreshold: number\n}\n\nexport interface ChatThemeBubble {\n /** Draw a curled tail on the last bubble of each run. */\n hasTail: boolean\n /** Put the time on the last line of text when it fits; `false` gives it a row. */\n isTimeInline: boolean\n /**\n * Gradient stops for outgoing bubbles, top to bottom, or `null` for the solid\n * `colors.outgoingBubble`.\n */\n outgoingGradient: string[] | null\n /**\n * `'screen'`: one gradient spans the message list and each bubble shows its slice, so a\n * bubble changes color as it scrolls. `'bubble'`: every bubble carries the whole\n * gradient, which costs nothing while scrolling.\n */\n outgoingGradientMode: 'screen' | 'bubble'\n /**\n * Text column inset: a bubble's text is at most `min(width, height) - maxWidthInset` wide\n * (80 by default), and narrower by the avatar column when avatars show.\n */\n maxWidthInset: number\n /**\n * Big emoji: a message of at most this many emoji (and nothing else) drops its\n * bubble and draws them large. `0` turns it off.\n */\n bigEmojiMaxCount: number\n /** Font size of big emoji by count: index 0 for one emoji, the last entry for that many or more. */\n bigEmojiSizes: number[]\n}\n\nexport interface ChatThemeWallpaper {\n /** Draw the wallpaper; off, the chat shows `colors.background`. */\n isEnabled: boolean\n /** Three or four colors for the swirl gradient. */\n colors: string[]\n /** Shift the gradient one step per outgoing message (500ms, bezier(0.33, 0, 0, 1)). */\n isAnimated: boolean\n /** An image tiled over the gradient, e.g. a doodle pattern; none is bundled. */\n pattern?: ImageSourcePropType | null\n /** Pattern opacity (0.34 day, 0.38 night). */\n patternOpacity: number\n /** Pattern tint; defaults to black over a light wallpaper and white over a dark one. */\n patternColor?: string\n}\n\nexport interface ChatThemeEmojiKeyboard {\n /** Panel background. */\n background: string\n /** Tab icons. */\n icon: string\n /** The selected tab's icon. */\n iconSelected: string\n /** The round-rect behind the selected tab (the tab icon color at 18%). */\n tabIndicator: string\n /** Section headers (\"Smileys & People\"). */\n sectionTitle: string\n /** The search pill. */\n searchBackground: string\n /** Search icon and hint. */\n searchIcon: string\n /** Text typed into search. */\n searchText: string\n /** The backspace key. */\n backspace: string\n /** The hairline above the tab strip. */\n shadowLine: string\n /** The skin-tone popup (`dialogBackground`). */\n popupBackground: string\n /** The press highlight in the popup and on cells. */\n selector: string\n /** Panel height before any system keyboard has been seen (200). */\n defaultHeight: number\n /** Target width of a grid cell; the column count is `max(1, width / cellSize)` (45). */\n cellSize: number\n /** Emoji glyph size in a cell. */\n emojiSize: number\n}\n\nexport interface ChatThemeContextMenu {\n /** Menu and reactions bar fill (`actionBarDefaultSubmenuBackground`). */\n background: string\n /** Item text (`actionBarDefaultSubmenuItem`). */\n text: string\n /** Item icons (`actionBarDefaultSubmenuItemIcon`). */\n icon: string\n /** The 8dp gap between item groups (`actionBarDefaultSubmenuSeparator`). */\n separator: string\n /** Pressed item (`dialogButtonSelector`). */\n pressed: string\n /** A `destructive` item (`text_RedRegular`). */\n destructive: string\n /** The dim over the chat while the menu is open (black at 0.2). */\n scrim: string\n /** The circle behind a reaction you already chose. */\n reactionSelected: string\n}\n\n/** `ChatList`: the list of chats. */\nexport interface ChatThemeChatList {\n background: string\n headerBackground: string\n /** Header title and icons. */\n headerText: string\n /** Chat names. */\n name: string\n /** The last message's text. */\n message: string\n /** \"You:\" / \"Anna:\" before a group's last message. */\n senderPrefix: string\n /** \"Photo\", \"Voice message\"... when the last message has no text. */\n attachment: string\n /** \"typing…\". */\n typing: string\n /** \"Draft:\". */\n draft: string\n /** The last message's time. */\n date: string\n /** Sent / read checks on your last message. */\n check: string\n /** Unread counter. */\n badge: string\n /** Unread counter of a muted chat. */\n badgeMuted: string\n badgeText: string\n muteIcon: string\n /** The pin and the reorder handle. */\n pinIcon: string\n verified: string\n /** The online dot on an avatar. */\n online: string\n divider: string\n /** A pressed row. */\n pressed: string\n /** A selected row. */\n selectedRow: string\n /** The selection check on an avatar. */\n checkbox: string\n /** Behind a row swiped to archive, and the circle that grows past the threshold. */\n swipeArchive: string\n swipeUnarchive: string\n /** The \"Archived Chats\" folder avatar. */\n archiveAvatar: string\n /** The new-chat button. */\n fab: string\n fabIcon: string\n /** The loading placeholder: its bars (and their opacity), and the band sweeping over them. */\n shimmer: string\n shimmerOpacity: number\n shimmerHighlight: string\n}\n\nexport interface ChatThemeAttachments {\n /** Sheet background (`dialogBackground`). */\n background: string\n /** The dim behind the sheet (black at 51/255). */\n dim: string\n /** Titles and the caption text (`dialogTextBlack`). */\n text: string\n /** Secondary text: file sizes, hints, the caption placeholder. */\n secondaryText: string\n /** The drag handle. */\n handle: string\n /** The floating tab pill (`windowBackgroundWhite` at 0.85). */\n tabBackground: string\n /** Unselected tab icon and label (`glass_tabUnselected`). */\n tabText: string\n /** Selected tab icon, and its capsule at 9% (`glass_tabSelected`). */\n tabSelected: string\n /** Selected tab label. */\n tabSelectedText: string\n /** Selection disc. */\n checkbox: string\n /** Number / check on the disc. */\n checkboxCheck: string\n /** Empty photo cell. */\n cellBackground: string\n /** Send button (`dialogFloatingButton`). */\n sendButton: string\n /** Send button icon. */\n sendButtonIcon: string\n}\n\nexport interface ChatTheme {\n colors: ChatThemeColors\n radii: ChatThemeRadii\n spacing: ChatThemeSpacing\n typography: ChatThemeTypography\n avatar: ChatThemeAvatar\n sendButton: { size: number }\n composer: ChatThemeComposer\n voice: ChatThemeVoice\n bubble: ChatThemeBubble\n wallpaper: ChatThemeWallpaper\n /** The built-in emoji keyboard. */\n emojiKeyboard: ChatThemeEmojiKeyboard\n /** The long-press menu and reactions bar. */\n contextMenu: ChatThemeContextMenu\n /** The built-in attachment menu. */\n attachments: ChatThemeAttachments\n /** The chat list (`ChatList`). */\n chatList: ChatThemeChatList\n /** Sender name colors, picked per user id (`avatar_nameInMessage*`); empty uses `colors.senderName`. */\n nameColors: string[]\n}\n\nexport type PartialChatTheme = {\n colors?: Partial<ChatThemeColors>\n radii?: Partial<ChatThemeRadii>\n spacing?: Partial<Omit<ChatThemeSpacing, 'screenEdge'>> & { screenEdge?: ChatThemeScreenEdgeOverride }\n typography?: Partial<Record<keyof ChatThemeTypography, Partial<ChatThemeTextStyle>>>\n avatar?: Partial<ChatThemeAvatar>\n sendButton?: Partial<{ size: number }>\n composer?: Partial<ChatThemeComposer>\n voice?: Partial<ChatThemeVoice>\n bubble?: Partial<ChatThemeBubble>\n wallpaper?: Partial<ChatThemeWallpaper>\n emojiKeyboard?: Partial<ChatThemeEmojiKeyboard>\n contextMenu?: Partial<ChatThemeContextMenu>\n attachments?: Partial<ChatThemeAttachments>\n chatList?: Partial<ChatThemeChatList>\n nameColors?: string[]\n}\n\n// Avatars: a vertical gradient per color, `abs(id % 7)` -> red, orange, violet, green,\n// cyan, blue, pink.\nconst avatarPaletteDay = ['#FF845E', '#FEBB5B', '#B694F9', '#9AD164', '#5BCBE3', '#5CAFFA', '#FF8AAC']\nconst avatarPaletteEndDay = ['#D45246', '#F68136', '#6C61DF', '#46BA43', '#359AD4', '#408ACF', '#D95574']\n// Dark Blue overrides only red and orange.\nconst avatarPaletteNight = ['#E86C6A', '#F2BC64', '#B694F9', '#9AD164', '#5BCBE3', '#5CAFFA', '#FF8AAC']\nconst avatarPaletteEndNight = ['#E14747', '#E58943', '#6C61DF', '#46BA43', '#359AD4', '#408ACF', '#D95574']\n\nconst sharedRadii: ChatThemeRadii = {\n // 17, and `min(6, bubble)` near a grouped neighbour.\n bubble: 17,\n bubbleGrouped: 6,\n // The composer island.\n inputField: 22,\n sendButton: 18,\n // Reaction pills are full capsules: 26 tall, radius 13.\n reaction: 13,\n // Date / service pill radius.\n dayPill: 11,\n // Photos: `bubbleRadius - 2`, 4 next to other content.\n media: 15,\n mediaInner: 4,\n mediaTimePill: 8,\n replyQuote: 5,\n}\n\nconst sharedComposer: ChatThemeComposer = {\n // One line at rest; the field grows to 6 lines of 21.\n minHeight: 44,\n maxHeight: 149,\n fieldPaddingH: 12,\n insetIconSize: 24,\n}\n\n// The slide-to-cancel distance (140dp, capped at 35% of the width) and the\n// lock distance (57dp).\nconst sharedVoice: ChatThemeVoice = {\n cancelThreshold: 140,\n lockThreshold: 57,\n}\n\nconst sharedSpacing: ChatThemeSpacing = {\n // 5 above the first line, 8.5 below the last, 9 either side.\n bubblePaddingV: 5,\n bubblePaddingBottom: 8.5,\n bubblePaddingH: 9,\n // 2 inside a run, 6 between runs.\n withinGroup: 2,\n betweenGroups: 6,\n // The composer island's 7 side margins and 9 above the bottom inset.\n screenEdge: { left: 7, right: 7 },\n inputToolbarPaddingV: 9,\n}\n\nconst sharedTypography: ChatThemeTypography = {\n // 16 body, line spacing 1.0: Roboto's natural ~19.\n message: { fontSize: 16, lineHeight: 19, fontWeight: '400' },\n time: { fontSize: 12, lineHeight: 14, fontWeight: '400' },\n // `(2 * 16 + 10) / 3` = 14, Roboto Medium - the only emphasis weight.\n senderName: { fontSize: 14, lineHeight: 17, fontWeight: '500' },\n day: { fontSize: 14, lineHeight: 17, fontWeight: '500' },\n system: { fontSize: 14, lineHeight: 17, fontWeight: '500' },\n replyName: { fontSize: 14, lineHeight: 17, fontWeight: '500' },\n replyText: { fontSize: 14, lineHeight: 17, fontWeight: '400' },\n reactionCount: { fontSize: 12, fontWeight: '500' },\n // The input field is 18.\n composer: { fontSize: 18, lineHeight: 21, fontWeight: '400' },\n}\n\nconst sharedBubble: Omit<ChatThemeBubble, 'outgoingGradient'> = {\n hasTail: true,\n isTimeInline: true,\n outgoingGradientMode: 'screen',\n maxWidthInset: 80,\n // Past a screenful a lone-emoji message stops being a\n // sticker-like moment and is just a lot of emoji, so the default stops at 20.\n bigEmojiMaxCount: 20,\n // `.34/.28/.22/.19 × 120dp`: plain emoji use the non-animated sizes, 1-2 emoji at [2],\n // 3 at [3], 4 at [4], 5+ at [5].\n bigEmojiSizes: [40.8, 40.8, 33.6, 26.4, 22.8],\n}\n\n// The emoji panel: 200 before any keyboard was measured, 45 per column, 32 glyphs.\nconst sharedEmojiKeyboardMetrics = { defaultHeight: 200, cellSize: 45, emojiSize: 30 }\n\nexport const defaultLightTheme: ChatTheme = {\n colors: {\n accent: '#229AF0',\n // The fallback when no wallpaper can be drawn.\n background: '#D6E4EF',\n incomingBubble: '#FFFFFF',\n outgoingBubble: '#EFFFDE',\n incomingText: '#000000',\n outgoingText: '#000000',\n incomingMeta: '#A1AAB3',\n outgoingMeta: '#70B15C',\n senderName: '#298ACF',\n ticksSent: '#5DB050',\n ticksRead: '#5DB050',\n separator: 'rgba(0, 0, 0, 0.08)',\n // #FFFFFF at 216/255.\n inputBackground: 'rgba(255, 255, 255, 0.847)',\n inputBarBackground: 'transparent',\n inputText: '#000000',\n placeholder: '#858A84',\n dayPillBackground: 'rgba(0, 0, 0, 0.18)',\n dayPillText: '#FFFFFF',\n surface: '#FFFFFF',\n reactionBackground: 'rgba(0, 0, 0, 0.06)',\n reactionActiveBackground: 'rgba(34, 154, 240, 0.15)',\n outgoingOverlay: 'rgba(110, 185, 105, 0.1)',\n error: '#DB3535',\n inputFieldBorder: '#FFFFFF',\n\n incomingLink: '#2678B6',\n outgoingLink: '#2678B6',\n incomingBubbleShadow: 'rgba(29, 55, 83, 0.16)',\n outgoingBubbleShadow: 'rgba(30, 117, 12, 0.16)',\n incomingBubbleSelected: '#ECF7FD',\n outgoingBubbleSelected: '#D9F7C5',\n selectionBackground: 'rgba(10, 144, 240, 0.157)',\n mediaTimeBackground: 'rgba(0, 0, 0, 0.4)',\n mediaTimeText: '#FFFFFF',\n incomingReplyLine: '#599FD8',\n incomingReplyName: '#298ACF',\n outgoingReplyLine: '#6EB969',\n outgoingReplyName: '#55AB4F',\n incomingReaction: '#229AF0',\n incomingReactionText: '#298ACF',\n incomingReactionTextChosen: '#FFFFFF',\n outgoingReaction: '#78C272',\n outgoingReactionText: '#55AB4F',\n outgoingReactionTextChosen: '#FFFFFF',\n incomingVoiceTrack: '#DEE5EB',\n incomingVoiceFill: '#229AF0',\n outgoingVoiceTrack: '#BBE3AC',\n outgoingVoiceFill: '#78C272',\n composerIcon: 'rgba(27, 34, 39, 0.6)',\n inputCursor: '#54A1DB',\n scrollToBottomBackground: 'rgba(255, 255, 255, 0.847)',\n scrollToBottomIcon: 'rgba(27, 34, 39, 0.6)',\n scrollToBottomBadge: '#229AF0',\n scrollToBottomBadgeText: '#FFFFFF',\n unreadSeparatorBackground: '#FFFFFF',\n unreadSeparatorText: '#5695CC',\n unreadSeparatorArrow: '#A2B5C7',\n selectionCheckbox: '#5EC245',\n selectionCheckboxCheck: '#FFFFFF',\n },\n radii: sharedRadii,\n spacing: sharedSpacing,\n typography: sharedTypography,\n avatar: { size: 42, palette: avatarPaletteDay, paletteEnd: avatarPaletteEndDay, textColor: '#FFFFFF' },\n sendButton: { size: 36 },\n composer: sharedComposer,\n voice: sharedVoice,\n bubble: { ...sharedBubble, outgoingGradient: null },\n wallpaper: {\n isEnabled: true,\n colors: ['#DBDDBB', '#6BA587', '#D5D88D', '#88B884'],\n isAnimated: true,\n pattern: null,\n patternOpacity: 0.34,\n },\n nameColors: ['#CC5049', '#D67722', '#955CDB', '#40A920', '#309EBA', '#368AD1', '#C7508B'],\n emojiKeyboard: {\n ...sharedEmojiKeyboardMetrics,\n background: '#F0F2F5',\n icon: '#9DA4AB',\n iconSelected: '#5E6976',\n tabIndicator: 'rgba(157, 164, 171, 0.18)',\n sectionTitle: '#828B94',\n searchBackground: '#E5E9EE',\n searchIcon: '#94A1AF',\n searchText: '#000000',\n backspace: '#8C9197',\n shadowLine: 'rgba(0, 0, 0, 0.07)',\n popupBackground: '#FFFFFF',\n selector: 'rgba(0, 0, 0, 0.06)',\n },\n contextMenu: {\n background: '#FFFFFF',\n text: '#1A1D21',\n icon: '#1A1D21',\n separator: '#F5F5F5',\n pressed: 'rgba(0, 0, 0, 0.06)',\n destructive: '#CC2929',\n scrim: 'rgba(0, 0, 0, 0.2)',\n reactionSelected: 'rgba(0, 0, 0, 0.06)',\n },\n chatList: {\n background: '#FFFFFF',\n headerBackground: '#FFFFFF',\n headerText: '#1A1D21',\n name: '#1A1D21',\n message: '#8E9091',\n senderPrefix: '#298ACF',\n attachment: '#298ACF',\n typing: '#298ACF',\n draft: '#DD4B39',\n date: '#848688',\n check: '#46AA36',\n badge: '#229AF0',\n badgeMuted: '#BEC3C7',\n badgeText: '#FFFFFF',\n muteIcon: '#BDC1C4',\n pinIcon: '#919294',\n verified: '#33A8E6',\n online: '#4BCB1C',\n divider: '#D9D9D9',\n pressed: 'rgba(0, 0, 0, 0.06)',\n selectedRow: 'rgba(10, 144, 240, 0.08)',\n checkbox: '#5EC245',\n swipeArchive: '#229AF0',\n swipeUnarchive: '#9FAAB3',\n archiveAvatar: '#B8C2CC',\n fab: '#229AF0',\n fabIcon: '#FFFFFF',\n shimmer: '#000000',\n shimmerOpacity: 0.06,\n shimmerHighlight: '#FFFFFF',\n },\n attachments: {\n background: '#FFFFFF',\n dim: 'rgba(0, 0, 0, 0.2)',\n text: '#222222',\n secondaryText: '#8A8A8A',\n handle: 'rgba(0, 0, 0, 0.15)',\n tabBackground: 'rgba(255, 255, 255, 0.85)',\n tabText: '#1A1D21',\n tabSelected: '#1A91E6',\n tabSelectedText: '#0D7FCF',\n checkbox: '#229AF0',\n checkboxCheck: '#FFFFFF',\n cellBackground: 'rgba(0, 0, 0, 0.047)',\n sendButton: '#229AF0',\n sendButtonIcon: '#FFFFFF',\n },\n}\n\nexport const defaultDarkTheme: ChatTheme = {\n colors: {\n accent: '#229AF0',\n background: '#0E141A',\n incomingBubble: '#232E3B',\n // The gradient's bottom stop; the bubble itself draws `bubble.outgoingGradient`.\n outgoingBubble: '#258DE5',\n incomingText: '#FAFAFA',\n outgoingText: '#FFFFFF',\n incomingMeta: 'rgba(128, 145, 160, 0.85)',\n outgoingMeta: '#FFFFFF',\n senderName: '#79C4FC',\n ticksSent: '#FFFFFF',\n ticksRead: '#FFFFFF',\n separator: 'rgba(255, 255, 255, 0.1)',\n inputBackground: 'rgba(33, 45, 59, 0.85)',\n inputBarBackground: 'transparent',\n inputText: '#FFFFFF',\n placeholder: 'rgba(219, 239, 255, 0.431)',\n dayPillBackground: 'rgba(53, 66, 81, 0.51)',\n dayPillText: '#FFFFFF',\n surface: '#212D3B',\n reactionBackground: 'rgba(255, 255, 255, 0.08)',\n reactionActiveBackground: 'rgba(96, 157, 210, 0.22)',\n outgoingOverlay: 'rgba(255, 255, 255, 0.12)',\n error: '#F6574E',\n inputFieldBorder: 'rgba(255, 255, 255, 0.157)',\n\n incomingLink: '#79C4FC',\n outgoingLink: '#FFFFFF',\n incomingBubbleShadow: 'rgba(0, 0, 0, 0.196)',\n outgoingBubbleShadow: 'transparent',\n incomingBubbleSelected: '#314A61',\n // Drawn over the gradient.\n outgoingBubbleSelected: 'rgba(255, 255, 255, 0.078)',\n selectionBackground: 'rgba(95, 157, 227, 0.165)',\n mediaTimeBackground: 'rgba(0, 0, 0, 0.4)',\n mediaTimeText: '#FFFFFF',\n incomingReplyLine: '#79C4FC',\n incomingReplyName: '#79C4FC',\n outgoingReplyLine: '#FFFFFF',\n outgoingReplyName: '#FFFFFF',\n incomingReaction: '#609DD2',\n incomingReactionText: '#FFFFFF',\n incomingReactionTextChosen: '#FFFFFF',\n outgoingReaction: '#FFFFFF',\n outgoingReactionText: '#FFFFFF',\n outgoingReactionTextChosen: '#1D2733',\n incomingVoiceTrack: '#5D6F80',\n incomingVoiceFill: '#64B5EF',\n outgoingVoiceTrack: 'rgba(255, 255, 255, 0.3)',\n outgoingVoiceFill: '#FFFFFF',\n composerIcon: 'rgba(255, 255, 255, 0.627)',\n inputCursor: '#54A1DB',\n scrollToBottomBackground: 'rgba(33, 45, 59, 0.85)',\n scrollToBottomIcon: 'rgba(255, 255, 255, 0.627)',\n scrollToBottomBadge: '#51AAEE',\n scrollToBottomBadgeText: '#FFFFFF',\n unreadSeparatorBackground: '#253442',\n unreadSeparatorText: 'rgba(255, 255, 255, 0.855)',\n unreadSeparatorArrow: '#5A6B7A',\n selectionCheckbox: '#5EC245',\n selectionCheckboxCheck: '#FFFFFF',\n },\n radii: sharedRadii,\n spacing: sharedSpacing,\n typography: sharedTypography,\n avatar: { size: 42, palette: avatarPaletteNight, paletteEnd: avatarPaletteEndNight, textColor: '#FFFFFF' },\n sendButton: { size: 36 },\n composer: sharedComposer,\n voice: sharedVoice,\n bubble: {\n ...sharedBubble,\n // Purple at the top of the list, blue at the bottom.\n outgoingGradient: ['#9F3EAA', '#8146D7', '#4272DF', '#258DE5'],\n },\n wallpaper: {\n isEnabled: true,\n colors: ['#0E141A', '#172431', '#0F171E', '#141C2B'],\n isAnimated: true,\n pattern: null,\n patternOpacity: 0.38,\n },\n nameColors: ['#E88878', '#E8AB5A', '#8C8DEA', '#7DD071', '#53CCC6', '#5CADEA', '#E8749A'],\n emojiKeyboard: {\n ...sharedEmojiKeyboardMetrics,\n background: '#1D2733',\n icon: '#677687',\n iconSelected: '#64B5EF',\n tabIndicator: 'rgba(103, 118, 135, 0.18)',\n sectionTitle: '#828B94',\n // Dark Blue leaves the search pill at the day color; in the chat's glass panel it is the\n // icon color at 6%, which is what reads right on the dark sheet.\n searchBackground: 'rgba(255, 255, 255, 0.06)',\n searchIcon: '#94A1AF',\n searchText: '#FFFFFF',\n backspace: '#677687',\n shadowLine: 'rgba(0, 0, 0, 0.196)',\n popupBackground: '#212D3B',\n selector: 'rgba(255, 255, 255, 0.08)',\n },\n contextMenu: {\n background: '#283848',\n text: '#FFFFFF',\n icon: '#FFFFFF',\n separator: '#1F2E3F',\n pressed: '#324156',\n destructive: '#EE686F',\n scrim: 'rgba(0, 0, 0, 0.2)',\n reactionSelected: 'rgba(255, 255, 255, 0.08)',\n },\n chatList: {\n background: '#1D2733',\n headerBackground: '#242D39',\n headerText: '#FFFFFF',\n name: '#E9EEF4',\n message: '#7D8B99',\n senderPrefix: '#E9EEF4',\n attachment: '#7D8E98',\n typing: '#64AFE9',\n draft: 'rgba(252, 71, 74, 0.85)',\n date: '#737F8B',\n check: '#64B5EF',\n badge: '#64B5EF',\n badgeMuted: '#3E5263',\n badgeText: '#FFFFFF',\n muteIcon: '#4E5F6A',\n pinIcon: '#586D80',\n verified: '#64B5EF',\n online: '#64B5EF',\n divider: 'rgba(0, 0, 0, 0.58)',\n pressed: 'rgba(255, 255, 255, 0.05)',\n selectedRow: 'rgba(95, 157, 227, 0.16)',\n checkbox: '#5EC245',\n swipeArchive: '#5796CC',\n swipeUnarchive: '#2E3E4B',\n archiveAvatar: '#384B5A',\n fab: '#229AF0',\n fabIcon: '#FFFFFF',\n shimmer: '#E6F7FF',\n shimmerOpacity: 0.08,\n shimmerHighlight: '#283848',\n },\n attachments: {\n background: '#212D3B',\n dim: 'rgba(0, 0, 0, 0.2)',\n text: '#FFFFFF',\n secondaryText: '#7D8B99',\n handle: 'rgba(255, 255, 255, 0.15)',\n tabBackground: 'rgba(29, 39, 51, 0.85)',\n tabText: '#FFFFFF',\n tabSelected: '#229AF0',\n tabSelectedText: '#229AF0',\n checkbox: '#229AF0',\n checkboxCheck: '#FFFFFF',\n cellBackground: 'rgba(255, 255, 255, 0.05)',\n sendButton: '#229AF0',\n sendButtonIcon: '#FFFFFF',\n },\n}\n\nexport interface ChatThemeOverrides {\n light?: PartialChatTheme\n dark?: PartialChatTheme\n}\n\n/**\n * Resolve the active theme for a color scheme, applying the matching override.\n * Used by `Chat` to compute the theme once per change and share it via context.\n */\nexport function resolveTheme (\n colorScheme: 'light' | 'dark' | null | undefined,\n light?: PartialChatTheme,\n dark?: PartialChatTheme\n): ChatTheme {\n const isDark = colorScheme === 'dark'\n return mergeTheme(isDark ? defaultDarkTheme : defaultLightTheme, isDark ? dark : light)\n}\n\n/** Deep-merge a partial theme over a base theme (two levels deep; arrays are replaced). */\nexport function mergeTheme (base: ChatTheme, override?: PartialChatTheme): ChatTheme {\n if (!override)\n return base\n\n const mergedTypography = { ...base.typography }\n if (override.typography)\n for (const key of Object.keys(override.typography) as Array<keyof ChatThemeTypography>)\n mergedTypography[key] = { ...base.typography[key], ...override.typography[key] }\n\n const overrideScreenEdge = override.spacing?.screenEdge\n const mergedScreenEdge: ChatThemeHorizontalEdge = typeof overrideScreenEdge === 'number'\n ? { left: overrideScreenEdge, right: overrideScreenEdge }\n : { ...base.spacing.screenEdge, ...overrideScreenEdge }\n\n // An app that picks its own outgoing color, sender color or avatar palette keeps seeing it:\n // the gradient, the per-user name colors and the avatar gradients would otherwise paint over\n // the override.\n const bubble = { ...base.bubble, ...override.bubble }\n if (override.colors?.outgoingBubble && override.bubble?.outgoingGradient === undefined)\n bubble.outgoingGradient = null\n\n const avatar = { ...base.avatar, ...override.avatar }\n if (override.avatar?.palette && override.avatar.paletteEnd === undefined)\n avatar.paletteEnd = []\n\n const nameColors = override.nameColors ??\n (override.colors?.senderName ? [] : base.nameColors)\n\n return {\n colors: { ...base.colors, ...override.colors },\n radii: { ...base.radii, ...override.radii },\n spacing: { ...base.spacing, ...override.spacing, screenEdge: mergedScreenEdge },\n typography: mergedTypography,\n avatar,\n sendButton: { ...base.sendButton, ...override.sendButton },\n composer: { ...base.composer, ...override.composer },\n voice: { ...base.voice, ...override.voice },\n bubble,\n wallpaper: { ...base.wallpaper, ...override.wallpaper },\n emojiKeyboard: { ...base.emojiKeyboard, ...override.emojiKeyboard },\n contextMenu: { ...base.contextMenu, ...override.contextMenu },\n attachments: { ...base.attachments, ...override.attachments },\n chatList: { ...base.chatList, ...override.chatList },\n nameColors,\n }\n}\n\n/** The per-user color index: `abs(id % 7)` for numeric ids, a stable hash for strings. */\nexport function getUserColorIndex (id: string | number | undefined, count: number): number {\n if (count <= 0 || id == null)\n return 0\n\n if (typeof id === 'number' && Number.isFinite(id))\n return Math.abs(Math.trunc(id) % count)\n\n const text = String(id)\n let hash = 0\n for (let i = 0; i < text.length; i += 1)\n hash = (hash * 31 + text.charCodeAt(i)) | 0\n\n return Math.abs(hash % count)\n}\n\n/** The sender name color for a user: their slot in `nameColors`, or `colors.senderName`. */\nexport function getNameColor (theme: ChatTheme, id: string | number | undefined): string {\n if (!theme.nameColors.length)\n return theme.colors.senderName\n\n return theme.nameColors[getUserColorIndex(id, theme.nameColors.length)]\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Theme.js","names":["avatarPaletteDay","avatarPaletteEndDay","avatarPaletteNight","avatarPaletteEndNight","sharedRadii","bubble","bubbleGrouped","inputField","sendButton","reaction","dayPill","media","mediaInner","mediaTimePill","replyQuote","sharedComposer","minHeight","maxHeight","fieldPaddingH","insetIconSize","sharedVoice","cancelThreshold","lockThreshold","sharedSpacing","bubblePaddingV","bubblePaddingBottom","bubblePaddingH","withinGroup","betweenGroups","screenEdge","left","right","inputToolbarPaddingV","sharedTypography","message","fontSize","lineHeight","fontWeight","time","senderName","day","system","replyName","replyText","reactionCount","composer","sharedBubble","hasTail","isTimeInline","outgoingGradientMode","maxWidthInset","bigEmojiMaxCount","bigEmojiSizes","sharedEmojiKeyboardMetrics","defaultHeight","cellSize","emojiSize","defaultLightTheme","colors","accent","background","incomingBubble","outgoingBubble","incomingText","outgoingText","incomingMeta","outgoingMeta","ticksSent","ticksRead","separator","inputBackground","inputBarBackground","inputText","placeholder","dayPillBackground","dayPillText","surface","reactionBackground","reactionActiveBackground","outgoingOverlay","error","inputFieldBorder","incomingLink","outgoingLink","incomingBubbleShadow","outgoingBubbleShadow","incomingBubbleSelected","outgoingBubbleSelected","selectionBackground","mediaTimeBackground","mediaTimeText","incomingReplyLine","incomingReplyName","outgoingReplyLine","outgoingReplyName","incomingReaction","incomingReactionText","incomingReactionTextChosen","outgoingReaction","outgoingReactionText","outgoingReactionTextChosen","incomingVoiceTrack","incomingVoiceFill","outgoingVoiceTrack","outgoingVoiceFill","composerIcon","inputCursor","scrollToBottomBackground","scrollToBottomIcon","scrollToBottomBadge","scrollToBottomBadgeText","unreadSeparatorBackground","unreadSeparatorText","unreadSeparatorArrow","selectionCheckbox","selectionCheckboxCheck","radii","spacing","typography","avatar","size","palette","paletteEnd","textColor","voice","outgoingGradient","wallpaper","isEnabled","isAnimated","pattern","patternOpacity","nameColors","emojiKeyboard","icon","iconSelected","tabIndicator","sectionTitle","searchBackground","searchIcon","searchText","backspace","shadowLine","popupBackground","selector","contextMenu","text","pressed","destructive","scrim","reactionSelected","chatList","headerBackground","headerText","headerSubtitle","headerSubtitleActive","name","senderPrefix","attachment","typing","draft","date","check","badge","badgeMuted","badgeText","muteIcon","pinIcon","verified","online","divider","selectedRow","checkbox","swipeArchive","swipeUnarchive","archiveAvatar","fab","fabIcon","shimmer","shimmerOpacity","shimmerHighlight","attachments","dim","secondaryText","handle","tabBackground","tabText","tabSelected","tabSelectedText","checkboxCheck","cellBackground","sendButtonIcon","defaultDarkTheme","resolveTheme","colorScheme","light","dark","isDark","mergeTheme","base","override","mergedTypography","key","Object","keys","textScale","style","undefined","overrideScreenEdge","mergedScreenEdge","getUserColorIndex","id","count","Number","isFinite","Math","abs","trunc","String","hash","i","length","charCodeAt","getNameColor","theme"],"sources":["../src/Theme.ts"],"sourcesContent":["import { ImageSourcePropType } from 'react-native'\n\n/**\n * Centralized design tokens for the chat UI.\n *\n * The defaults are a classic day theme (pale green outgoing bubbles over the green swirl\n * wallpaper) and a \"Dark Blue\" night theme (a purple-to-blue outgoing gradient fixed to the\n * screen). Consumers can override any subset through the `theme` /\n * `darkTheme` props on `Chat`; overrides are deep-merged over these defaults, and explicit\n * per-component style props still win over the theme. Components read the resolved theme via\n * the `useTheme` hook.\n */\n\nexport interface ChatThemeColors {\n /** Accent used for the send button, record button and active states. */\n accent: string\n /** Chat background, shown when the wallpaper is off (`theme.wallpaper.isEnabled`). */\n background: string\n /** Incoming (left) bubble background. */\n incomingBubble: string\n /**\n * Outgoing (right) bubble background. With `bubble.outgoingGradient` set, the gradient is\n * drawn instead and this is only the base color media controls are tinted with.\n */\n outgoingBubble: string\n /** Incoming message text. */\n incomingText: string\n /** Outgoing message text. */\n outgoingText: string\n /** Time/meta text inside incoming bubbles. */\n incomingMeta: string\n /** Time/meta text inside outgoing bubbles. */\n outgoingMeta: string\n /** Sender name color when `nameColors` is empty. */\n senderName: string\n /** Delivery tick color before the message is read. */\n ticksSent: string\n /** Delivery tick color once the message is read. */\n ticksRead: string\n /** Hairlines and dividers. */\n separator: string\n /** The floating composer pill (at 85%). */\n inputBackground: string\n /** The band behind the composer pill; transparent so the wallpaper shows through. */\n inputBarBackground: string\n /** Composer text color. */\n inputText: string\n /** Composer placeholder color. */\n placeholder: string\n /** Date and service pill background (stands in for a wallpaper-shaded pill). */\n dayPillBackground: string\n /** Date and service pill text. */\n dayPillText: string\n /** Surface color for floating elements (menus, sheets). */\n surface: string\n /** Neutral tint for secondary surfaces (location card, media card). */\n reactionBackground: string\n /** Active tint kept for custom reaction displays. */\n reactionActiveBackground: string\n /** Translucent overlay drawn on top of outgoing bubbles (location and media cards). */\n outgoingOverlay: string\n /** Errors: the failed-message badge, the recording trash can, destructive actions. */\n error: string\n /** Stroke around the composer pill and the glass buttons. */\n inputFieldBorder: string\n\n /** Links in incoming messages. */\n incomingLink: string\n /** Links in outgoing messages. */\n outgoingLink: string\n /** The 1px drop under incoming bubbles; transparent to turn it off. */\n incomingBubbleShadow: string\n /** The 1px drop under outgoing bubbles; transparent to turn it off. */\n outgoingBubbleShadow: string\n /** Incoming bubble tint while selected or flashed after a quote jump. */\n incomingBubbleSelected: string\n /** Outgoing bubble tint while selected or flashed after a quote jump. */\n outgoingBubbleSelected: string\n /** The band across a highlighted row. */\n selectionBackground: string\n /** Time pill over photos. */\n mediaTimeBackground: string\n /** Time and ticks on that pill. */\n mediaTimeText: string\n /** Reply quote line in incoming bubbles when `nameColors` is empty. */\n incomingReplyLine: string\n /** Reply quote name in incoming bubbles when `nameColors` is empty. */\n incomingReplyName: string\n /** Reply quote line in outgoing bubbles. */\n outgoingReplyLine: string\n /** Reply quote name in outgoing bubbles. */\n outgoingReplyName: string\n /** Reaction pill accent in incoming bubbles: solid when chosen, 15.6% when not. */\n incomingReaction: string\n /** Reaction count on an unchosen pill in incoming bubbles. */\n incomingReactionText: string\n /** Reaction count on a chosen pill in incoming bubbles. */\n incomingReactionTextChosen: string\n /** Reaction pill accent in outgoing bubbles. */\n outgoingReaction: string\n /** Reaction count on an unchosen pill in outgoing bubbles. */\n outgoingReactionText: string\n /** Reaction count on a chosen pill in outgoing bubbles. */\n outgoingReactionTextChosen: string\n /** Unplayed voice bars and audio track in incoming bubbles. */\n incomingVoiceTrack: string\n /** Played bars and the play button in incoming bubbles. */\n incomingVoiceFill: string\n /** Unplayed voice bars and audio track in outgoing bubbles. */\n outgoingVoiceTrack: string\n /** Played bars and the play button in outgoing bubbles. */\n outgoingVoiceFill: string\n /** Emoji and attach icons in the composer (`glass_defaultIcon`). */\n composerIcon: string\n /** Composer caret. */\n inputCursor: string\n /** Scroll-to-bottom glass circle. */\n scrollToBottomBackground: string\n /** Scroll-to-bottom chevron. */\n scrollToBottomIcon: string\n /** Unread counter on the scroll-to-bottom button. */\n scrollToBottomBadge: string\n /** Unread counter text. */\n scrollToBottomBadgeText: string\n /** The \"Unread Messages\" bar. */\n unreadSeparatorBackground: string\n /** Its label. */\n unreadSeparatorText: string\n /** Its arrow. */\n unreadSeparatorArrow: string\n /** A selected message's check circle in selection mode (`checkbox`). */\n selectionCheckbox: string\n /** The check mark and the empty circle's ring (`checkboxCheck`). */\n selectionCheckboxCheck: string\n}\n\nexport interface ChatThemeAvatar {\n size: number\n /** Initials avatar colors, picked per user id; the top of the gradient. */\n palette: string[]\n /** Bottom of each initials gradient, matched to `palette` by index; empty draws flat colors. */\n paletteEnd: string[]\n /** Initials text color drawn on a palette background. */\n textColor: string\n}\n\nexport interface ChatThemeRadii {\n bubble: number\n /** The tail-side corners of a bubble facing a grouped neighbour. */\n bubbleGrouped: number\n inputField: number\n sendButton: number\n reaction: number\n dayPill: number\n /** Photo corners inside a bubble. */\n media: number\n /** Photo corners next to other content (a name, a reply, a caption). */\n mediaInner: number\n /** The time pill over a photo. */\n mediaTimePill: number\n /** The reply quote box. */\n replyQuote: number\n}\n\nexport interface ChatThemeHorizontalEdge {\n left: number\n right: number\n}\n\nexport interface ChatThemeSpacing {\n /** Space above the first line of a bubble's text. */\n bubblePaddingV: number\n /** Space below the last line of a bubble's text. */\n bubblePaddingBottom: number\n bubblePaddingH: number\n withinGroup: number\n betweenGroups: number\n /** Horizontal inset applied to the input bar and its accessories (e.g. the reply preview). */\n screenEdge: ChatThemeHorizontalEdge\n /** Gap between the composer pill and the bottom of the chat. */\n inputToolbarPaddingV: number\n}\n\n/** Accepted shape for a `screenEdge` override: a single value for both sides, or either side individually. */\nexport type ChatThemeScreenEdgeOverride = number | Partial<ChatThemeHorizontalEdge>\n\nexport interface ChatThemeTextStyle {\n fontSize: number\n lineHeight?: number\n fontWeight?:\n | 'normal'\n | 'bold'\n | '100'\n | '200'\n | '300'\n | '400'\n | '500'\n | '600'\n | '700'\n | '800'\n | '900'\n}\n\nexport interface ChatThemeTypography {\n message: ChatThemeTextStyle\n time: ChatThemeTextStyle\n senderName: ChatThemeTextStyle\n day: ChatThemeTextStyle\n system: ChatThemeTextStyle\n /** Name in a reply quote. */\n replyName: ChatThemeTextStyle\n /** Text in a reply quote. */\n replyText: ChatThemeTextStyle\n /** Count on a reaction pill. */\n reactionCount: ChatThemeTextStyle\n /** Composer text. */\n composer: ChatThemeTextStyle\n}\n\nexport interface ChatThemeComposer {\n /** Resting height of the composer field (single line). */\n minHeight: number\n /** Max height before the field scrolls internally instead of growing. */\n maxHeight: number\n /** Horizontal padding inside the field pill. */\n fieldPaddingH: number\n /** Size of the inset icons (emoji, attachment, camera). */\n insetIconSize: number\n}\n\nexport interface ChatThemeVoice {\n /**\n * Full slide-to-cancel distance (px), capped at 35% of the window width.\n * Reaching it cancels the take mid-drag; releasing past 55% of\n * it cancels too.\n */\n cancelThreshold: number\n /** Vertical slide distance (px) to lock hands-free recording. */\n lockThreshold: number\n}\n\nexport interface ChatThemeBubble {\n /** Draw a curled tail on the last bubble of each run. */\n hasTail: boolean\n /** Put the time on the last line of text when it fits; `false` gives it a row. */\n isTimeInline: boolean\n /**\n * Gradient stops for outgoing bubbles, top to bottom, or `null` for the solid\n * `colors.outgoingBubble`.\n */\n outgoingGradient: string[] | null\n /**\n * `'screen'`: one gradient spans the message list and each bubble shows its slice, so a\n * bubble changes color as it scrolls. `'bubble'`: every bubble carries the whole\n * gradient, which costs nothing while scrolling.\n */\n outgoingGradientMode: 'screen' | 'bubble'\n /**\n * Text column inset: a bubble's text is at most `min(width, height) - maxWidthInset` wide\n * (80 by default), and narrower by the avatar column when avatars show.\n */\n maxWidthInset: number\n /**\n * Big emoji: a message of at most this many emoji (and nothing else) drops its\n * bubble and draws them large. `0` turns it off.\n */\n bigEmojiMaxCount: number\n /** Font size of big emoji by count: index 0 for one emoji, the last entry for that many or more. */\n bigEmojiSizes: number[]\n}\n\nexport interface ChatThemeWallpaper {\n /** Draw the wallpaper; off, the chat shows `colors.background`. */\n isEnabled: boolean\n /** Three or four colors for the swirl gradient. */\n colors: string[]\n /** Shift the gradient one step per outgoing message (500ms, bezier(0.33, 0, 0, 1)). */\n isAnimated: boolean\n /** An image tiled over the gradient, e.g. a doodle pattern; none is bundled. */\n pattern?: ImageSourcePropType | null\n /** Pattern opacity (0.34 day, 0.38 night). */\n patternOpacity: number\n /** Pattern tint; defaults to black over a light wallpaper and white over a dark one. */\n patternColor?: string\n}\n\nexport interface ChatThemeEmojiKeyboard {\n /** Panel background. */\n background: string\n /** Tab icons. */\n icon: string\n /** The selected tab's icon. */\n iconSelected: string\n /** The round-rect behind the selected tab (the tab icon color at 18%). */\n tabIndicator: string\n /** Section headers (\"Smileys & People\"). */\n sectionTitle: string\n /** The search pill. */\n searchBackground: string\n /** Search icon and hint. */\n searchIcon: string\n /** Text typed into search. */\n searchText: string\n /** The backspace key. */\n backspace: string\n /** The hairline above the tab strip. */\n shadowLine: string\n /** The skin-tone popup (`dialogBackground`). */\n popupBackground: string\n /** The press highlight in the popup and on cells. */\n selector: string\n /** Panel height before any system keyboard has been seen (200). */\n defaultHeight: number\n /** Target width of a grid cell; the column count is `max(1, width / cellSize)` (45). */\n cellSize: number\n /** Emoji glyph size in a cell. */\n emojiSize: number\n}\n\nexport interface ChatThemeContextMenu {\n /** Menu and reactions bar fill (`actionBarDefaultSubmenuBackground`). */\n background: string\n /** Item text (`actionBarDefaultSubmenuItem`). */\n text: string\n /** Item icons (`actionBarDefaultSubmenuItemIcon`). */\n icon: string\n /** The 8dp gap between item groups (`actionBarDefaultSubmenuSeparator`). */\n separator: string\n /** Pressed item (`dialogButtonSelector`). */\n pressed: string\n /** A `destructive` item (`text_RedRegular`). */\n destructive: string\n /** The dim over the chat while the menu is open (black at 0.2). */\n scrim: string\n /** The circle behind a reaction you already chose. */\n reactionSelected: string\n}\n\n/** `ChatList`: the list of chats. */\nexport interface ChatThemeChatList {\n background: string\n headerBackground: string\n /** Header title and icons. */\n headerText: string\n /** `ChatHeader`'s status line (\"last seen\", members). */\n headerSubtitle: string\n /** `ChatHeader`'s status line while it reads \"online\" or \"typing\". */\n headerSubtitleActive: string\n /** Chat names. */\n name: string\n /** The last message's text. */\n message: string\n /** \"You:\" / \"Anna:\" before a group's last message. */\n senderPrefix: string\n /** \"Photo\", \"Voice message\"... when the last message has no text. */\n attachment: string\n /** \"typing…\". */\n typing: string\n /** \"Draft:\". */\n draft: string\n /** The last message's time. */\n date: string\n /** Sent / read checks on your last message. */\n check: string\n /** Unread counter. */\n badge: string\n /** Unread counter of a muted chat. */\n badgeMuted: string\n badgeText: string\n muteIcon: string\n /** The pin and the reorder handle. */\n pinIcon: string\n verified: string\n /** The online dot on an avatar. */\n online: string\n divider: string\n /** A pressed row. */\n pressed: string\n /** A selected row. */\n selectedRow: string\n /** The selection check on an avatar. */\n checkbox: string\n /** Behind a row swiped to archive, and the circle that grows past the threshold. */\n swipeArchive: string\n swipeUnarchive: string\n /** The \"Archived Chats\" folder avatar. */\n archiveAvatar: string\n /** The new-chat button. */\n fab: string\n fabIcon: string\n /** The loading placeholder: its bars (and their opacity), and the band sweeping over them. */\n shimmer: string\n shimmerOpacity: number\n shimmerHighlight: string\n}\n\nexport interface ChatThemeAttachments {\n /** Sheet background (`dialogBackground`). */\n background: string\n /** The dim behind the sheet (black at 51/255). */\n dim: string\n /** Titles and the caption text (`dialogTextBlack`). */\n text: string\n /** Secondary text: file sizes, hints, the caption placeholder. */\n secondaryText: string\n /** The drag handle. */\n handle: string\n /** The floating tab pill (`windowBackgroundWhite` at 0.85). */\n tabBackground: string\n /** Unselected tab icon and label (`glass_tabUnselected`). */\n tabText: string\n /** Selected tab icon, and its capsule at 9% (`glass_tabSelected`). */\n tabSelected: string\n /** Selected tab label. */\n tabSelectedText: string\n /** Selection disc. */\n checkbox: string\n /** Number / check on the disc. */\n checkboxCheck: string\n /** Empty photo cell. */\n cellBackground: string\n /** Send button (`dialogFloatingButton`). */\n sendButton: string\n /** Send button icon. */\n sendButtonIcon: string\n}\n\nexport interface ChatTheme {\n colors: ChatThemeColors\n radii: ChatThemeRadii\n spacing: ChatThemeSpacing\n typography: ChatThemeTypography\n avatar: ChatThemeAvatar\n sendButton: { size: number }\n composer: ChatThemeComposer\n voice: ChatThemeVoice\n bubble: ChatThemeBubble\n wallpaper: ChatThemeWallpaper\n /** The built-in emoji keyboard. */\n emojiKeyboard: ChatThemeEmojiKeyboard\n /** The long-press menu and reactions bar. */\n contextMenu: ChatThemeContextMenu\n /** The built-in attachment menu. */\n attachments: ChatThemeAttachments\n /** The chat list (`ChatList`). */\n chatList: ChatThemeChatList\n /** Sender name colors, picked per user id (`avatar_nameInMessage*`); empty uses `colors.senderName`. */\n nameColors: string[]\n /**\n * The text size the user picked, as a multiplier of every size in `typography` (1 by default):\n * messages, times, names, day and service pills, quotes and the composer grow together.\n */\n textScale?: number\n}\n\nexport type PartialChatTheme = {\n colors?: Partial<ChatThemeColors>\n radii?: Partial<ChatThemeRadii>\n spacing?: Partial<Omit<ChatThemeSpacing, 'screenEdge'>> & { screenEdge?: ChatThemeScreenEdgeOverride }\n typography?: Partial<Record<keyof ChatThemeTypography, Partial<ChatThemeTextStyle>>>\n avatar?: Partial<ChatThemeAvatar>\n sendButton?: Partial<{ size: number }>\n composer?: Partial<ChatThemeComposer>\n voice?: Partial<ChatThemeVoice>\n bubble?: Partial<ChatThemeBubble>\n wallpaper?: Partial<ChatThemeWallpaper>\n emojiKeyboard?: Partial<ChatThemeEmojiKeyboard>\n contextMenu?: Partial<ChatThemeContextMenu>\n attachments?: Partial<ChatThemeAttachments>\n chatList?: Partial<ChatThemeChatList>\n nameColors?: string[]\n /** Multiplies every size in `typography`; see `ChatTheme.textScale`. */\n textScale?: number\n}\n\n// Avatars: a vertical gradient per color, `abs(id % 7)` -> red, orange, violet, green,\n// cyan, blue, pink.\nconst avatarPaletteDay = ['#FF845E', '#FEBB5B', '#B694F9', '#9AD164', '#5BCBE3', '#5CAFFA', '#FF8AAC']\nconst avatarPaletteEndDay = ['#D45246', '#F68136', '#6C61DF', '#46BA43', '#359AD4', '#408ACF', '#D95574']\n// Dark Blue overrides only red and orange.\nconst avatarPaletteNight = ['#E86C6A', '#F2BC64', '#B694F9', '#9AD164', '#5BCBE3', '#5CAFFA', '#FF8AAC']\nconst avatarPaletteEndNight = ['#E14747', '#E58943', '#6C61DF', '#46BA43', '#359AD4', '#408ACF', '#D95574']\n\nconst sharedRadii: ChatThemeRadii = {\n // 17, and `min(6, bubble)` near a grouped neighbour.\n bubble: 17,\n bubbleGrouped: 6,\n // The composer island.\n inputField: 22,\n sendButton: 18,\n // Reaction pills are full capsules: 26 tall, radius 13.\n reaction: 13,\n // Date / service pill radius.\n dayPill: 11,\n // Photos: `bubbleRadius - 2`, 4 next to other content.\n media: 15,\n mediaInner: 4,\n mediaTimePill: 8,\n replyQuote: 5,\n}\n\nconst sharedComposer: ChatThemeComposer = {\n // One line at rest; the field grows to 6 lines of 21.\n minHeight: 44,\n maxHeight: 149,\n fieldPaddingH: 12,\n insetIconSize: 24,\n}\n\n// The slide-to-cancel distance (140dp, capped at 35% of the width) and the\n// lock distance (57dp).\nconst sharedVoice: ChatThemeVoice = {\n cancelThreshold: 140,\n lockThreshold: 57,\n}\n\nconst sharedSpacing: ChatThemeSpacing = {\n // 5 above the first line, 8.5 below the last, 9 either side.\n bubblePaddingV: 5,\n bubblePaddingBottom: 8.5,\n bubblePaddingH: 9,\n // 2 inside a run, 6 between runs.\n withinGroup: 2,\n betweenGroups: 6,\n // The composer island's 7 side margins and 9 above the bottom inset.\n screenEdge: { left: 7, right: 7 },\n inputToolbarPaddingV: 9,\n}\n\nconst sharedTypography: ChatThemeTypography = {\n // 16 body, line spacing 1.0: Roboto's natural ~19.\n message: { fontSize: 16, lineHeight: 19, fontWeight: '400' },\n time: { fontSize: 12, lineHeight: 14, fontWeight: '400' },\n // `(2 * 16 + 10) / 3` = 14, Roboto Medium - the only emphasis weight.\n senderName: { fontSize: 14, lineHeight: 17, fontWeight: '500' },\n day: { fontSize: 14, lineHeight: 17, fontWeight: '500' },\n system: { fontSize: 14, lineHeight: 17, fontWeight: '500' },\n replyName: { fontSize: 14, lineHeight: 17, fontWeight: '500' },\n replyText: { fontSize: 14, lineHeight: 17, fontWeight: '400' },\n reactionCount: { fontSize: 12, fontWeight: '500' },\n // The input field is 18.\n composer: { fontSize: 18, lineHeight: 21, fontWeight: '400' },\n}\n\nconst sharedBubble: Omit<ChatThemeBubble, 'outgoingGradient'> = {\n hasTail: true,\n isTimeInline: true,\n outgoingGradientMode: 'screen',\n maxWidthInset: 80,\n // Past a screenful a lone-emoji message stops being a\n // sticker-like moment and is just a lot of emoji, so the default stops at 20.\n bigEmojiMaxCount: 20,\n // `.34/.28/.22/.19 × 120dp`: plain emoji use the non-animated sizes, 1-2 emoji at [2],\n // 3 at [3], 4 at [4], 5+ at [5].\n bigEmojiSizes: [40.8, 40.8, 33.6, 26.4, 22.8],\n}\n\n// The emoji panel: 200 before any keyboard was measured, 45 per column, 32 glyphs.\nconst sharedEmojiKeyboardMetrics = { defaultHeight: 200, cellSize: 45, emojiSize: 30 }\n\nexport const defaultLightTheme: ChatTheme = {\n colors: {\n accent: '#229AF0',\n // The fallback when no wallpaper can be drawn.\n background: '#D6E4EF',\n incomingBubble: '#FFFFFF',\n outgoingBubble: '#EFFFDE',\n incomingText: '#000000',\n outgoingText: '#000000',\n incomingMeta: '#A1AAB3',\n outgoingMeta: '#70B15C',\n senderName: '#298ACF',\n ticksSent: '#5DB050',\n ticksRead: '#5DB050',\n separator: 'rgba(0, 0, 0, 0.08)',\n // #FFFFFF at 216/255.\n inputBackground: 'rgba(255, 255, 255, 0.847)',\n inputBarBackground: 'transparent',\n inputText: '#000000',\n placeholder: '#858A84',\n dayPillBackground: 'rgba(0, 0, 0, 0.18)',\n dayPillText: '#FFFFFF',\n surface: '#FFFFFF',\n reactionBackground: 'rgba(0, 0, 0, 0.06)',\n reactionActiveBackground: 'rgba(34, 154, 240, 0.15)',\n outgoingOverlay: 'rgba(110, 185, 105, 0.1)',\n error: '#DB3535',\n inputFieldBorder: '#FFFFFF',\n\n incomingLink: '#2678B6',\n outgoingLink: '#2678B6',\n incomingBubbleShadow: 'rgba(29, 55, 83, 0.16)',\n outgoingBubbleShadow: 'rgba(30, 117, 12, 0.16)',\n incomingBubbleSelected: '#ECF7FD',\n outgoingBubbleSelected: '#D9F7C5',\n selectionBackground: 'rgba(10, 144, 240, 0.157)',\n mediaTimeBackground: 'rgba(0, 0, 0, 0.4)',\n mediaTimeText: '#FFFFFF',\n incomingReplyLine: '#599FD8',\n incomingReplyName: '#298ACF',\n outgoingReplyLine: '#6EB969',\n outgoingReplyName: '#55AB4F',\n incomingReaction: '#229AF0',\n incomingReactionText: '#298ACF',\n incomingReactionTextChosen: '#FFFFFF',\n outgoingReaction: '#78C272',\n outgoingReactionText: '#55AB4F',\n outgoingReactionTextChosen: '#FFFFFF',\n incomingVoiceTrack: '#DEE5EB',\n incomingVoiceFill: '#229AF0',\n outgoingVoiceTrack: '#BBE3AC',\n outgoingVoiceFill: '#78C272',\n composerIcon: 'rgba(27, 34, 39, 0.6)',\n inputCursor: '#54A1DB',\n scrollToBottomBackground: 'rgba(255, 255, 255, 0.847)',\n scrollToBottomIcon: 'rgba(27, 34, 39, 0.6)',\n scrollToBottomBadge: '#229AF0',\n scrollToBottomBadgeText: '#FFFFFF',\n unreadSeparatorBackground: '#FFFFFF',\n unreadSeparatorText: '#5695CC',\n unreadSeparatorArrow: '#A2B5C7',\n selectionCheckbox: '#5EC245',\n selectionCheckboxCheck: '#FFFFFF',\n },\n radii: sharedRadii,\n spacing: sharedSpacing,\n typography: sharedTypography,\n avatar: { size: 42, palette: avatarPaletteDay, paletteEnd: avatarPaletteEndDay, textColor: '#FFFFFF' },\n sendButton: { size: 36 },\n composer: sharedComposer,\n voice: sharedVoice,\n bubble: { ...sharedBubble, outgoingGradient: null },\n wallpaper: {\n isEnabled: true,\n colors: ['#DBDDBB', '#6BA587', '#D5D88D', '#88B884'],\n isAnimated: true,\n pattern: null,\n patternOpacity: 0.34,\n },\n nameColors: ['#CC5049', '#D67722', '#955CDB', '#40A920', '#309EBA', '#368AD1', '#C7508B'],\n emojiKeyboard: {\n ...sharedEmojiKeyboardMetrics,\n background: '#F0F2F5',\n icon: '#9DA4AB',\n iconSelected: '#5E6976',\n tabIndicator: 'rgba(157, 164, 171, 0.18)',\n sectionTitle: '#828B94',\n searchBackground: '#E5E9EE',\n searchIcon: '#94A1AF',\n searchText: '#000000',\n backspace: '#8C9197',\n shadowLine: 'rgba(0, 0, 0, 0.07)',\n popupBackground: '#FFFFFF',\n selector: 'rgba(0, 0, 0, 0.06)',\n },\n contextMenu: {\n background: '#FFFFFF',\n text: '#1A1D21',\n icon: '#1A1D21',\n separator: '#F5F5F5',\n pressed: 'rgba(0, 0, 0, 0.06)',\n destructive: '#CC2929',\n scrim: 'rgba(0, 0, 0, 0.2)',\n reactionSelected: 'rgba(0, 0, 0, 0.06)',\n },\n chatList: {\n background: '#FFFFFF',\n headerBackground: '#FFFFFF',\n headerText: '#1A1D21',\n headerSubtitle: '#79817E',\n headerSubtitleActive: '#298ACF',\n name: '#1A1D21',\n message: '#8E9091',\n senderPrefix: '#298ACF',\n attachment: '#298ACF',\n typing: '#298ACF',\n draft: '#DD4B39',\n date: '#848688',\n check: '#46AA36',\n badge: '#229AF0',\n badgeMuted: '#BEC3C7',\n badgeText: '#FFFFFF',\n muteIcon: '#BDC1C4',\n pinIcon: '#919294',\n verified: '#33A8E6',\n online: '#4BCB1C',\n divider: '#D9D9D9',\n pressed: 'rgba(0, 0, 0, 0.06)',\n selectedRow: 'rgba(10, 144, 240, 0.08)',\n checkbox: '#5EC245',\n swipeArchive: '#229AF0',\n swipeUnarchive: '#9FAAB3',\n archiveAvatar: '#B8C2CC',\n fab: '#229AF0',\n fabIcon: '#FFFFFF',\n shimmer: '#000000',\n shimmerOpacity: 0.06,\n shimmerHighlight: '#FFFFFF',\n },\n attachments: {\n background: '#FFFFFF',\n dim: 'rgba(0, 0, 0, 0.2)',\n text: '#222222',\n secondaryText: '#8A8A8A',\n handle: 'rgba(0, 0, 0, 0.15)',\n tabBackground: 'rgba(255, 255, 255, 0.85)',\n tabText: '#1A1D21',\n tabSelected: '#1A91E6',\n tabSelectedText: '#0D7FCF',\n checkbox: '#229AF0',\n checkboxCheck: '#FFFFFF',\n cellBackground: 'rgba(0, 0, 0, 0.047)',\n sendButton: '#229AF0',\n sendButtonIcon: '#FFFFFF',\n },\n}\n\nexport const defaultDarkTheme: ChatTheme = {\n colors: {\n accent: '#229AF0',\n background: '#0E141A',\n incomingBubble: '#232E3B',\n // The gradient's bottom stop; the bubble itself draws `bubble.outgoingGradient`.\n outgoingBubble: '#258DE5',\n incomingText: '#FAFAFA',\n outgoingText: '#FFFFFF',\n incomingMeta: 'rgba(128, 145, 160, 0.85)',\n outgoingMeta: '#FFFFFF',\n senderName: '#79C4FC',\n ticksSent: '#FFFFFF',\n ticksRead: '#FFFFFF',\n separator: 'rgba(255, 255, 255, 0.1)',\n inputBackground: 'rgba(33, 45, 59, 0.85)',\n inputBarBackground: 'transparent',\n inputText: '#FFFFFF',\n placeholder: 'rgba(219, 239, 255, 0.431)',\n dayPillBackground: 'rgba(53, 66, 81, 0.51)',\n dayPillText: '#FFFFFF',\n surface: '#212D3B',\n reactionBackground: 'rgba(255, 255, 255, 0.08)',\n reactionActiveBackground: 'rgba(96, 157, 210, 0.22)',\n outgoingOverlay: 'rgba(255, 255, 255, 0.12)',\n error: '#F6574E',\n inputFieldBorder: 'rgba(255, 255, 255, 0.157)',\n\n incomingLink: '#79C4FC',\n outgoingLink: '#FFFFFF',\n incomingBubbleShadow: 'rgba(0, 0, 0, 0.196)',\n outgoingBubbleShadow: 'transparent',\n incomingBubbleSelected: '#314A61',\n // Drawn over the gradient.\n outgoingBubbleSelected: 'rgba(255, 255, 255, 0.078)',\n selectionBackground: 'rgba(95, 157, 227, 0.165)',\n mediaTimeBackground: 'rgba(0, 0, 0, 0.4)',\n mediaTimeText: '#FFFFFF',\n incomingReplyLine: '#79C4FC',\n incomingReplyName: '#79C4FC',\n outgoingReplyLine: '#FFFFFF',\n outgoingReplyName: '#FFFFFF',\n incomingReaction: '#609DD2',\n incomingReactionText: '#FFFFFF',\n incomingReactionTextChosen: '#FFFFFF',\n outgoingReaction: '#FFFFFF',\n outgoingReactionText: '#FFFFFF',\n outgoingReactionTextChosen: '#1D2733',\n incomingVoiceTrack: '#5D6F80',\n incomingVoiceFill: '#64B5EF',\n outgoingVoiceTrack: 'rgba(255, 255, 255, 0.3)',\n outgoingVoiceFill: '#FFFFFF',\n composerIcon: 'rgba(255, 255, 255, 0.627)',\n inputCursor: '#54A1DB',\n scrollToBottomBackground: 'rgba(33, 45, 59, 0.85)',\n scrollToBottomIcon: 'rgba(255, 255, 255, 0.627)',\n scrollToBottomBadge: '#51AAEE',\n scrollToBottomBadgeText: '#FFFFFF',\n unreadSeparatorBackground: '#253442',\n unreadSeparatorText: 'rgba(255, 255, 255, 0.855)',\n unreadSeparatorArrow: '#5A6B7A',\n selectionCheckbox: '#5EC245',\n selectionCheckboxCheck: '#FFFFFF',\n },\n radii: sharedRadii,\n spacing: sharedSpacing,\n typography: sharedTypography,\n avatar: { size: 42, palette: avatarPaletteNight, paletteEnd: avatarPaletteEndNight, textColor: '#FFFFFF' },\n sendButton: { size: 36 },\n composer: sharedComposer,\n voice: sharedVoice,\n bubble: {\n ...sharedBubble,\n // Purple at the top of the list, blue at the bottom.\n outgoingGradient: ['#9F3EAA', '#8146D7', '#4272DF', '#258DE5'],\n },\n wallpaper: {\n isEnabled: true,\n colors: ['#0E141A', '#172431', '#0F171E', '#141C2B'],\n isAnimated: true,\n pattern: null,\n patternOpacity: 0.38,\n },\n nameColors: ['#E88878', '#E8AB5A', '#8C8DEA', '#7DD071', '#53CCC6', '#5CADEA', '#E8749A'],\n emojiKeyboard: {\n ...sharedEmojiKeyboardMetrics,\n background: '#1D2733',\n icon: '#677687',\n iconSelected: '#64B5EF',\n tabIndicator: 'rgba(103, 118, 135, 0.18)',\n sectionTitle: '#828B94',\n // Dark Blue leaves the search pill at the day color; in the chat's glass panel it is the\n // icon color at 6%, which is what reads right on the dark sheet.\n searchBackground: 'rgba(255, 255, 255, 0.06)',\n searchIcon: '#94A1AF',\n searchText: '#FFFFFF',\n backspace: '#677687',\n shadowLine: 'rgba(0, 0, 0, 0.196)',\n popupBackground: '#212D3B',\n selector: 'rgba(255, 255, 255, 0.08)',\n },\n contextMenu: {\n background: '#283848',\n text: '#FFFFFF',\n icon: '#FFFFFF',\n separator: '#1F2E3F',\n pressed: '#324156',\n destructive: '#EE686F',\n scrim: 'rgba(0, 0, 0, 0.2)',\n reactionSelected: 'rgba(255, 255, 255, 0.08)',\n },\n chatList: {\n background: '#1D2733',\n headerBackground: '#242D39',\n headerText: '#FFFFFF',\n headerSubtitle: 'rgba(219, 242, 255, 0.49)',\n headerSubtitleActive: '#73BBF7',\n name: '#E9EEF4',\n message: '#7D8B99',\n senderPrefix: '#E9EEF4',\n attachment: '#7D8E98',\n typing: '#64AFE9',\n draft: 'rgba(252, 71, 74, 0.85)',\n date: '#737F8B',\n check: '#64B5EF',\n badge: '#64B5EF',\n badgeMuted: '#3E5263',\n badgeText: '#FFFFFF',\n muteIcon: '#4E5F6A',\n pinIcon: '#586D80',\n verified: '#64B5EF',\n online: '#64B5EF',\n divider: 'rgba(0, 0, 0, 0.58)',\n pressed: 'rgba(255, 255, 255, 0.05)',\n selectedRow: 'rgba(95, 157, 227, 0.16)',\n checkbox: '#5EC245',\n swipeArchive: '#5796CC',\n swipeUnarchive: '#2E3E4B',\n archiveAvatar: '#384B5A',\n fab: '#229AF0',\n fabIcon: '#FFFFFF',\n shimmer: '#E6F7FF',\n shimmerOpacity: 0.08,\n shimmerHighlight: '#283848',\n },\n attachments: {\n background: '#212D3B',\n dim: 'rgba(0, 0, 0, 0.2)',\n text: '#FFFFFF',\n secondaryText: '#7D8B99',\n handle: 'rgba(255, 255, 255, 0.15)',\n tabBackground: 'rgba(29, 39, 51, 0.85)',\n tabText: '#FFFFFF',\n tabSelected: '#229AF0',\n tabSelectedText: '#229AF0',\n checkbox: '#229AF0',\n checkboxCheck: '#FFFFFF',\n cellBackground: 'rgba(255, 255, 255, 0.05)',\n sendButton: '#229AF0',\n sendButtonIcon: '#FFFFFF',\n },\n}\n\nexport interface ChatThemeOverrides {\n light?: PartialChatTheme\n dark?: PartialChatTheme\n}\n\n/**\n * Resolve the active theme for a color scheme, applying the matching override.\n * Used by `Chat` to compute the theme once per change and share it via context.\n */\nexport function resolveTheme (\n colorScheme: 'light' | 'dark' | null | undefined,\n light?: PartialChatTheme,\n dark?: PartialChatTheme\n): ChatTheme {\n const isDark = colorScheme === 'dark'\n return mergeTheme(isDark ? defaultDarkTheme : defaultLightTheme, isDark ? dark : light)\n}\n\n/** Deep-merge a partial theme over a base theme (two levels deep; arrays are replaced). */\nexport function mergeTheme (base: ChatTheme, override?: PartialChatTheme): ChatTheme {\n if (!override)\n return base\n\n const mergedTypography = { ...base.typography }\n if (override.typography)\n for (const key of Object.keys(override.typography) as Array<keyof ChatThemeTypography>)\n mergedTypography[key] = { ...base.typography[key], ...override.typography[key] }\n\n // The text size multiplies whatever sizes the merge ends with, the app's own included.\n const textScale = override.textScale ?? base.textScale ?? 1\n if (textScale !== (base.textScale ?? 1))\n for (const key of Object.keys(mergedTypography) as Array<keyof ChatThemeTypography>) {\n const style = mergedTypography[key]\n mergedTypography[key] = {\n ...style,\n fontSize: style.fontSize * textScale,\n lineHeight: style.lineHeight != null ? style.lineHeight * textScale : undefined,\n }\n }\n\n const overrideScreenEdge = override.spacing?.screenEdge\n const mergedScreenEdge: ChatThemeHorizontalEdge = typeof overrideScreenEdge === 'number'\n ? { left: overrideScreenEdge, right: overrideScreenEdge }\n : { ...base.spacing.screenEdge, ...overrideScreenEdge }\n\n // An app that picks its own outgoing color, sender color or avatar palette keeps seeing it:\n // the gradient, the per-user name colors and the avatar gradients would otherwise paint over\n // the override.\n const bubble = { ...base.bubble, ...override.bubble }\n if (override.colors?.outgoingBubble && override.bubble?.outgoingGradient === undefined)\n bubble.outgoingGradient = null\n\n const avatar = { ...base.avatar, ...override.avatar }\n if (override.avatar?.palette && override.avatar.paletteEnd === undefined)\n avatar.paletteEnd = []\n\n const nameColors = override.nameColors ??\n (override.colors?.senderName ? [] : base.nameColors)\n\n return {\n colors: { ...base.colors, ...override.colors },\n radii: { ...base.radii, ...override.radii },\n spacing: { ...base.spacing, ...override.spacing, screenEdge: mergedScreenEdge },\n typography: mergedTypography,\n avatar,\n sendButton: { ...base.sendButton, ...override.sendButton },\n composer: { ...base.composer, ...override.composer },\n voice: { ...base.voice, ...override.voice },\n bubble,\n wallpaper: { ...base.wallpaper, ...override.wallpaper },\n emojiKeyboard: { ...base.emojiKeyboard, ...override.emojiKeyboard },\n contextMenu: { ...base.contextMenu, ...override.contextMenu },\n attachments: { ...base.attachments, ...override.attachments },\n chatList: { ...base.chatList, ...override.chatList },\n nameColors,\n textScale,\n }\n}\n\n/** The per-user color index: `abs(id % 7)` for numeric ids, a stable hash for strings. */\nexport function getUserColorIndex (id: string | number | undefined, count: number): number {\n if (count <= 0 || id == null)\n return 0\n\n if (typeof id === 'number' && Number.isFinite(id))\n return Math.abs(Math.trunc(id) % count)\n\n const text = String(id)\n let hash = 0\n for (let i = 0; i < text.length; i += 1)\n hash = (hash * 31 + text.charCodeAt(i)) | 0\n\n return Math.abs(hash % count)\n}\n\n/** The sender name color for a user: their slot in `nameColors`, or `colors.senderName`. */\nexport function getNameColor (theme: ChatTheme, id: string | number | undefined): string {\n if (!theme.nameColors.length)\n return theme.colors.senderName\n\n return theme.nameColors[getUserColorIndex(id, theme.nameColors.length)]\n}\n"],"mappings":"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","ignoreList":[]}
@@ -12,7 +12,7 @@ export const resolveAttachments = value => {
12
12
  };
13
13
  /** The composer's paperclip with the built-in attachment menu behind it. */
14
14
  export function AttachmentButton(t0) {
15
- const $ = _c(20);
15
+ const $ = _c(22);
16
16
  const {
17
17
  tabs,
18
18
  config,
@@ -79,30 +79,32 @@ export function AttachmentButton(t0) {
79
79
  t4 = $[10];
80
80
  }
81
81
  let t5;
82
- if ($[11] !== config.renderAttachmentMenu || $[12] !== hasOpened || $[13] !== isVisible || $[14] !== send || $[15] !== tabs) {
82
+ if ($[11] !== config.isGalleryGridEnabled || $[12] !== config.pickers || $[13] !== config.renderAttachmentMenu || $[14] !== hasOpened || $[15] !== isVisible || $[16] !== send || $[17] !== tabs) {
83
83
  t5 = config.renderAttachmentMenu ? renderComponentOrElement(config.renderAttachmentMenu, {
84
84
  visible: isVisible,
85
85
  onClose: close,
86
86
  tabs,
87
87
  onSend: send
88
- }) : hasOpened && <AttachmentMenu visible={isVisible} tabs={tabs} onClose={close} onSend={send} />;
89
- $[11] = config.renderAttachmentMenu;
90
- $[12] = hasOpened;
91
- $[13] = isVisible;
92
- $[14] = send;
93
- $[15] = tabs;
94
- $[16] = t5;
88
+ }) : hasOpened && <AttachmentMenu visible={isVisible} tabs={tabs} pickers={config.pickers} isGalleryGridEnabled={config.isGalleryGridEnabled} onClose={close} onSend={send} />;
89
+ $[11] = config.isGalleryGridEnabled;
90
+ $[12] = config.pickers;
91
+ $[13] = config.renderAttachmentMenu;
92
+ $[14] = hasOpened;
93
+ $[15] = isVisible;
94
+ $[16] = send;
95
+ $[17] = tabs;
96
+ $[18] = t5;
95
97
  } else {
96
- t5 = $[16];
98
+ t5 = $[18];
97
99
  }
98
100
  let t6;
99
- if ($[17] !== t4 || $[18] !== t5) {
101
+ if ($[19] !== t4 || $[20] !== t5) {
100
102
  t6 = <>{t4}{t5}</>;
101
- $[17] = t4;
102
- $[18] = t5;
103
- $[19] = t6;
103
+ $[19] = t4;
104
+ $[20] = t5;
105
+ $[21] = t6;
104
106
  } else {
105
- t6 = $[19];
107
+ t6 = $[21];
106
108
  }
107
109
  return t6;
108
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AttachmentButton.js","names":["React","useCallback","useState","Keyboard","Actions","renderComponentOrElement","AttachmentMenu","resolveAttachmentMessages","resolveAttachments","value","undefined","isEnabled","AttachmentButton","t0","$","_c","tabs","config","onSend","onOpen","icon","wrapperStyle","isVisible","setIsVisible","hasOpened","setHasOpened","t1","dismiss","requestAnimationFrame","open","t2","Symbol","for","close","onPick","t3","attachments","t4","caption","then","messages","length","catch","_temp","send","t5","renderAttachmentMenu","visible","onClose","t6"],"sources":["../../src/attachments/AttachmentButton.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useState } from 'react'\nimport { Keyboard, StyleProp, ViewStyle } from 'react-native'\n\nimport { Actions } from '../Actions'\nimport { IMessage } from '../Models'\nimport { renderComponentOrElement } from '../utils'\nimport { AttachmentMenu } from './AttachmentMenu'\nimport { resolveAttachmentMessages } from './buildMessages'\nimport { AttachmentTab, AttachmentsProps, PickedAttachment } from './types'\n\nexport const resolveAttachments = <TMessage extends IMessage>(\n value: boolean | AttachmentsProps<TMessage> | undefined\n): AttachmentsProps<TMessage> | null => {\n if (value === false)\n return null\n if (value === true || value === undefined)\n return {}\n return value.isEnabled === false ? null : value\n}\n\ninterface AttachmentButtonProps<TMessage extends IMessage> {\n tabs: AttachmentTab[]\n config: AttachmentsProps<TMessage>\n onSend?: (messages: Partial<TMessage>[], shouldResetInputToolbar: boolean) => void\n /** Called as the menu opens: the emoji keyboard and the system keyboard make way. */\n onOpen?: () => void\n icon?: () => ReactNode\n wrapperStyle?: StyleProp<ViewStyle>\n}\n\n/** The composer's paperclip with the built-in attachment menu behind it. */\nexport function AttachmentButton<TMessage extends IMessage = IMessage> ({\n tabs,\n config,\n onSend,\n onOpen,\n icon,\n wrapperStyle,\n}: AttachmentButtonProps<TMessage>) {\n const [isVisible, setIsVisible] = useState(false)\n // The built-in menu mounts on the first open and stays: mounting it with every composer cost\n // each chat opening a few milliseconds for a sheet most visits never open.\n const [hasOpened, setHasOpened] = useState(false)\n\n const open = useCallback(() => {\n Keyboard.dismiss()\n onOpen?.()\n if (hasOpened) {\n setIsVisible(true)\n return\n }\n // Mounted already open, the sheet's first close left its picture on screen: it mounts\n // closed and opens on the next frame, the path every later open takes.\n setHasOpened(true)\n requestAnimationFrame(() => setIsVisible(true))\n }, [onOpen, hasOpened])\n const close = useCallback(() => setIsVisible(false), [])\n\n const onPick = config.onPick\n const send = useCallback((attachments: PickedAttachment[], caption = '') => {\n resolveAttachmentMessages<TMessage>(attachments, caption, onPick)\n .then(messages => {\n if (messages.length)\n onSend?.(messages, false)\n })\n .catch(() => {})\n }, [onPick, onSend])\n\n return (\n <>\n <Actions onPressActionButton={open} icon={icon} wrapperStyle={wrapperStyle} />\n {config.renderAttachmentMenu\n ? renderComponentOrElement(config.renderAttachmentMenu, { visible: isVisible, onClose: close, tabs, onSend: send })\n : hasOpened && <AttachmentMenu visible={isVisible} tabs={tabs} onClose={close} onSend={send} />}\n </>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"AttachmentButton.js","names":["React","useCallback","useState","Keyboard","Actions","renderComponentOrElement","AttachmentMenu","resolveAttachmentMessages","resolveAttachments","value","undefined","isEnabled","AttachmentButton","t0","$","_c","tabs","config","onSend","onOpen","icon","wrapperStyle","isVisible","setIsVisible","hasOpened","setHasOpened","t1","dismiss","requestAnimationFrame","open","t2","Symbol","for","close","onPick","t3","attachments","t4","caption","then","messages","length","catch","_temp","send","t5","isGalleryGridEnabled","pickers","renderAttachmentMenu","visible","onClose","t6"],"sources":["../../src/attachments/AttachmentButton.tsx"],"sourcesContent":["import React, { ReactNode, useCallback, useState } from 'react'\nimport { Keyboard, StyleProp, ViewStyle } from 'react-native'\n\nimport { Actions } from '../Actions'\nimport { IMessage } from '../Models'\nimport { renderComponentOrElement } from '../utils'\nimport { AttachmentMenu } from './AttachmentMenu'\nimport { resolveAttachmentMessages } from './buildMessages'\nimport { AttachmentTab, AttachmentsProps, PickedAttachment } from './types'\n\nexport const resolveAttachments = <TMessage extends IMessage>(\n value: boolean | AttachmentsProps<TMessage> | undefined\n): AttachmentsProps<TMessage> | null => {\n if (value === false)\n return null\n if (value === true || value === undefined)\n return {}\n return value.isEnabled === false ? null : value\n}\n\ninterface AttachmentButtonProps<TMessage extends IMessage> {\n tabs: AttachmentTab[]\n config: AttachmentsProps<TMessage>\n onSend?: (messages: Partial<TMessage>[], shouldResetInputToolbar: boolean) => void\n /** Called as the menu opens: the emoji keyboard and the system keyboard make way. */\n onOpen?: () => void\n icon?: () => ReactNode\n wrapperStyle?: StyleProp<ViewStyle>\n}\n\n/** The composer's paperclip with the built-in attachment menu behind it. */\nexport function AttachmentButton<TMessage extends IMessage = IMessage> ({\n tabs,\n config,\n onSend,\n onOpen,\n icon,\n wrapperStyle,\n}: AttachmentButtonProps<TMessage>) {\n const [isVisible, setIsVisible] = useState(false)\n // The built-in menu mounts on the first open and stays: mounting it with every composer cost\n // each chat opening a few milliseconds for a sheet most visits never open.\n const [hasOpened, setHasOpened] = useState(false)\n\n const open = useCallback(() => {\n Keyboard.dismiss()\n onOpen?.()\n if (hasOpened) {\n setIsVisible(true)\n return\n }\n // Mounted already open, the sheet's first close left its picture on screen: it mounts\n // closed and opens on the next frame, the path every later open takes.\n setHasOpened(true)\n requestAnimationFrame(() => setIsVisible(true))\n }, [onOpen, hasOpened])\n const close = useCallback(() => setIsVisible(false), [])\n\n const onPick = config.onPick\n const send = useCallback((attachments: PickedAttachment[], caption = '') => {\n resolveAttachmentMessages<TMessage>(attachments, caption, onPick)\n .then(messages => {\n if (messages.length)\n onSend?.(messages, false)\n })\n .catch(() => {})\n }, [onPick, onSend])\n\n return (\n <>\n <Actions onPressActionButton={open} icon={icon} wrapperStyle={wrapperStyle} />\n {config.renderAttachmentMenu\n ? renderComponentOrElement(config.renderAttachmentMenu, { visible: isVisible, onClose: close, tabs, onSend: send })\n : hasOpened && <AttachmentMenu visible={isVisible} tabs={tabs} pickers={config.pickers} isGalleryGridEnabled={config.isGalleryGridEnabled} onClose={close} onSend={send} />}\n </>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,7 +3,7 @@ import { useAnimatedScrollHandler } from 'react-native-reanimated';
3
3
  import { GalleryAsset } from '../gallery';
4
4
  import { PickedAttachment } from '../types';
5
5
  /** The photo grid: a camera cell, then the newest photos, under a spacer that lets the sheet rise. */
6
- export declare function GalleryGrid({ assets, selected, cellSize, spacer, bottomArea, onScroll, onEndReached, onDismiss, onToggle, runPicker, }: {
6
+ export declare function GalleryGrid({ assets, selected, cellSize, spacer, bottomArea, onScroll, onEndReached, onDismiss, onToggle, runPicker, pickCamera, }: {
7
7
  assets: GalleryAsset[];
8
8
  selected: GalleryAsset[];
9
9
  cellSize: number;
@@ -14,5 +14,7 @@ export declare function GalleryGrid({ assets, selected, cellSize, spacer, bottom
14
14
  onDismiss: () => void;
15
15
  onToggle: (asset: GalleryAsset) => void;
16
16
  runPicker: (picker: () => Promise<PickedAttachment[]>) => void;
17
+ /** Takes a photo from the grid's first cell; no camera cell without it. */
18
+ pickCamera?: () => Promise<PickedAttachment[]>;
17
19
  }): React.JSX.Element;
18
20
  //# sourceMappingURL=GalleryGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GalleryGrid.d.ts","sourceRoot":"","sources":["../../../src/attachments/AttachmentMenu/GalleryGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAEnD,OAAiB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAS5E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAO3C,sGAAsG;AACtG,wBAAgB,WAAW,CAAE,EAC3B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,SAAS,GACV,EAAE;IACD,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;IACrD,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,IAAI,CAAA;CAC/D,qBAwEA"}
1
+ {"version":3,"file":"GalleryGrid.d.ts","sourceRoot":"","sources":["../../../src/attachments/AttachmentMenu/GalleryGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAEnD,OAAiB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAO5E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAO3C,sGAAsG;AACtG,wBAAgB,WAAW,CAAE,EAC3B,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,SAAS,EACT,UAAU,GACX,EAAE;IACD,MAAM,EAAE,YAAY,EAAE,CAAA;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;IACrD,YAAY,EAAE,MAAM,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAA;IACvC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,IAAI,CAAA;IAC9D,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;CAC/C,qBAwEA"}