@algolia/satellite 2.3.0-rc.1 → 2.3.0-rc.10

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 (192) hide show
  1. package/dist/cjs/Actions/Button/PolymorphicButton.js +5 -5
  2. package/dist/cjs/Actions/Button/PolymorphicIconButton.js +2 -2
  3. package/dist/cjs/Actions/Button/styles.d.ts +1 -0
  4. package/dist/cjs/Actions/Button/styles.js +15 -10
  5. package/dist/cjs/Actions/ButtonLink/ButtonLink.d.ts +2 -0
  6. package/dist/cjs/Actions/ButtonLink/ButtonLink.js +4 -2
  7. package/dist/cjs/Actions/SegmentedControl/SegmentedControl.js +3 -2
  8. package/dist/cjs/Actions/SegmentedControl/SegmentedControlOption.js +6 -3
  9. package/dist/cjs/Actions/ToggleButton/ToggleButtonBase.js +3 -3
  10. package/dist/cjs/Actions/ToggleGroup/ToggleGroup.d.ts +13 -14
  11. package/dist/cjs/Chat/ChatContextAccordion/ChatContextAccordion.d.ts +23 -0
  12. package/dist/cjs/{Layout/Chat → Chat}/ChatContextAccordion/ChatContextAccordion.js +9 -2
  13. package/dist/cjs/{Layout/Chat → Chat}/ChatContextAccordion/ChatContextAccordion.styles.d.ts +20 -1
  14. package/dist/cjs/{Layout/Chat → Chat}/ChatContextAccordion/ChatContextAccordion.styles.js +3 -3
  15. package/dist/cjs/{Layout/Chat → Chat}/ChatMessage/ChatMessage.d.ts +80 -3
  16. package/dist/cjs/{Layout/Chat → Chat}/ChatMessage/ChatMessage.js +14 -5
  17. package/dist/{esm/Layout/Chat/ChatMessageError/ChatMessageError.styles.d.ts → cjs/Chat/ChatMessage/ChatMessage.styles.d.ts} +34 -40
  18. package/dist/cjs/{Layout/Chat → Chat}/ChatMessage/ChatMessage.styles.js +20 -14
  19. package/dist/{esm/Layout → cjs}/Chat/ChatMessageError/ChatMessageError.d.ts +7 -2
  20. package/dist/cjs/{Layout/Chat → Chat}/ChatMessageError/ChatMessageError.js +9 -4
  21. package/dist/cjs/Chat/ChatMessageError/ChatMessageError.styles.d.ts +253 -0
  22. package/dist/cjs/{Layout/Chat → Chat}/ChatMessageError/ChatMessageError.styles.js +2 -2
  23. package/dist/cjs/{Layout/Chat → Chat}/ChatMessageLoader/ChatMessageLoader.d.ts +6 -3
  24. package/dist/cjs/{Layout/Chat → Chat}/ChatMessageLoader/ChatMessageLoader.js +9 -4
  25. package/dist/{esm/Layout → cjs}/Chat/ChatMessageLoader/ChatMessageLoader.styles.d.ts +89 -9
  26. package/dist/cjs/{Layout/Chat → Chat}/ChatMessageLoader/ChatMessageLoader.styles.js +3 -3
  27. package/dist/cjs/Chat/ChatMessages/ChatMessages.d.ts +141 -0
  28. package/dist/cjs/{Layout/Chat → Chat}/ChatMessages/ChatMessages.js +64 -23
  29. package/dist/cjs/{Layout/Chat → Chat}/ChatMessages/ChatMessages.styles.d.ts +27 -1
  30. package/dist/cjs/{Layout/Chat → Chat}/ChatMessages/ChatMessages.styles.js +2 -2
  31. package/dist/cjs/Chat/ChatMessages/useLastMessageHeight.d.ts +14 -0
  32. package/dist/cjs/{Layout/Chat → Chat}/ChatMessages/useLastMessageHeight.js +21 -14
  33. package/dist/{esm/Layout → cjs}/Chat/ChatPrompt/ChatPrompt.d.ts +34 -12
  34. package/dist/cjs/{Layout/Chat → Chat}/ChatPrompt/ChatPrompt.js +46 -19
  35. package/dist/cjs/Chat/ChatPrompt/ChatPrompt.styles.d.ts +63 -0
  36. package/dist/cjs/{Layout/Chat → Chat}/ChatPrompt/ChatPrompt.styles.js +11 -4
  37. package/dist/cjs/Chat/ChatPrompt/useFocusTyping.d.ts +30 -0
  38. package/dist/cjs/Chat/ChatPrompt/useFocusTyping.js +65 -0
  39. package/dist/cjs/{Layout/Chat → Chat}/ChatPrompt/useTypewriter.d.ts +9 -0
  40. package/dist/cjs/{Layout/Chat → Chat}/ChatPrompt/useTypewriter.js +9 -0
  41. package/dist/cjs/Fields/Checkbox/Checkbox.d.ts +2 -2
  42. package/dist/cjs/Fields/Checkbox/Checkbox.js +2 -2
  43. package/dist/cjs/Fields/Dropzone/Dropzone.js +1 -1
  44. package/dist/cjs/Fields/Form/stories/Complex.js +123 -50
  45. package/dist/cjs/Fields/Input/Input.js +10 -13
  46. package/dist/cjs/Fields/RadioGroup/RadioButton.js +9 -2
  47. package/dist/cjs/Fields/RadioGroup/RadioButton.tailwind.js +1 -1
  48. package/dist/cjs/Fields/RadioGroup/RadioGroupContext.d.ts +2 -0
  49. package/dist/cjs/Fields/RadioGroup/RadioGroupItem.js +1 -1
  50. package/dist/cjs/Fields/Select/Select.tailwind.js +4 -3
  51. package/dist/cjs/Fields/SelectableCard/SelectableCard.d.ts +35 -0
  52. package/dist/cjs/Fields/SelectableCard/SelectableCard.js +105 -0
  53. package/dist/cjs/Fields/SelectableCard/SelectableCardContext.d.ts +13 -0
  54. package/dist/cjs/Fields/SelectableCard/SelectableCardContext.js +15 -0
  55. package/dist/cjs/Fields/SelectableCard/SelectableCardGroup.d.ts +13 -0
  56. package/dist/cjs/Fields/SelectableCard/SelectableCardGroup.js +55 -0
  57. package/dist/cjs/Fields/SelectableCard/index.d.ts +2 -0
  58. package/dist/cjs/Fields/SelectableCard/index.js +27 -0
  59. package/dist/cjs/Fields/Switch/Switch.js +1 -1
  60. package/dist/cjs/Fields/TextAreaAutoSize/TextAreaAutoSize.d.ts +12 -4
  61. package/dist/cjs/Fields/TextAreaAutoSize/TextAreaAutoSize.styles.d.ts +13 -1
  62. package/dist/cjs/Fields/index.d.ts +1 -0
  63. package/dist/cjs/Fields/index.js +11 -0
  64. package/dist/cjs/Helpers/ShimmerText/ShimmerText.tailwind.js +1 -1
  65. package/dist/cjs/Helpers/utilities/focusable.tailwind.js +1 -1
  66. package/dist/cjs/Layout/index.d.ts +0 -1
  67. package/dist/cjs/Layout/index.js +0 -11
  68. package/dist/cjs/Navigation/Link/Link.d.ts +10 -0
  69. package/dist/cjs/Navigation/Link/Link.js +4 -2
  70. package/dist/cjs/Satellite/locale.d.ts +3 -3
  71. package/dist/cjs/index.d.ts +1 -0
  72. package/dist/cjs/index.js +12 -0
  73. package/dist/cjs/styles/helpers/tv.d.ts +5 -1
  74. package/dist/cjs/utils/isCssPropertySupported.d.ts +1 -1
  75. package/dist/esm/Actions/Button/PolymorphicButton.js +6 -6
  76. package/dist/esm/Actions/Button/PolymorphicIconButton.js +2 -2
  77. package/dist/esm/Actions/Button/styles.d.ts +1 -0
  78. package/dist/esm/Actions/Button/styles.js +14 -9
  79. package/dist/esm/Actions/ButtonLink/ButtonLink.d.ts +2 -0
  80. package/dist/esm/Actions/ButtonLink/ButtonLink.js +4 -2
  81. package/dist/esm/Actions/SegmentedControl/SegmentedControl.js +3 -2
  82. package/dist/esm/Actions/SegmentedControl/SegmentedControlOption.js +6 -3
  83. package/dist/esm/Actions/ToggleButton/ToggleButtonBase.js +4 -4
  84. package/dist/esm/Actions/ToggleGroup/ToggleGroup.d.ts +13 -14
  85. package/dist/esm/Chat/ChatContextAccordion/ChatContextAccordion.d.ts +23 -0
  86. package/dist/esm/{Layout/Chat → Chat}/ChatContextAccordion/ChatContextAccordion.js +9 -2
  87. package/dist/esm/{Layout/Chat → Chat}/ChatContextAccordion/ChatContextAccordion.styles.d.ts +20 -1
  88. package/dist/esm/{Layout/Chat → Chat}/ChatContextAccordion/ChatContextAccordion.styles.js +3 -3
  89. package/dist/esm/{Layout/Chat → Chat}/ChatMessage/ChatMessage.d.ts +80 -3
  90. package/dist/esm/{Layout/Chat → Chat}/ChatMessage/ChatMessage.js +14 -5
  91. package/dist/{cjs/Layout/Chat/ChatMessageError/ChatMessageError.styles.d.ts → esm/Chat/ChatMessage/ChatMessage.styles.d.ts} +34 -40
  92. package/dist/esm/{Layout/Chat → Chat}/ChatMessage/ChatMessage.styles.js +20 -14
  93. package/dist/{cjs/Layout → esm}/Chat/ChatMessageError/ChatMessageError.d.ts +7 -2
  94. package/dist/esm/{Layout/Chat → Chat}/ChatMessageError/ChatMessageError.js +8 -3
  95. package/dist/esm/Chat/ChatMessageError/ChatMessageError.styles.d.ts +253 -0
  96. package/dist/esm/{Layout/Chat → Chat}/ChatMessageError/ChatMessageError.styles.js +2 -2
  97. package/dist/esm/{Layout/Chat → Chat}/ChatMessageLoader/ChatMessageLoader.d.ts +6 -3
  98. package/dist/esm/{Layout/Chat → Chat}/ChatMessageLoader/ChatMessageLoader.js +9 -4
  99. package/dist/{cjs/Layout → esm}/Chat/ChatMessageLoader/ChatMessageLoader.styles.d.ts +89 -9
  100. package/dist/esm/{Layout/Chat → Chat}/ChatMessageLoader/ChatMessageLoader.styles.js +3 -3
  101. package/dist/esm/Chat/ChatMessages/ChatMessages.d.ts +141 -0
  102. package/dist/esm/{Layout/Chat → Chat}/ChatMessages/ChatMessages.js +64 -25
  103. package/dist/esm/{Layout/Chat → Chat}/ChatMessages/ChatMessages.styles.d.ts +27 -1
  104. package/dist/esm/{Layout/Chat → Chat}/ChatMessages/ChatMessages.styles.js +2 -2
  105. package/dist/esm/Chat/ChatMessages/useLastMessageHeight.d.ts +14 -0
  106. package/dist/esm/{Layout/Chat → Chat}/ChatMessages/useLastMessageHeight.js +22 -15
  107. package/dist/{cjs/Layout → esm}/Chat/ChatPrompt/ChatPrompt.d.ts +34 -12
  108. package/dist/esm/{Layout/Chat → Chat}/ChatPrompt/ChatPrompt.js +47 -19
  109. package/dist/esm/Chat/ChatPrompt/ChatPrompt.styles.d.ts +63 -0
  110. package/dist/esm/{Layout/Chat → Chat}/ChatPrompt/ChatPrompt.styles.js +11 -4
  111. package/dist/esm/Chat/ChatPrompt/useFocusTyping.d.ts +30 -0
  112. package/dist/esm/Chat/ChatPrompt/useFocusTyping.js +59 -0
  113. package/dist/esm/{Layout/Chat → Chat}/ChatPrompt/useTypewriter.d.ts +9 -0
  114. package/dist/esm/{Layout/Chat → Chat}/ChatPrompt/useTypewriter.js +9 -0
  115. package/dist/esm/Fields/Checkbox/Checkbox.d.ts +2 -2
  116. package/dist/esm/Fields/Checkbox/Checkbox.js +2 -2
  117. package/dist/esm/Fields/Dropzone/Dropzone.js +1 -1
  118. package/dist/esm/Fields/Form/stories/Complex.js +123 -50
  119. package/dist/esm/Fields/Input/Input.js +10 -13
  120. package/dist/esm/Fields/RadioGroup/RadioButton.js +10 -3
  121. package/dist/esm/Fields/RadioGroup/RadioButton.tailwind.js +1 -1
  122. package/dist/esm/Fields/RadioGroup/RadioGroupContext.d.ts +2 -0
  123. package/dist/esm/Fields/RadioGroup/RadioGroupItem.js +1 -1
  124. package/dist/esm/Fields/Select/Select.tailwind.js +4 -3
  125. package/dist/esm/Fields/SelectableCard/SelectableCard.d.ts +35 -0
  126. package/dist/esm/Fields/SelectableCard/SelectableCard.js +100 -0
  127. package/dist/esm/Fields/SelectableCard/SelectableCardContext.d.ts +13 -0
  128. package/dist/esm/Fields/SelectableCard/SelectableCardContext.js +9 -0
  129. package/dist/esm/Fields/SelectableCard/SelectableCardGroup.d.ts +13 -0
  130. package/dist/esm/Fields/SelectableCard/SelectableCardGroup.js +48 -0
  131. package/dist/esm/Fields/SelectableCard/index.d.ts +2 -0
  132. package/dist/esm/Fields/SelectableCard/index.js +2 -0
  133. package/dist/esm/Fields/Switch/Switch.js +1 -1
  134. package/dist/esm/Fields/TextAreaAutoSize/TextAreaAutoSize.d.ts +12 -4
  135. package/dist/esm/Fields/TextAreaAutoSize/TextAreaAutoSize.styles.d.ts +13 -1
  136. package/dist/esm/Fields/index.d.ts +1 -0
  137. package/dist/esm/Fields/index.js +1 -0
  138. package/dist/esm/Helpers/ShimmerText/ShimmerText.tailwind.js +1 -1
  139. package/dist/esm/Helpers/utilities/focusable.tailwind.js +1 -1
  140. package/dist/esm/Layout/index.d.ts +0 -1
  141. package/dist/esm/Layout/index.js +0 -1
  142. package/dist/esm/Navigation/Link/Link.d.ts +10 -0
  143. package/dist/esm/Navigation/Link/Link.js +4 -2
  144. package/dist/esm/Satellite/locale.d.ts +3 -3
  145. package/dist/esm/index.d.ts +1 -0
  146. package/dist/esm/index.js +1 -0
  147. package/dist/esm/styles/helpers/tv.d.ts +5 -1
  148. package/dist/esm/utils/isCssPropertySupported.d.ts +1 -1
  149. package/dist/satellite.min.css +1 -1
  150. package/package.json +4 -4
  151. package/dist/cjs/Layout/Chat/ChatContextAccordion/ChatContextAccordion.d.ts +0 -8
  152. package/dist/cjs/Layout/Chat/ChatMessage/ChatMessage.styles.d.ts +0 -100
  153. package/dist/cjs/Layout/Chat/ChatMessages/ChatMessages.d.ts +0 -42
  154. package/dist/cjs/Layout/Chat/ChatMessages/useLastMessageHeight.d.ts +0 -10
  155. package/dist/cjs/Layout/Chat/ChatPrompt/ChatPrompt.styles.d.ts +0 -61
  156. package/dist/esm/Layout/Chat/ChatContextAccordion/ChatContextAccordion.d.ts +0 -8
  157. package/dist/esm/Layout/Chat/ChatMessage/ChatMessage.styles.d.ts +0 -100
  158. package/dist/esm/Layout/Chat/ChatMessages/ChatMessages.d.ts +0 -42
  159. package/dist/esm/Layout/Chat/ChatMessages/useLastMessageHeight.d.ts +0 -10
  160. package/dist/esm/Layout/Chat/ChatPrompt/ChatPrompt.styles.d.ts +0 -61
  161. /package/dist/cjs/{Layout/Chat → Chat}/ChatContextAccordion/index.d.ts +0 -0
  162. /package/dist/cjs/{Layout/Chat → Chat}/ChatContextAccordion/index.js +0 -0
  163. /package/dist/cjs/{Layout/Chat → Chat}/ChatMessage/index.d.ts +0 -0
  164. /package/dist/cjs/{Layout/Chat → Chat}/ChatMessage/index.js +0 -0
  165. /package/dist/cjs/{Layout/Chat → Chat}/ChatMessageError/index.d.ts +0 -0
  166. /package/dist/cjs/{Layout/Chat → Chat}/ChatMessageError/index.js +0 -0
  167. /package/dist/cjs/{Layout/Chat → Chat}/ChatMessageLoader/index.d.ts +0 -0
  168. /package/dist/cjs/{Layout/Chat → Chat}/ChatMessageLoader/index.js +0 -0
  169. /package/dist/cjs/{Layout/Chat → Chat}/ChatMessages/index.d.ts +0 -0
  170. /package/dist/cjs/{Layout/Chat → Chat}/ChatMessages/index.js +0 -0
  171. /package/dist/cjs/{Layout/Chat → Chat}/ChatPrompt/index.d.ts +0 -0
  172. /package/dist/cjs/{Layout/Chat → Chat}/ChatPrompt/index.js +0 -0
  173. /package/dist/cjs/{Layout/Chat → Chat}/index.d.ts +0 -0
  174. /package/dist/cjs/{Layout/Chat → Chat}/index.js +0 -0
  175. /package/dist/cjs/{Layout/Chat → Chat}/types.d.ts +0 -0
  176. /package/dist/cjs/{Layout/Chat → Chat}/types.js +0 -0
  177. /package/dist/esm/{Layout/Chat → Chat}/ChatContextAccordion/index.d.ts +0 -0
  178. /package/dist/esm/{Layout/Chat → Chat}/ChatContextAccordion/index.js +0 -0
  179. /package/dist/esm/{Layout/Chat → Chat}/ChatMessage/index.d.ts +0 -0
  180. /package/dist/esm/{Layout/Chat → Chat}/ChatMessage/index.js +0 -0
  181. /package/dist/esm/{Layout/Chat → Chat}/ChatMessageError/index.d.ts +0 -0
  182. /package/dist/esm/{Layout/Chat → Chat}/ChatMessageError/index.js +0 -0
  183. /package/dist/esm/{Layout/Chat → Chat}/ChatMessageLoader/index.d.ts +0 -0
  184. /package/dist/esm/{Layout/Chat → Chat}/ChatMessageLoader/index.js +0 -0
  185. /package/dist/esm/{Layout/Chat → Chat}/ChatMessages/index.d.ts +0 -0
  186. /package/dist/esm/{Layout/Chat → Chat}/ChatMessages/index.js +0 -0
  187. /package/dist/esm/{Layout/Chat → Chat}/ChatPrompt/index.d.ts +0 -0
  188. /package/dist/esm/{Layout/Chat → Chat}/ChatPrompt/index.js +0 -0
  189. /package/dist/esm/{Layout/Chat → Chat}/index.d.ts +0 -0
  190. /package/dist/esm/{Layout/Chat → Chat}/index.js +0 -0
  191. /package/dist/esm/{Layout/Chat → Chat}/types.d.ts +0 -0
  192. /package/dist/esm/{Layout/Chat → Chat}/types.js +0 -0
