@hanzo/ui 4.6.0 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/dist/index.d.mts +16 -0
  2. package/dist/index.d.ts +16 -0
  3. package/dist/index.js +9458 -0
  4. package/dist/index.mjs +9449 -0
  5. package/dist/lib/utils.d.mts +2 -0
  6. package/dist/lib/utils.d.ts +2 -0
  7. package/dist/lib/utils.js +47 -0
  8. package/dist/lib/utils.mjs +28 -0
  9. package/dist/src/utils.d.mts +7 -0
  10. package/dist/src/utils.d.ts +7 -0
  11. package/dist/src/utils.js +47 -0
  12. package/dist/src/utils.mjs +28 -0
  13. package/dist/tailwind/index.d.mts +2 -0
  14. package/dist/tailwind/index.d.ts +2 -0
  15. package/dist/tailwind/index.js +2048 -0
  16. package/dist/tailwind/index.mjs +2017 -0
  17. package/dist/types/index.d.mts +12 -0
  18. package/dist/types/index.d.ts +12 -0
  19. package/dist/types/index.js +79 -0
  20. package/dist/types/index.mjs +56 -0
  21. package/package.json +151 -25
  22. package/MCP-INSTRUCTIONS.md +0 -73
  23. package/README-MCP.md +0 -175
  24. package/assets/ai-icons.tsx +0 -207
  25. package/assets/crypto.tsx +0 -33
  26. package/assets/file-type-icon.tsx +0 -66
  27. package/assets/file.tsx +0 -45
  28. package/assets/general.tsx +0 -2318
  29. package/assets/hanzo-logo.svg +0 -9
  30. package/assets/hanzo-logo.tsx +0 -15
  31. package/assets/index.ts +0 -8
  32. package/assets/index.tsx +0 -4
  33. package/assets/llm-provider.tsx +0 -1094
  34. package/blocks/components/accordian-block.tsx +0 -48
  35. package/blocks/components/block-component-props.ts +0 -11
  36. package/blocks/components/bullet-cards-block.tsx +0 -46
  37. package/blocks/components/card-block/index.tsx +0 -171
  38. package/blocks/components/card-block/link-out-button.tsx +0 -20
  39. package/blocks/components/card-block/util.ts +0 -28
  40. package/blocks/components/carte-blanche-block/index.tsx +0 -127
  41. package/blocks/components/carte-blanche-block/variant-content-left.tsx +0 -49
  42. package/blocks/components/content.tsx +0 -70
  43. package/blocks/components/cta-block.tsx +0 -115
  44. package/blocks/components/enh-heading-block.tsx +0 -204
  45. package/blocks/components/grid-block/grid-block-mutator.ts +0 -12
  46. package/blocks/components/grid-block/index.tsx +0 -83
  47. package/blocks/components/grid-block/mutator-registry.ts +0 -10
  48. package/blocks/components/grid-block/table-borders.mutator.ts +0 -47
  49. package/blocks/components/group-block.tsx +0 -83
  50. package/blocks/components/heading-block.tsx +0 -88
  51. package/blocks/components/image-block.tsx +0 -111
  52. package/blocks/components/index.ts +0 -30
  53. package/blocks/components/screenful-block/content.tsx +0 -123
  54. package/blocks/components/screenful-block/index.tsx +0 -107
  55. package/blocks/components/screenful-block/poster-background.tsx +0 -34
  56. package/blocks/components/screenful-block/video-background.tsx +0 -45
  57. package/blocks/components/space-block.tsx +0 -66
  58. package/blocks/components/video-block.tsx +0 -138
  59. package/blocks/def/accordian-block.ts +0 -14
  60. package/blocks/def/block.ts +0 -7
  61. package/blocks/def/bullet-cards-block.ts +0 -22
  62. package/blocks/def/card-block.ts +0 -22
  63. package/blocks/def/carte-blanche-block.ts +0 -21
  64. package/blocks/def/cta-block.ts +0 -19
  65. package/blocks/def/element-block.ts +0 -11
  66. package/blocks/def/enh-heading-block.ts +0 -44
  67. package/blocks/def/grid-block.ts +0 -16
  68. package/blocks/def/group-block.ts +0 -11
  69. package/blocks/def/heading-block.ts +0 -15
  70. package/blocks/def/image-block.ts +0 -31
  71. package/blocks/def/index.ts +0 -35
  72. package/blocks/def/screenful-block.ts +0 -54
  73. package/blocks/def/space-block.ts +0 -64
  74. package/blocks/def/video-block.ts +0 -9
  75. package/blocks/index.ts +0 -2
  76. package/components/index.ts +0 -56
  77. package/dist/button.d.ts +0 -1
  78. package/dist/button.js +0 -1
  79. package/dist/hooks/index.d.ts +0 -7
  80. package/dist/hooks/index.js +0 -7
  81. package/dist/hooks/use-click-away.d.ts +0 -2
  82. package/dist/hooks/use-click-away.js +0 -23
  83. package/dist/hooks/use-combined-refs.d.ts +0 -3
  84. package/dist/hooks/use-combined-refs.js +0 -18
  85. package/dist/hooks/use-copy-clipboard.d.ts +0 -9
  86. package/dist/hooks/use-copy-clipboard.js +0 -21
  87. package/dist/hooks/use-debounce.d.ts +0 -1
  88. package/dist/hooks/use-debounce.js +0 -13
  89. package/dist/hooks/use-fill-ids.d.ts +0 -8
  90. package/dist/hooks/use-fill-ids.js +0 -20
  91. package/dist/hooks/use-map.d.ts +0 -1
  92. package/dist/hooks/use-map.js +0 -20
  93. package/dist/hooks/use-measure.d.ts +0 -8
  94. package/dist/hooks/use-measure.js +0 -25
  95. package/dist/hooks/use-reverse-video-playback.d.ts +0 -1
  96. package/dist/hooks/use-reverse-video-playback.js +0 -41
  97. package/dist/hooks/use-scroll-restoration.d.ts +0 -8
  98. package/dist/hooks/use-scroll-restoration.js +0 -36
  99. package/dist/mcp/enhanced-server.d.ts +0 -29
  100. package/dist/mcp/enhanced-server.js +0 -1128
  101. package/dist/mcp/index.d.ts +0 -28
  102. package/dist/mcp/index.js +0 -436
  103. package/dist/registry/api.d.ts +0 -37
  104. package/dist/registry/api.js +0 -129
  105. package/dist/registry/index.d.ts +0 -353
  106. package/dist/registry/index.js +0 -45
  107. package/dist/utils.d.ts +0 -1
  108. package/dist/utils.js +0 -1
  109. package/environment.d.ts +0 -6
  110. package/helpers/file.ts +0 -33
  111. package/helpers/memoization.ts +0 -40
  112. package/primitives/accordion.tsx +0 -74
  113. package/primitives/action-button.tsx +0 -42
  114. package/primitives/alert-dialog.tsx +0 -185
  115. package/primitives/alert.tsx +0 -74
  116. package/primitives/apply-typography.tsx +0 -55
  117. package/primitives/aspect-ratio.tsx +0 -5
  118. package/primitives/avatar.tsx +0 -57
  119. package/primitives/background-beams.tsx +0 -142
  120. package/primitives/badge.tsx +0 -44
  121. package/primitives/breadcrumb.tsx +0 -130
  122. package/primitives/breakpoint-indicator.tsx +0 -19
  123. package/primitives/button.tsx +0 -82
  124. package/primitives/calendar.tsx +0 -72
  125. package/primitives/card.tsx +0 -97
  126. package/primitives/carousel.tsx +0 -237
  127. package/primitives/chat/chat-input-area.tsx +0 -87
  128. package/primitives/chat/chat-input.tsx +0 -71
  129. package/primitives/chat/files-preview.tsx +0 -330
  130. package/primitives/chat/index.ts +0 -6
  131. package/primitives/chat/json-form.tsx +0 -8
  132. package/primitives/chat/message-list.tsx +0 -307
  133. package/primitives/chat/message.tsx +0 -569
  134. package/primitives/chat/sqlite-preview.tsx +0 -215
  135. package/primitives/checkbox.tsx +0 -31
  136. package/primitives/collapsible.tsx +0 -9
  137. package/primitives/combobox.tsx +0 -239
  138. package/primitives/command.tsx +0 -149
  139. package/primitives/context-menu.tsx +0 -206
  140. package/primitives/copy-to-clipboard-icon.tsx +0 -60
  141. package/primitives/dialog-video-controller.tsx +0 -38
  142. package/primitives/dialog.tsx +0 -123
  143. package/primitives/dot-pattern.tsx +0 -57
  144. package/primitives/dots-loader.tsx +0 -13
  145. package/primitives/drawer.tsx +0 -110
  146. package/primitives/dropdown-menu.tsx +0 -199
  147. package/primitives/error-message.tsx +0 -19
  148. package/primitives/file-uploader.tsx +0 -200
  149. package/primitives/form.tsx +0 -183
  150. package/primitives/hover-card.tsx +0 -28
  151. package/primitives/icons/github.tsx +0 -14
  152. package/primitives/icons/index.ts +0 -18
  153. package/primitives/icons/youtube-logo.tsx +0 -59
  154. package/primitives/index-common.ts +0 -303
  155. package/primitives/index-next.ts +0 -4
  156. package/primitives/input-otp.tsx +0 -65
  157. package/primitives/input.tsx +0 -125
  158. package/primitives/label.tsx +0 -20
  159. package/primitives/list-adaptor.ts +0 -12
  160. package/primitives/list-box.tsx +0 -74
  161. package/primitives/loading-spinner.tsx +0 -33
  162. package/primitives/markdown-preview.tsx +0 -609
  163. package/primitives/mermaid.tsx +0 -196
  164. package/primitives/navigation-menu.tsx +0 -147
  165. package/primitives/next/image.tsx +0 -90
  166. package/primitives/next/index.ts +0 -7
  167. package/primitives/next/inline-icon.tsx +0 -36
  168. package/primitives/next/link-element.tsx +0 -109
  169. package/primitives/next/mdx-link.tsx +0 -22
  170. package/primitives/next/media-stack.tsx +0 -69
  171. package/primitives/next/nav-items.tsx +0 -45
  172. package/primitives/next/youtube-embed.tsx +0 -83
  173. package/primitives/pagination.tsx +0 -117
  174. package/primitives/popover.tsx +0 -32
  175. package/primitives/pretty-json-print.tsx +0 -28
  176. package/primitives/progress.tsx +0 -26
  177. package/primitives/prompt-textarea.tsx +0 -72
  178. package/primitives/qr-code.tsx +0 -112
  179. package/primitives/radio-group.tsx +0 -42
  180. package/primitives/resizable.tsx +0 -47
  181. package/primitives/scroll-area.tsx +0 -57
  182. package/primitives/search-input.tsx +0 -66
  183. package/primitives/select.tsx +0 -122
  184. package/primitives/separator.tsx +0 -25
  185. package/primitives/sheet.tsx +0 -139
  186. package/primitives/skeleton.tsx +0 -17
  187. package/primitives/slider.tsx +0 -62
  188. package/primitives/sonner.tsx +0 -35
  189. package/primitives/step-indicator.tsx +0 -69
  190. package/primitives/stepper.tsx +0 -272
  191. package/primitives/switch.tsx +0 -26
  192. package/primitives/table.tsx +0 -105
  193. package/primitives/tabs.tsx +0 -50
  194. package/primitives/text-area.tsx +0 -26
  195. package/primitives/text-link.tsx +0 -25
  196. package/primitives/textarea.tsx +0 -61
  197. package/primitives/textfield.tsx +0 -75
  198. package/primitives/toast.tsx +0 -30
  199. package/primitives/toggle-group.tsx +0 -63
  200. package/primitives/toggle.tsx +0 -44
  201. package/primitives/tooltip.tsx +0 -47
  202. package/primitives/video-player.tsx +0 -23
  203. package/public/r/accordion.json +0 -11
  204. package/public/r/alert.json +0 -11
  205. package/public/r/avatar.json +0 -11
  206. package/public/r/badge.json +0 -11
  207. package/public/r/button.json +0 -11
  208. package/public/r/card.json +0 -11
  209. package/public/r/checkbox.json +0 -11
  210. package/public/r/default.json +0 -6
  211. package/public/r/dialog.json +0 -11
  212. package/public/r/input.json +0 -11
  213. package/public/r/label.json +0 -11
  214. package/public/r/new-york.json +0 -6
  215. package/public/r/popover.json +0 -11
  216. package/public/r/select.json +0 -11
  217. package/public/r/table.json +0 -11
  218. package/public/r/tabs.json +0 -11
  219. package/public/r/toast.json +0 -11
  220. package/registry.json +0 -184
  221. package/src/button.ts +0 -1
  222. package/src/hooks/index.ts +0 -7
  223. package/src/hooks/use-click-away.ts +0 -31
  224. package/src/hooks/use-combined-refs.ts +0 -22
  225. package/src/hooks/use-copy-clipboard.ts +0 -30
  226. package/src/hooks/use-debounce.ts +0 -17
  227. package/src/hooks/use-fill-ids.ts +0 -25
  228. package/src/hooks/use-map.ts +0 -26
  229. package/src/hooks/use-measure.ts +0 -42
  230. package/src/hooks/use-reverse-video-playback.ts +0 -43
  231. package/src/hooks/use-scroll-restoration.ts +0 -50
  232. package/src/mcp/README.md +0 -141
  233. package/src/mcp/enhanced-server.ts +0 -1208
  234. package/src/mcp/index.ts +0 -518
  235. package/src/mcp/package.json +0 -10
  236. package/src/registry/api.ts +0 -164
  237. package/src/registry/index.ts +0 -60
  238. package/src/registry/package.json +0 -10
  239. package/src/utils.ts +0 -1
  240. package/tailwind/colors.tailwind.js +0 -53
  241. package/tailwind/fontFamily.tailwind.ts +0 -7
  242. package/tailwind/fontSize.tailwind.ts +0 -13
  243. package/tailwind/index.ts +0 -7
  244. package/tailwind/safelist.tailwind.js +0 -26
  245. package/tailwind/screens.tailwind.js +0 -8
  246. package/tailwind/spacing.tailwind.js +0 -65
  247. package/tailwind/tailwind.config.hanzo-preset.d.ts +0 -5
  248. package/tailwind/tailwind.config.hanzo-preset.js +0 -915
  249. package/tailwind/tw-font-desc.ts +0 -15
  250. package/tailwind/typo-plugin/get-plugin-styles.js +0 -679
  251. package/tailwind/typo-plugin/index.d.ts +0 -9
  252. package/tailwind/typo-plugin/index.js +0 -141
  253. package/tailwind/typo-plugin/utils.js +0 -60
  254. package/tailwind/typography-test.mdx +0 -35
  255. package/tailwind/z-index.tailwind.js +0 -71
  256. package/test/test-registry.js +0 -73
  257. package/test-imports.mjs +0 -19
  258. package/tsconfig.json +0 -22
  259. package/types/animation-def.ts +0 -3
  260. package/types/breakpoints.ts +0 -11
  261. package/types/bullet-item.ts +0 -10
  262. package/types/button-def.ts +0 -39
  263. package/types/dimensions.ts +0 -8
  264. package/types/grid-def.ts +0 -56
  265. package/types/image-def.ts +0 -32
  266. package/types/index.ts +0 -29
  267. package/types/link-def.ts +0 -56
  268. package/types/media-stack-def.ts +0 -31
  269. package/types/t-shirt-size.ts +0 -5
  270. package/types/tshirt-dimensions.ts +0 -20
  271. package/types/video-def.ts +0 -25
  272. package/util/blob.ts +0 -28
  273. package/util/copy-to-clipboard.ts +0 -17
  274. package/util/create-shadow-root.ts +0 -22
  275. package/util/date.ts +0 -83
  276. package/util/debounce.ts +0 -11
  277. package/util/file.ts +0 -15
  278. package/util/format-and-abbreviate-as-currency.ts +0 -125
  279. package/util/format-text.ts +0 -33
  280. package/util/format-to-max-char.ts +0 -68
  281. package/util/index-client.ts +0 -3
  282. package/util/index.ts +0 -9
  283. package/util/number-abbreviate.ts +0 -49
  284. package/util/specifier.ts +0 -43
  285. package/util/spread-to-transform.ts +0 -24
  286. package/util/step-animation.ts +0 -90
  287. package/util/timing.ts +0 -3
  288. package/util/toasts.tsx +0 -17
  289. package/util/two-way-map.ts +0 -19
  290. package/utils.ts +0 -9