@@ -2,62 +2,62 @@ export declare const chatMessageLoaderStyles: import("tailwind-variants").TVRetu
2
2
  [key: string]: {
3
3
  [key: string]: import("tailwind-merge").ClassNameValue | {
4
4
  content?: import("tailwind-merge").ClassNameValue;
5
+ skeleton?: import("tailwind-merge").ClassNameValue;
5
6
  message?: import("tailwind-merge").ClassNameValue;
6
7
  skeletonWrapper?: import("tailwind-merge").ClassNameValue;
7
- skeleton?: import("tailwind-merge").ClassNameValue;
8
8
  };
9
9
  };
10
10
  } | {
11
11
  variant: {
12
12
  neutral: import("tailwind-merge").ClassNameValue | {
13
13
  content?: import("tailwind-merge").ClassNameValue;
14
+ skeleton?: import("tailwind-merge").ClassNameValue;
14
15
  message?: import("tailwind-merge").ClassNameValue;
15
16
  skeletonWrapper?: import("tailwind-merge").ClassNameValue;
16
- skeleton?: import("tailwind-merge").ClassNameValue;
17
17
  };
18
18
  subtle: import("tailwind-merge").ClassNameValue | {
19
19
  content?: import("tailwind-merge").ClassNameValue;
20
+ skeleton?: import("tailwind-merge").ClassNameValue;
20
21
  message?: import("tailwind-merge").ClassNameValue;
21
22
  skeletonWrapper?: import("tailwind-merge").ClassNameValue;
22
- skeleton?: import("tailwind-merge").ClassNameValue;
23
23
  };
24
24
  };
25
25
  side: {
26
26
  left: import("tailwind-merge").ClassNameValue | {
27
27
  content?: import("tailwind-merge").ClassNameValue;
28
+ skeleton?: import("tailwind-merge").ClassNameValue;
28
29
  message?: import("tailwind-merge").ClassNameValue;
29
30
  skeletonWrapper?: import("tailwind-merge").ClassNameValue;
30
- skeleton?: import("tailwind-merge").ClassNameValue;
31
31
  };
32
32
  right: import("tailwind-merge").ClassNameValue | {
33
33
  content?: import("tailwind-merge").ClassNameValue;
34
+ skeleton?: import("tailwind-merge").ClassNameValue;
34
35
  message?: import("tailwind-merge").ClassNameValue;
35
36
  skeletonWrapper?: import("tailwind-merge").ClassNameValue;
36
- skeleton?: import("tailwind-merge").ClassNameValue;
37
37
  };
38
38
  };
39
39
  leading: {
40
40
  true: import("tailwind-merge").ClassNameValue | {
41
41
  content?: import("tailwind-merge").ClassNameValue;
42
+ skeleton?: import("tailwind-merge").ClassNameValue;
42
43
  message?: import("tailwind-merge").ClassNameValue;
43
44
  skeletonWrapper?: import("tailwind-merge").ClassNameValue;
44
- skeleton?: import("tailwind-merge").ClassNameValue;
45
45
  };
46
46
  };
47
47
  actions: {
48
48
  true: import("tailwind-merge").ClassNameValue | {
49
49
  content?: import("tailwind-merge").ClassNameValue;
50
+ skeleton?: import("tailwind-merge").ClassNameValue;
50
51
  message?: import("tailwind-merge").ClassNameValue;
51
52
  skeletonWrapper?: import("tailwind-merge").ClassNameValue;
52
- skeleton?: import("tailwind-merge").ClassNameValue;
53
53
  };
54
54
  };
55
55
  autoHideActions: {
56
56
  true: import("tailwind-merge").ClassNameValue | {
57
57
  content?: import("tailwind-merge").ClassNameValue;
58
+ skeleton?: import("tailwind-merge").ClassNameValue;
58
59
  message?: import("tailwind-merge").ClassNameValue;
59
60
  skeletonWrapper?: import("tailwind-merge").ClassNameValue;
60
- skeleton?: import("tailwind-merge").ClassNameValue;
61
61
  };
62
62
  };
63
63
  }, {
@@ -66,6 +66,18 @@ export declare const chatMessageLoaderStyles: import("tailwind-variants").TVRetu
66
66
  skeletonWrapper: string;
67
67
  skeleton: string;
68
68
  }, undefined, {
69
+ responsiveVariants?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | {
70
+ variant?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
71
+ leading?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
72
+ side?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
73
+ actions?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
74
+ autoHideActions?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
75
+ } | undefined;
76
+ } & import("tailwind-variants/dist/config").TWMConfig & {
77
+ twMergeConfig: {
78
+ prefix: string;
79
+ };
80
+ }, {
69
81
  variant: {
70
82
  neutral: {
71
83
  message: string;
@@ -98,6 +110,7 @@ export declare const chatMessageLoaderStyles: import("tailwind-variants").TVRetu
98
110
  content: string;
99
111
  message: string;
100
112
  actions: string;
113
+ footer: string;
101
114
  }, import("tailwind-variants").TVReturnType<{
102
115
  variant: {
103
116
  neutral: {
@@ -131,7 +144,20 @@ export declare const chatMessageLoaderStyles: import("tailwind-variants").TVRetu
131
144
  content: string;
132
145
  message: string;
133
146
  actions: string;
147
+ footer: string;
134
148
  }, undefined, {
149
+ responsiveVariants?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | {
150
+ variant?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
151
+ leading?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
152
+ side?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
153
+ actions?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
154
+ autoHideActions?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
155
+ } | undefined;
156
+ } & import("tailwind-variants/dist/config").TWMConfig & {
157
+ twMergeConfig: {
158
+ prefix: string;
159
+ };
160
+ }, {
135
161
  variant: {
136
162
  neutral: {
137
163
  message: string;
@@ -164,6 +190,7 @@ export declare const chatMessageLoaderStyles: import("tailwind-variants").TVRetu
164
190
  content: string;
165
191
  message: string;
166
192
  actions: string;
193
+ footer: string;
167
194
  }, import("tailwind-variants").TVReturnType<{
168
195
  variant: {
169
196
  neutral: {
@@ -197,4 +224,57 @@ export declare const chatMessageLoaderStyles: import("tailwind-variants").TVRetu
197
224
  content: string;
198
225
  message: string;
199
226
  actions: string;
200
- }, undefined, unknown, unknown, undefined>>>;
227
+ footer: string;
228
+ }, undefined, import("tailwind-variants/dist/config").TVConfig<{
229
+ variant: {
230
+ neutral: {
231
+ message: string;
232
+ };
233
+ subtle: {
234
+ message: string;
235
+ };
236
+ };
237
+ side: {
238
+ left: {
239
+ container: string;
240
+ };
241
+ right: {
242
+ container: string;
243
+ };
244
+ };
245
+ leading: {
246
+ true: string;
247
+ };
248
+ actions: {
249
+ true: string;
250
+ };
251
+ autoHideActions: {
252
+ true: string;
253
+ };
254
+ }, {
255
+ variant: {
256
+ neutral: {
257
+ message: string;
258
+ };
259
+ subtle: {
260
+ message: string;
261
+ };
262
+ };
263
+ side: {
264
+ left: {
265
+ container: string;
266
+ };
267
+ right: {
268
+ container: string;
269
+ };
270
+ };
271
+ leading: {
272
+ true: string;
273
+ };
274
+ actions: {
275
+ true: string;
276
+ };
277
+ autoHideActions: {
278
+ true: string;
279
+ };
280
+ }>, unknown, unknown, undefined>>>;
@@ -1,13 +1,13 @@
1
1
  import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
2
  var _templateObject, _templateObject2, _templateObject3, _templateObject4;
3
3
  import { chatMessageStyles } from "./../ChatMessage/ChatMessage.styles";
4
- import stl from "./../../../styles/helpers/satellitePrefixer";
5
- import { tv } from "./../../../styles/helpers/tv";
4
+ import stl from "./../../styles/helpers/satellitePrefixer";
5
+ import { tv } from "./../../styles/helpers/tv";
6
6
  export var chatMessageLoaderStyles = tv({
7
7
  extend: chatMessageStyles,
8
8
  slots: {
9
9
  content: stl(_templateObject || (_templateObject = _taggedTemplateLiteral(["w-full"]))),
10
- message: stl(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["flex flex-col gap-2 typo-subdued"]))),
10
+ message: stl(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["flex flex-col gap-2"]))),
11
11
  skeletonWrapper: stl(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["flex flex-col gap-1"]))),
12
12
  skeleton: stl(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["h-4"])))
13
13
  }
@@ -0,0 +1,141 @@
1
+ import type { HTMLAttributes, ReactElement, ReactNode, Ref } from "react";
2
+ import type { ChatMessageProps } from "../../Chat/ChatMessage";
3
+ import type { ChatMessageErrorProps } from "../../Chat/ChatMessageError";
4
+ import type { ChatMessageLoaderProps } from "../../Chat/ChatMessageLoader";
5
+ import type { ChatMessageBase, ChatStatus } from "../../Chat/types";
6
+ export declare type ChatMessageLocale = {
7
+ scrollToBottomText?: string;
8
+ };
9
+ declare type ChatMessageWithoutContent<Message extends ChatMessageBase> = Omit<ChatMessageProps<Message>, "content">;
10
+ export declare type ChatMessagesProps<Message extends ChatMessageBase = ChatMessageBase> = Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
11
+ /**
12
+ * The messages to display in the chat.
13
+ */
14
+ messages: Message[];
15
+ /**
16
+ * The props for the user message.
17
+ */
18
+ userMessageProps?: ChatMessageWithoutContent<Message> | ((message: Message) => ChatMessageWithoutContent<Message>);
19
+ /**
20
+ * The props for the assistant message.
21
+ */
22
+ assistantMessageProps?: ChatMessageWithoutContent<Message> | ((message: Message) => ChatMessageWithoutContent<Message>);
23
+ /**
24
+ * The props for the loader message.
25
+ */
26
+ loaderProps?: ChatMessageLoaderProps;
27
+ /**
28
+ * The props for the error message.
29
+ */
30
+ errorProps?: Omit<ChatMessageErrorProps, "onReload">;
31
+ /**
32
+ * The function to render the message.
33
+ */
34
+ renderMessage?: (message: Message) => ReactNode;
35
+ /**
36
+ * The function to render the loader message.
37
+ */
38
+ renderLoader?: ReactNode;
39
+ /**
40
+ * The function to render the error message.
41
+ */
42
+ renderError?: ReactNode;
43
+ /**
44
+ * The status of the chat.
45
+ */
46
+ status?: ChatStatus;
47
+ /**
48
+ * The function to reload the chat.
49
+ */
50
+ onReload?: () => void;
51
+ /**
52
+ * Whether to hide the scroll to bottom button.
53
+ */
54
+ hideScrollToBottom?: boolean;
55
+ /**
56
+ * The class name for the scroll container.
57
+ */
58
+ scrollClassName?: string;
59
+ /**
60
+ * The class name for the content container.
61
+ */
62
+ contentClassName?: string;
63
+ /**
64
+ * The locale for the chat messages.
65
+ */
66
+ locale?: ChatMessageLocale;
67
+ /**
68
+ * Whether to enable right-to-left text direction.
69
+ */
70
+ rtl?: boolean;
71
+ };
72
+ /**
73
+ * The `ChatMessages` component provides a list of messages to display in the chat.
74
+ *
75
+ * See the [ChatMessages documentation page](https://satellite.algolia.com/8261d6576/p/06f740-chat-messages) for more information.
76
+ */
77
+ export declare const ChatMessages: <Message extends ChatMessageBase = ChatMessageBase>(props: Omit<HTMLAttributes<HTMLDivElement>, "children"> & {
78
+ /**
79
+ * The messages to display in the chat.
80
+ */
81
+ messages: Message[];
82
+ /**
83
+ * The props for the user message.
84
+ */
85
+ userMessageProps?: ChatMessageWithoutContent<Message> | ((message: Message) => ChatMessageWithoutContent<Message>) | undefined;
86
+ /**
87
+ * The props for the assistant message.
88
+ */
89
+ assistantMessageProps?: ChatMessageWithoutContent<Message> | ((message: Message) => ChatMessageWithoutContent<Message>) | undefined;
90
+ /**
91
+ * The props for the loader message.
92
+ */
93
+ loaderProps?: ChatMessageLoaderProps | undefined;
94
+ /**
95
+ * The props for the error message.
96
+ */
97
+ errorProps?: Omit<ChatMessageErrorProps, "onReload"> | undefined;
98
+ /**
99
+ * The function to render the message.
100
+ */
101
+ renderMessage?: ((message: Message) => ReactNode) | undefined;
102
+ /**
103
+ * The function to render the loader message.
104
+ */
105
+ renderLoader?: ReactNode;
106
+ /**
107
+ * The function to render the error message.
108
+ */
109
+ renderError?: ReactNode;
110
+ /**
111
+ * The status of the chat.
112
+ */
113
+ status?: ChatStatus | undefined;
114
+ /**
115
+ * The function to reload the chat.
116
+ */
117
+ onReload?: (() => void) | undefined;
118
+ /**
119
+ * Whether to hide the scroll to bottom button.
120
+ */
121
+ hideScrollToBottom?: boolean | undefined;
122
+ /**
123
+ * The class name for the scroll container.
124
+ */
125
+ scrollClassName?: string | undefined;
126
+ /**
127
+ * The class name for the content container.
128
+ */
129
+ contentClassName?: string | undefined;
130
+ /**
131
+ * The locale for the chat messages.
132
+ */
133
+ locale?: ChatMessageLocale | undefined;
134
+ /**
135
+ * Whether to enable right-to-left text direction.
136
+ */
137
+ rtl?: boolean | undefined;
138
+ } & {
139
+ ref?: Ref<HTMLDivElement> | undefined;
140
+ }) => ReactElement | null;
141
+ export {};
@@ -2,25 +2,29 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
- var _excluded = ["messages", "userMessageProps", "assistantMessageProps", "loaderProps", "errorProps", "renderMessage", "renderLoader", "renderError", "status", "onReload", "hideScrollToBottom", "className", "scrollClassName", "contentClassName", "locale"];
5
+ var _excluded = ["messages", "userMessageProps", "assistantMessageProps", "loaderProps", "errorProps", "renderMessage", "renderLoader", "renderError", "status", "onReload", "hideScrollToBottom", "className", "scrollClassName", "contentClassName", "locale", "rtl"];
6
6
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7
7
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
- import { ChevronDownIcon } from "lucide-react";
9
- import { useEffect } from "react";
10
- import { useRef, useState } from "react";
11
- import { forwardRef } from "react";
8
+ import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
12
9
  import { useStickToBottom } from "use-stick-to-bottom";
13
10
  import { chatMessagesStyles } from "./ChatMessages.styles";
14
11
  import { useLastMessageHeight } from "./useLastMessageHeight";
15
- import { IconButton } from "./../../../Actions";
12
+ import { IconButton } from "./../../Actions";
16
13
  import { ChatMessage } from "./../ChatMessage";
17
14
  import { ChatMessageError } from "./../ChatMessageError";
18
15
  import { ChatMessageLoader } from "./../ChatMessageLoader";
19
- import { useLocale } from "./../../../Satellite";
16
+ import { ChevronDownIcon } from "./../../Icons";
17
+ import { useLocale } from "./../../Satellite";
20
18
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
21
19
  var DEFAULT_CHAT_MESSAGE_LOCALE = {
22
20
  scrollToBottomText: "Scroll to bottom"
23
21
  };
22
+ function resolveProps(propsOrFn, message) {
23
+ if (typeof propsOrFn === "function") {
24
+ return propsOrFn(message);
25
+ }
26
+ return propsOrFn;
27
+ }
24
28
  var ChatMessagesBase = function ChatMessagesBase(_ref, forwardedRef) {
25
29
  var messages = _ref.messages,
26
30
  userMessageProps = _ref.userMessageProps,
@@ -38,19 +42,22 @@ var ChatMessagesBase = function ChatMessagesBase(_ref, forwardedRef) {
38
42
  scrollClassName = _ref.scrollClassName,
39
43
  contentClassName = _ref.contentClassName,
40
44
  propsLocale = _ref.locale,
45
+ _ref$rtl = _ref.rtl,
46
+ rtl = _ref$rtl === void 0 ? false : _ref$rtl,
41
47
  props = _objectWithoutProperties(_ref, _excluded);
42
48
  var contextLocale = useLocale("chatMessage");
43
49
  var locale = _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_CHAT_MESSAGE_LOCALE), contextLocale), propsLocale);