@@ -1,307 +0,0 @@
1
- import { ChatConversationInfiniteData } from '@hanzo_network/hanzo-node-state/v2/queries/getChatConversation/types';
2
- import {
3
- type FetchPreviousPageOptions,
4
- type InfiniteQueryObserverResult,
5
- } from '@tanstack/react-query';
6
- import React, {
7
- Fragment,
8
- memo,
9
- type RefObject,
10
- useCallback,
11
- useEffect,
12
- useLayoutEffect,
13
- useRef,
14
- useState,
15
- } from 'react';
16
- import { useInView } from 'react-intersection-observer';
17
-
18
- import { getRelativeDateLabel, groupMessagesByDate } from '../../helpers';
19
- import { cn } from '../src/utils';
20
- import { Skeleton } from '../skeleton';
21
- import { Message } from './message';
22
-
23
- function useScrollToBottom(
24
- scrollRef: RefObject<HTMLDivElement | null>,
25
- detach = false,
26
- ) {
27
- const [autoScroll, setAutoScroll] = useState(true);
28
- function scrollDomToBottom() {
29
- const scrollContainer = scrollRef.current;
30
- if (scrollContainer) {
31
- requestAnimationFrame(() => {
32
- setAutoScroll(true);
33
- scrollContainer.scrollTo(0, scrollContainer.scrollHeight);
34
- });
35
- }
36
- }
37
-
38
- useEffect(() => {
39
- if (autoScroll && !detach) {
40
- scrollDomToBottom();
41
- }
42
- });
43
-
44
- return {
45
- scrollRef,
46
- autoScroll,
47
- setAutoScroll,
48
- scrollDomToBottom,
49
- };
50
- }
51
-
52
- export const MessageList = ({
53
- noMoreMessageLabel,
54
- paginatedMessages,
55
- isSuccess,
56
- isLoading,
57
- isFetchingPreviousPage,
58
- hasPreviousPage,
59
- fetchPreviousPage,
60
- containerClassName,
61
- lastMessageContent,
62
- editAndRegenerateMessage,
63
- regenerateMessage,
64
- disabledRetryAndEdit,
65
- messageExtra,
66
- hidePythonExecution,
67
- }: {
68
- noMoreMessageLabel: string;
69
- isSuccess: boolean;
70
- isLoading: boolean;
71
- isFetchingPreviousPage: boolean;
72
- hasPreviousPage: boolean;
73
- paginatedMessages: ChatConversationInfiniteData | undefined;
74
- fetchPreviousPage: (
75
- options?: FetchPreviousPageOptions | undefined,
76
- ) => Promise<
77
- InfiniteQueryObserverResult<ChatConversationInfiniteData, Error>
78
- >;
79
- regenerateMessage?: (messageId: string) => void;
80
- editAndRegenerateMessage?: (content: string, messageHash: string) => void;
81
- containerClassName?: string;
82
- lastMessageContent?: React.ReactNode;
83
- disabledRetryAndEdit?: boolean;
84
- messageExtra?: React.ReactNode;
85
- hidePythonExecution?: boolean;
86
- }) => {
87
- const chatContainerRef = useRef<HTMLDivElement>(null);
88
- const previousChatHeightRef = useRef<number>(0);
89
- const { ref, inView } = useInView();
90
- const messageList = paginatedMessages?.pages.flat() ?? [];
91
-
92
- const { autoScroll, setAutoScroll, scrollDomToBottom } =
93
- useScrollToBottom(chatContainerRef);
94
-
95
- const fetchPreviousMessages = useCallback(async () => {
96
- setAutoScroll(false);
97
- await fetchPreviousPage();
98
- }, [fetchPreviousPage]);
99
-
100
- useEffect(() => {
101
- if (hasPreviousPage && inView) {
102
- void fetchPreviousMessages();
103
- }
104
- }, [hasPreviousPage, inView]);
105
-
106
- // adjust the scroll position of a chat container after new messages are fetched
107
- useLayoutEffect(() => {
108
- if (!isFetchingPreviousPage && inView) {
109
- const chatContainerElement = chatContainerRef.current;
110
- if (!chatContainerElement) return;
111
- const currentHeight = chatContainerElement.scrollHeight;
112
- const previousHeight = previousChatHeightRef.current;
113
-
114
- if (!autoScroll) {
115
- chatContainerElement.scrollTop =
116
- currentHeight - previousHeight + chatContainerElement.scrollTop;
117
- } else {
118
- scrollDomToBottom();
119
- }
120
-
121
- chatContainerElement.scrollTop = currentHeight - previousHeight;
122
- }
123
- }, [paginatedMessages, isFetchingPreviousPage, inView]);
124
-
125
- useEffect(() => {
126
- const chatContainerElement = chatContainerRef.current;
127
- if (!chatContainerElement) return;
128
- const handleScroll = async () => {
129
- const currentHeight = chatContainerElement.scrollHeight;
130
- const currentScrollTop = chatContainerElement.scrollTop;
131
- previousChatHeightRef.current = currentHeight;
132
- const scrollThreshold = 100;
133
- const isNearBottom =
134
- currentScrollTop + chatContainerElement.clientHeight >=
135
- currentHeight - scrollThreshold;
136
-
137
- setAutoScroll(isNearBottom);
138
-
139
- if (inView && hasPreviousPage && !isFetchingPreviousPage) {
140
- previousChatHeightRef.current = currentHeight - currentScrollTop;
141
- }
142
- };
143
-
144
- chatContainerElement.addEventListener('scroll', handleScroll, {
145
- passive: true,
146
- });
147
- return () => {
148
- chatContainerElement.removeEventListener('scroll', handleScroll);
149
- };
150
- }, [
151
- fetchPreviousMessages,
152
- hasPreviousPage,
153
- inView,
154
- isFetchingPreviousPage,
155
- paginatedMessages?.pages?.length,
156
- ]);
157
-
158
- useEffect(() => {
159
- if (messageList?.length % 2 === 1) {
160
- scrollDomToBottom();
161
- }
162
- }, [messageList?.length]);
163
-
164
- useEffect(() => {
165
- if (isSuccess) {
166
- scrollDomToBottom();
167
- }
168
- }, [isSuccess]);
169
-
170
- return (
171
- <div
172
- className={cn(
173
- 'scroll flex-1 overflow-y-auto overscroll-none will-change-scroll',
174
- 'flex-1 overflow-y-auto',
175
- containerClassName,
176
- )}
177
- id="chat-container-scroll"
178
- ref={chatContainerRef}
179
- >
180
- {isSuccess &&
181
- !isFetchingPreviousPage &&
182
- !hasPreviousPage &&
183
- (paginatedMessages?.pages ?? [])?.length > 1 && (
184
- <div className="text-text-secondary py-2 text-center text-xs">
185
- {noMoreMessageLabel}
186
- </div>
187
- )}
188
- <div className="">
189
- {isLoading && (
190
- <div className="flex flex-col space-y-8">
191
- {[...Array(10).keys()].map((index) => (
192
- <div
193
- className={cn(
194
- 'flex w-[85%] gap-2',
195
- index % 2 === 0
196
- ? 'mr-auto ml-0 flex-row items-end'
197
- : 'mr-0 ml-auto flex-row-reverse items-start',
198
- )}
199
- key={`${index}`}
200
- >
201
- <Skeleton
202
- className="h-8 w-8 shrink-0 rounded-full bg-gray-300"
203
- key={index}
204
- />
205
- <Skeleton
206
- className={cn(
207
- 'w-full rounded-lg px-2.5 py-3',
208
- index % 2 === 0
209
- ? 'h-24 rounded-bl-none bg-gray-300'
210
- : 'h-16 rounded-tr-none bg-gray-200',
211
- index % 3 === 0 && 'h-32',
212
- )}
213
- />
214
- </div>
215
- ))}
216
- </div>
217
- )}
218
- {(hasPreviousPage || isFetchingPreviousPage) && (
219
- <div className="flex flex-col space-y-3" ref={ref}>
220
- {[...Array(4).keys()].map((index) => (
221
- <div
222
- className={cn(
223
- 'flex w-[85%] gap-2',
224
- index % 2 === 0
225
- ? 'mr-auto ml-0 flex-row items-end'
226
- : 'mr-0 ml-auto flex-row-reverse items-start',
227
- )}
228
- key={`${index}`}
229
- >
230
- <Skeleton
231
- className="h-8 w-8 shrink-0 rounded-full bg-gray-300"
232
- key={index}
233
- />
234
- <Skeleton
235
- className={cn(
236
- 'w-full rounded-lg px-2.5 py-3',
237
- index % 2 === 0
238
- ? 'h-24 rounded-bl-none bg-gray-300'
239
- : 'h-16 rounded-tr-none bg-gray-200',
240
- index % 3 === 0 && 'h-32',
241
- )}
242
- />
243
- </div>
244
- ))}
245
- </div>
246
- )}
247
- {isSuccess && messageList?.length > 0 && (
248
- <Fragment>
249
- {Object.entries(groupMessagesByDate(messageList)).map(
250
- ([date, messages]) => {
251
- return (
252
- <div key={date}>
253
- <div
254
- className={cn(
255
- 'relative z-10 m-auto my-2 flex h-[26px] w-fit min-w-[100px] items-center justify-center rounded-xl bg-gray-400 px-2.5 capitalize',
256
- 'sticky top-5',
257
- )}
258
- >
259
- <span className="text-text-secondary text-xs font-medium">
260
- {getRelativeDateLabel(
261
- new Date(messages[0].createdAt || ''),
262
- )}
263
- </span>
264
- </div>
265
- <div className="flex flex-col">
266
- {messages.map((message, messageIndex) => {
267
- const previousMessage = messages[messageIndex - 1];
268
-
269
- const disabledRetryAndEditValue =
270
- disabledRetryAndEdit ?? messageIndex === 0;
271
-
272
- const handleRetryMessage = () => {
273
- regenerateMessage?.(message?.messageId ?? '');
274
- };
275
-
276
- const handleEditMessage = (message: string) => {
277
- editAndRegenerateMessage?.(
278
- message,
279
- previousMessage?.messageId ?? '',
280
- );
281
- };
282
-
283
- return (
284
- <Message
285
- disabledEdit={disabledRetryAndEditValue}
286
- handleEditMessage={handleEditMessage}
287
- handleRetryMessage={handleRetryMessage}
288
- hidePythonExecution={hidePythonExecution}
289
- key={`${message.messageId}::${messageIndex}`}
290
- message={message}
291
- messageId={message.messageId}
292
- />
293
- );
294
- })}
295
- </div>
296
- </div>
297
- );
298
- },
299
- )}
300
- {messageExtra}
301
- {lastMessageContent}
302
- </Fragment>
303
- )}
304
- </div>
305
- </div>
306
- );
307
- };