44
50
  var _useStickToBottom = useStickToBottom({
45
- resize: "smooth",
46
- initial: "smooth"
51
+ // @ts-expect-error - Types are wrong in use-stick-to-bottom
52
+ initial: "instant",
53
+ resize: "smooth"
47
54
  }),
48
55
  scrollRef = _useStickToBottom.scrollRef,
49
56
  contentRef = _useStickToBottom.contentRef,
50
57
  isAtBottom = _useStickToBottom.isAtBottom,
51
58
  scrollToBottom = _useStickToBottom.scrollToBottom;
52
59
  var styles = chatMessagesStyles();
53
- var messageRefs = useRef(new Map());
60
+ var lastUserMessageRef = useRef(null);
54
61
  var _useState = useState(false),
55
62
  _useState2 = _slicedToArray(_useState, 2),
56
63
  lastMessageSubmitted = _useState2[0],
@@ -58,19 +65,43 @@ var ChatMessagesBase = function ChatMessagesBase(_ref, forwardedRef) {
58
65
  var lastUserMessage = _toConsumableArray(messages).reverse().find(function (m) {
59
66
  return m.role === "user";
60
67
  });
61
- var lastUserMessageEl = lastUserMessage ? messageRefs.current.get(lastUserMessage.id) : undefined;
62
- var lastMessageHeight = useLastMessageHeight(scrollRef, messages, lastUserMessageEl, lastMessageSubmitted, 24);
68
+ var lastMessageHeight = useLastMessageHeight(scrollRef, lastUserMessageRef, messages, lastMessageSubmitted, 24);
69
+ var lastMessageId = useMemo(function () {
70
+ var _messages;
71
+ return (_messages = messages[messages.length - 1]) === null || _messages === void 0 ? void 0 : _messages.id;
72
+ }, [messages]);
73
+ var getMessageProps = useCallback(function (message) {
74
+ var propsResult;
75
+ if (message.role === "assistant") {
76
+ propsResult = resolveProps(assistantMessageProps, message);
77
+
78
+ // If the last assistant message is streaming, we don't want to render actions or footer
79
+ if ((status === "streaming" || message.content.length === 0) && lastMessageId === message.id) {
80
+ propsResult = _objectSpread(_objectSpread({}, propsResult), {}, {
81
+ renderFooter: undefined,
82
+ renderActions: undefined,
83
+ actions: undefined
84
+ });
85
+ }
86
+ } else {
87
+ propsResult = resolveProps(userMessageProps, message);
88
+ }
89
+ return propsResult;
90
+ }, [assistantMessageProps, userMessageProps, status, lastMessageId]);
63
91
  useEffect(function () {
64
- if (status !== "submitted" || !lastUserMessage) {
65
- return;
92
+ if (status === "submitted" && lastUserMessage) {
93
+ setLastMessageSubmitted(true);
94
+ void scrollToBottom();
66
95
  }
67
- setLastMessageSubmitted(true);
68
- }, [status, messages, lastUserMessage]);
96
+ // eslint-disable-next-line react-hooks/exhaustive-deps
97
+ }, [status, lastUserMessage]);
69
98
  return /*#__PURE__*/_jsxs("div", _objectSpread(_objectSpread({}, props), {}, {
70
99
  ref: forwardedRef,
71
100
  className: styles.base({
72
101
  className: className
73
102
  }),
103
+ role: "log",
104
+ "aria-live": "polite",
74
105
  children: [/*#__PURE__*/_jsx("div", {
75
106
  ref: scrollRef,
76
107
  className: styles.scroll({
@@ -86,16 +117,17 @@ var ChatMessagesBase = function ChatMessagesBase(_ref, forwardedRef) {
86
117
  },
87
118
  children: [messages.map(function (message) {
88
119
  var isAssistant = message.role === "assistant";
120
+ var isLastUserMessage = (lastUserMessage === null || lastUserMessage === void 0 ? void 0 : lastUserMessage.id) === message.id;
121
+ var side = isAssistant ? "left" : "right";
89
122
  return /*#__PURE__*/_jsx(ChatMessage, _objectSpread(_objectSpread({
90
- ref: function ref(el) {
91
- if (el) messageRefs.current.set(message.id, el);else messageRefs.current["delete"](message.id);
92
- },
93
- side: isAssistant ? "left" : "right",
94
- variant: isAssistant ? "subtle" : "neutral",
95
- content: renderMessage ? renderMessage(message) : message.content
96
- }, isAssistant ? assistantMessageProps : userMessageProps), {}, {
97
- "data-role": message.role,
123
+ rtl: rtl,
124
+ ref: isLastUserMessage ? lastUserMessageRef : undefined,
125
+ side: side,
126
+ variant: isAssistant ? "subtle" : "neutral"
127
+ }, getMessageProps(message)), {}, {
128
+ content: renderMessage ? renderMessage(message) : message.content,
98
129
  actionsExtraData: message,
130
+ "data-role": message.role,
99
131
  "data-key": message.id
100
132
  }), message.id);
101
133
  }), status === "submitted" && (renderLoader !== null && renderLoader !== void 0 ? renderLoader : /*#__PURE__*/_jsx(ChatMessageLoader, _objectSpread({}, loaderProps))), status === "error" && (renderError !== null && renderError !== void 0 ? renderError : /*#__PURE__*/_jsx(ChatMessageError, _objectSpread(_objectSpread({}, errorProps), {}, {
@@ -112,8 +144,15 @@ var ChatMessagesBase = function ChatMessagesBase(_ref, forwardedRef) {
112
144
  className: styles.scrollToBottom({
113
145
  isAtBottom: isAtBottom
114
146
  }),
115
- tooltipHideDelay: 0
147
+ tooltipHideDelay: 0,
148
+ tabIndex: isAtBottom ? -1 : 0
116
149
  })]
117
150
  }));
118
151
  };
152
+
153
+ /**
154
+ * The `ChatMessages` component provides a list of messages to display in the chat.
155
+ *
156
+ * See the [ChatMessages documentation page](https://satellite.algolia.com/8261d6576/p/06f740-chat-messages) for more information.
157
+ */
119
158
  export var ChatMessages = /*#__PURE__*/forwardRef(ChatMessagesBase);
@@ -13,6 +13,14 @@ export declare const chatMessagesStyles: import("tailwind-variants").TVReturnTyp
13
13
  content: string;
14
14
  scrollToBottom: string;
15
15
  }, undefined, {
16
+ responsiveVariants?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | {
17
+ isAtBottom?: boolean | ("sm" | "md" | "lg" | "xl" | "2xl")[] | undefined;
18
+ } | undefined;
19
+ } & import("tailwind-variants/dist/config").TWMConfig & {
20
+ twMergeConfig: {
21
+ prefix: string;
22
+ };
23
+ }, {
16
24
  isAtBottom: {
17
25
  true: {
18
26
  scrollToBottom: string;
@@ -40,4 +48,22 @@ export declare const chatMessagesStyles: import("tailwind-variants").TVReturnTyp
40
48
  scroll: string;
41
49
  content: string;
42
50
  scrollToBottom: string;
43
- }, undefined, unknown, unknown, undefined>>;
51
+ }, undefined, import("tailwind-variants/dist/config").TVConfig<{
52
+ isAtBottom: {
53
+ true: {
54
+ scrollToBottom: string;
55
+ };
56
+ false: {
57
+ scrollToBottom: string;
58
+ };
59
+ };
60
+ }, {
61
+ isAtBottom: {
62
+ true: {
63
+ scrollToBottom: string;
64
+ };
65
+ false: {
66
+ scrollToBottom: string;
67
+ };
68
+ };
69
+ }>, unknown, unknown, undefined>>;
@@ -1,7 +1,7 @@
1
1
  import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
2
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
3
- import stl from "./../../../styles/helpers/satellitePrefixer";
4
- import { tv } from "./../../../styles/helpers/tv";
3
+ import stl from "./../../styles/helpers/satellitePrefixer";
4
+ import { tv } from "./../../styles/helpers/tv";
5
5
  export var chatMessagesStyles = tv({
6
6
  slots: {
7
7
  base: stl(_templateObject || (_templateObject = _taggedTemplateLiteral(["relative flex flex-col overflow-hidden h-full"]))),
@@ -0,0 +1,14 @@
1
+ import type { RefObject } from "react";
2
+ import type { ChatMessageBase } from "../../Chat/types";
3
+ /**
4
+ * React hook to compute the “fill” height below the last user message,
5
+ * based on the scroll container’s height, the last user‐message element’s height,
6
+ * and any CSS gap/padding offsets.
7
+ *
8
+ * @param scrollRef - The ref to the scroll container.
9
+ * @param lastUserMessageRef - The ref to the last user message.
10
+ * @param messages - The messages to display in the chat.
11
+ * @param lastMessageSubmitted - Whether the last message has been submitted.
12
+ * @param spacingOffset - The spacing offset.
13
+ */
14
+ export declare function useLastMessageHeight(scrollRef: RefObject<HTMLElement>, lastUserMessageRef: RefObject<HTMLDivElement | null>, messages: ChatMessageBase[], lastMessageSubmitted: boolean, spacingOffset?: number): number;
@@ -1,34 +1,41 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import { useRef } from "react";
2
3
  import { useLayoutEffect, useState } from "react";
3
-
4
4
  /**
5
5
  * React hook to compute the “fill” height below the last user message,
6
6
  * based on the scroll container’s height, the last user‐message element’s height,
7
7
  * and any CSS gap/padding offsets.
8
+ *
9
+ * @param scrollRef - The ref to the scroll container.
10
+ * @param lastUserMessageRef - The ref to the last user message.
11
+ * @param messages - The messages to display in the chat.
12
+ * @param lastMessageSubmitted - Whether the last message has been submitted.
13
+ * @param spacingOffset - The spacing offset.
8
14
  */
9
- export function useLastMessageHeight(scrollRef, messages, lastUserMessageEl, lastMessageSubmitted) {
15
+ export function useLastMessageHeight(scrollRef, lastUserMessageRef, messages, lastMessageSubmitted) {
10
16
  var spacingOffset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
11
17
  var _useState = useState(0),
12
18
  _useState2 = _slicedToArray(_useState, 2),
13
19
  lastMessageHeight = _useState2[0],
14
20
  setLastMessageHeight = _useState2[1];
15
- var updateLastMessageHeight = function updateLastMessageHeight() {
16
- var scrollEl = scrollRef.current;
17
- if (!scrollEl || messages.length === 0 || !lastMessageSubmitted || !lastUserMessageEl) return;
18
-
19
- // Measure parent/container height
20
- var parentHeight = scrollEl.clientHeight;
21
+ var offsetsRef = useRef(0);
22
+ function getStaticOffsets() {
23
+ if (offsetsRef.current || !scrollRef.current) return offsetsRef.current;
21
24
 
22
25
  // Compute any CSS gap/rowGap/padding offsets by reading computed style
23
- var computed = window.getComputedStyle(scrollEl);
26
+ var computed = window.getComputedStyle(scrollRef.current);
24
27
  var rowGapValue = parseFloat(computed.rowGap) || parseFloat(computed.gap) || 0;
25
28
  var paddingTop = parseFloat(computed.paddingTop) || 0;
26
29
  var paddingBottom = parseFloat(computed.paddingBottom) || 0;
27
- var totalOffset = spacingOffset + rowGapValue + paddingTop + paddingBottom;
28
-
29
- // The “remaining” height is parentHeight − lastMsgElem.offsetHeight − totalOffset
30
- var remaining = parentHeight - lastUserMessageEl.offsetHeight - totalOffset;
31
- setLastMessageHeight(Math.max(remaining, 0));
30
+ offsetsRef.current = spacingOffset + rowGapValue + paddingTop + paddingBottom;
31
+ return offsetsRef.current;
32
+ }
33
+ var updateLastMessageHeight = function updateLastMessageHeight() {
34
+ var scrollEl = scrollRef.current;
35
+ var lastUserMessageEl = lastUserMessageRef.current;
36
+ if (!scrollEl || messages.length === 0 || !lastMessageSubmitted || !lastUserMessageEl) return;
37
+ var height = Math.max(scrollEl.clientHeight - lastUserMessageEl.offsetHeight - getStaticOffsets(), 0);
38
+ setLastMessageHeight(height);
32
39
  };
33
40
 
34
41
  // Recompute whenever messages change and a new user message has just been submitted
@@ -36,6 +43,6 @@ export function useLastMessageHeight(scrollRef, messages, lastUserMessageEl, las
36
43
  if (!lastMessageSubmitted) return;
37
44
  updateLastMessageHeight();
38
45
  // eslint-disable-next-line react-hooks/exhaustive-deps
39
- }, [messages, lastMessageSubmitted]);
46
+ }, [messages.length, lastMessageSubmitted]);
40
47
  return lastMessageHeight;
41
48
  }