@autobe/ui 0.20.0 → 0.22.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 (251) hide show
  1. package/lib/{AutoBeAssistantMessageMovie.d.ts → components/AutoBeAssistantMessageMovie.d.ts} +1 -1
  2. package/lib/{AutoBeAssistantMessageMovie.js → components/AutoBeAssistantMessageMovie.js} +3 -1
  3. package/lib/components/AutoBeAssistantMessageMovie.js.map +1 -0
  4. package/lib/components/AutoBeChatMain.d.ts +12 -0
  5. package/lib/components/AutoBeChatMain.js +88 -0
  6. package/lib/components/AutoBeChatMain.js.map +1 -0
  7. package/lib/components/AutoBeStatusModal.d.ts +6 -0
  8. package/lib/components/AutoBeStatusModal.js +269 -0
  9. package/lib/components/AutoBeStatusModal.js.map +1 -0
  10. package/lib/{AutoBeUserMessageMovie.d.ts → components/AutoBeUserMessageMovie.d.ts} +1 -1
  11. package/lib/{AutoBeUserMessageMovie.js → components/AutoBeUserMessageMovie.js} +3 -1
  12. package/lib/components/AutoBeUserMessageMovie.js.map +1 -0
  13. package/lib/{common → components/common}/ChatBubble.js +1 -1
  14. package/lib/components/common/ChatBubble.js.map +1 -0
  15. package/lib/components/common/Collapsible.d.ts +15 -0
  16. package/lib/components/common/Collapsible.js +45 -0
  17. package/lib/components/common/Collapsible.js.map +1 -0
  18. package/lib/components/common/index.d.ts +2 -0
  19. package/lib/components/common/index.js +19 -0
  20. package/lib/components/common/index.js.map +1 -0
  21. package/lib/components/common/openai/OpenAIContent.js.map +1 -0
  22. package/lib/components/common/openai/OpenAIUserAudioContent.js.map +1 -0
  23. package/lib/components/common/openai/OpenAIUserFileContent.js.map +1 -0
  24. package/lib/components/common/openai/OpenAIUserImageContent.js.map +1 -0
  25. package/lib/{common → components/common}/openai/OpenAIUserTextContent.js +0 -1
  26. package/lib/components/common/openai/OpenAIUserTextContent.js.map +1 -0
  27. package/lib/components/common/openai/index.js.map +1 -0
  28. package/lib/components/events/AutoBeCompleteEventMovie.js.map +1 -0
  29. package/lib/components/events/AutoBeCorrectEventMovie.d.ts +9 -0
  30. package/lib/components/events/AutoBeCorrectEventMovie.js +146 -0
  31. package/lib/components/events/AutoBeCorrectEventMovie.js.map +1 -0
  32. package/lib/components/events/AutoBeEventMovie.d.ts +7 -0
  33. package/lib/components/events/AutoBeEventMovie.js +93 -0
  34. package/lib/components/events/AutoBeEventMovie.js.map +1 -0
  35. package/lib/components/events/AutoBeProgressEventMovie.js.map +1 -0
  36. package/lib/components/events/AutoBeScenarioEventMovie.js.map +1 -0
  37. package/lib/components/events/AutoBeStartEventMovie.js.map +1 -0
  38. package/lib/{events → components/events}/AutoBeValidateEventMovie.js +2 -2
  39. package/lib/components/events/AutoBeValidateEventMovie.js.map +1 -0
  40. package/lib/{events → components/events}/common/CollapsibleEventGroup.js +1 -5
  41. package/lib/components/events/common/CollapsibleEventGroup.js.map +1 -0
  42. package/lib/components/events/common/EventCard.js.map +1 -0
  43. package/lib/components/events/common/EventContent.js.map +1 -0
  44. package/lib/{events → components/events}/common/EventHeader.js +1 -1
  45. package/lib/components/events/common/EventHeader.js.map +1 -0
  46. package/lib/components/events/common/EventIcon.js.map +1 -0
  47. package/lib/{events → components/events}/common/ProgressBar.js +3 -2
  48. package/lib/components/events/common/ProgressBar.js.map +1 -0
  49. package/lib/components/events/common/index.js.map +1 -0
  50. package/lib/components/events/groups/CorrectEventGroup.d.ts +12 -0
  51. package/lib/components/events/groups/CorrectEventGroup.js +83 -0
  52. package/lib/components/events/groups/CorrectEventGroup.js.map +1 -0
  53. package/lib/{events → components/events}/groups/ValidateEventGroup.js +3 -3
  54. package/lib/components/events/groups/ValidateEventGroup.js.map +1 -0
  55. package/lib/{events → components/events}/groups/index.d.ts +1 -0
  56. package/lib/components/events/groups/index.js +8 -0
  57. package/lib/components/events/groups/index.js.map +1 -0
  58. package/lib/{events → components/events}/index.d.ts +3 -1
  59. package/lib/{events → components/events}/index.js +7 -3
  60. package/lib/components/events/index.js.map +1 -0
  61. package/lib/components/events/utils/eventGrouper.js.map +1 -0
  62. package/lib/components/events/utils/index.js.map +1 -0
  63. package/lib/components/index.d.ts +7 -0
  64. package/lib/components/index.js +24 -0
  65. package/lib/components/index.js.map +1 -0
  66. package/lib/components/upload/AutoBeChatUploadBox.d.ts +31 -0
  67. package/lib/components/upload/AutoBeChatUploadBox.js +222 -0
  68. package/lib/components/upload/AutoBeChatUploadBox.js.map +1 -0
  69. package/lib/components/upload/AutoBeChatUploadSendButton.js.map +1 -0
  70. package/lib/components/upload/AutoBeFileUploadBox.d.ts +8 -0
  71. package/lib/components/upload/AutoBeFileUploadBox.js.map +1 -0
  72. package/lib/components/upload/AutoBeUploadConfig.d.ts +9 -0
  73. package/lib/components/upload/AutoBeUploadConfig.js +3 -0
  74. package/lib/components/upload/AutoBeUploadConfig.js.map +1 -0
  75. package/lib/{AutoBeVoiceRecoderButton.js → components/upload/AutoBeVoiceRecoderButton.js} +2 -2
  76. package/lib/components/upload/AutoBeVoiceRecoderButton.js.map +1 -0
  77. package/lib/components/upload/index.d.ts +5 -0
  78. package/lib/components/upload/index.js +22 -0
  79. package/lib/components/upload/index.js.map +1 -0
  80. package/lib/constant/color.d.ts +22 -0
  81. package/lib/constant/color.js +29 -0
  82. package/lib/constant/color.js.map +1 -0
  83. package/lib/context/AutoBeAgentContext.d.ts +20 -0
  84. package/lib/context/AutoBeAgentContext.js +50 -0
  85. package/lib/context/AutoBeAgentContext.js.map +1 -0
  86. package/lib/hooks/index.d.ts +3 -0
  87. package/lib/hooks/index.js +20 -0
  88. package/lib/hooks/index.js.map +1 -0
  89. package/lib/hooks/useEscapeKey.d.ts +7 -0
  90. package/lib/hooks/useEscapeKey.js +27 -0
  91. package/lib/hooks/useEscapeKey.js.map +1 -0
  92. package/lib/hooks/useIsomorphicLayoutEffect.d.ts +6 -0
  93. package/lib/hooks/useIsomorphicLayoutEffect.js +10 -0
  94. package/lib/hooks/useIsomorphicLayoutEffect.js.map +1 -0
  95. package/lib/hooks/useMediaQuery.d.ts +16 -0
  96. package/lib/hooks/useMediaQuery.js +57 -0
  97. package/lib/hooks/useMediaQuery.js.map +1 -0
  98. package/lib/icons/Receipt.d.ts +12 -0
  99. package/lib/icons/Receipt.js +9 -0
  100. package/lib/icons/Receipt.js.map +1 -0
  101. package/lib/index.d.ts +4 -8
  102. package/lib/index.js +4 -17
  103. package/lib/index.js.map +1 -1
  104. package/lib/structure/AutoBeListener.d.ts +17 -0
  105. package/lib/structure/AutoBeListener.js +250 -0
  106. package/lib/structure/AutoBeListener.js.map +1 -0
  107. package/lib/structure/AutoBeListenerState.d.ts +14 -0
  108. package/lib/structure/AutoBeListenerState.js +39 -0
  109. package/lib/structure/AutoBeListenerState.js.map +1 -0
  110. package/lib/structure/IAutoBeEventGroup.d.ts +5 -0
  111. package/lib/structure/IAutoBeEventGroup.js +3 -0
  112. package/lib/structure/IAutoBeEventGroup.js.map +1 -0
  113. package/lib/structure/index.d.ts +3 -0
  114. package/lib/structure/index.js +20 -0
  115. package/lib/structure/index.js.map +1 -0
  116. package/lib/utils/index.d.ts +1 -0
  117. package/lib/utils/index.js +1 -0
  118. package/lib/utils/index.js.map +1 -1
  119. package/lib/utils/number.d.ts +1 -0
  120. package/lib/utils/number.js +20 -0
  121. package/lib/utils/number.js.map +1 -0
  122. package/package.json +7 -11
  123. package/src/{AutoBeAssistantMessageMovie.tsx → components/AutoBeAssistantMessageMovie.tsx} +1 -1
  124. package/src/components/AutoBeChatMain.tsx +178 -0
  125. package/src/components/AutoBeStatusModal.tsx +483 -0
  126. package/src/{AutoBeUserMessageMovie.tsx → components/AutoBeUserMessageMovie.tsx} +3 -1
  127. package/src/{common → components/common}/ChatBubble.tsx +1 -1
  128. package/src/components/common/Collapsible.tsx +95 -0
  129. package/src/components/common/index.ts +2 -0
  130. package/src/{common → components/common}/openai/OpenAIUserTextContent.tsx +0 -1
  131. package/src/components/events/AutoBeCorrectEventMovie.tsx +368 -0
  132. package/src/components/events/AutoBeEventMovie.tsx +130 -0
  133. package/src/{events → components/events}/AutoBeValidateEventMovie.tsx +2 -2
  134. package/src/components/events/README.md +300 -0
  135. package/src/{events → components/events}/common/CollapsibleEventGroup.tsx +1 -10
  136. package/src/{events → components/events}/common/EventHeader.tsx +1 -1
  137. package/src/{events → components/events}/common/ProgressBar.tsx +3 -2
  138. package/src/components/events/groups/CorrectEventGroup.tsx +183 -0
  139. package/src/{events → components/events}/groups/ValidateEventGroup.tsx +3 -3
  140. package/src/{events → components/events}/groups/index.ts +4 -0
  141. package/src/{events → components/events}/index.ts +3 -4
  142. package/src/components/index.ts +7 -0
  143. package/src/components/upload/AutoBeChatUploadBox.tsx +374 -0
  144. package/src/{AutoBeFileUploadBox.tsx → components/upload/AutoBeFileUploadBox.tsx} +7 -8
  145. package/src/components/upload/AutoBeUploadConfig.ts +5 -0
  146. package/src/{AutoBeVoiceRecoderButton.tsx → components/upload/AutoBeVoiceRecoderButton.tsx} +2 -2
  147. package/src/components/upload/index.ts +5 -0
  148. package/src/constant/color.ts +28 -0
  149. package/src/context/AutoBeAgentContext.tsx +79 -0
  150. package/src/hooks/index.ts +3 -0
  151. package/src/hooks/useEscapeKey.ts +24 -0
  152. package/src/hooks/useIsomorphicLayoutEffect.ts +8 -0
  153. package/src/hooks/useMediaQuery.ts +73 -0
  154. package/src/icons/Receipt.tsx +74 -0
  155. package/src/index.ts +4 -14
  156. package/src/structure/AutoBeListener.ts +263 -0
  157. package/src/structure/AutoBeListenerState.ts +53 -0
  158. package/src/structure/IAutoBeEventGroup.ts +6 -0
  159. package/src/structure/index.ts +3 -0
  160. package/src/utils/index.ts +1 -0
  161. package/src/utils/number.ts +17 -0
  162. package/tsconfig.json +2 -1
  163. package/lib/AutoBeAssistantMessageMovie.js.map +0 -1
  164. package/lib/AutoBeChatUploadSendButton.js.map +0 -1
  165. package/lib/AutoBeFileUploadBox.d.ts +0 -10
  166. package/lib/AutoBeFileUploadBox.js.map +0 -1
  167. package/lib/AutoBeUserMessageMovie.js.map +0 -1
  168. package/lib/AutoBeVoiceRecoderButton.js.map +0 -1
  169. package/lib/common/ChatBubble.js.map +0 -1
  170. package/lib/common/openai/OpenAIContent.js.map +0 -1
  171. package/lib/common/openai/OpenAIUserAudioContent.js.map +0 -1
  172. package/lib/common/openai/OpenAIUserFileContent.js.map +0 -1
  173. package/lib/common/openai/OpenAIUserImageContent.js.map +0 -1
  174. package/lib/common/openai/OpenAIUserTextContent.js.map +0 -1
  175. package/lib/common/openai/index.js.map +0 -1
  176. package/lib/events/AutoBeCompleteEventMovie.js.map +0 -1
  177. package/lib/events/AutoBeProgressEventMovie.js.map +0 -1
  178. package/lib/events/AutoBeScenarioEventMovie.js.map +0 -1
  179. package/lib/events/AutoBeStartEventMovie.js.map +0 -1
  180. package/lib/events/AutoBeValidateEventMovie.js.map +0 -1
  181. package/lib/events/common/CollapsibleEventGroup.js.map +0 -1
  182. package/lib/events/common/EventCard.js.map +0 -1
  183. package/lib/events/common/EventContent.js.map +0 -1
  184. package/lib/events/common/EventHeader.js.map +0 -1
  185. package/lib/events/common/EventIcon.js.map +0 -1
  186. package/lib/events/common/ProgressBar.js.map +0 -1
  187. package/lib/events/common/index.js.map +0 -1
  188. package/lib/events/groups/ValidateEventGroup.js.map +0 -1
  189. package/lib/events/groups/index.js +0 -6
  190. package/lib/events/groups/index.js.map +0 -1
  191. package/lib/events/index.js.map +0 -1
  192. package/lib/events/utils/eventGrouper.js.map +0 -1
  193. package/lib/events/utils/index.js.map +0 -1
  194. package/src/events/README.md +0 -169
  195. /package/lib/{common → components/common}/ChatBubble.d.ts +0 -0
  196. /package/lib/{common → components/common}/openai/OpenAIContent.d.ts +0 -0
  197. /package/lib/{common → components/common}/openai/OpenAIContent.js +0 -0
  198. /package/lib/{common → components/common}/openai/OpenAIUserAudioContent.d.ts +0 -0
  199. /package/lib/{common → components/common}/openai/OpenAIUserAudioContent.js +0 -0
  200. /package/lib/{common → components/common}/openai/OpenAIUserFileContent.d.ts +0 -0
  201. /package/lib/{common → components/common}/openai/OpenAIUserFileContent.js +0 -0
  202. /package/lib/{common → components/common}/openai/OpenAIUserImageContent.d.ts +0 -0
  203. /package/lib/{common → components/common}/openai/OpenAIUserImageContent.js +0 -0
  204. /package/lib/{common → components/common}/openai/OpenAIUserTextContent.d.ts +0 -0
  205. /package/lib/{common → components/common}/openai/index.d.ts +0 -0
  206. /package/lib/{common → components/common}/openai/index.js +0 -0
  207. /package/lib/{events → components/events}/AutoBeCompleteEventMovie.d.ts +0 -0
  208. /package/lib/{events → components/events}/AutoBeCompleteEventMovie.js +0 -0
  209. /package/lib/{events → components/events}/AutoBeProgressEventMovie.d.ts +0 -0
  210. /package/lib/{events → components/events}/AutoBeProgressEventMovie.js +0 -0
  211. /package/lib/{events → components/events}/AutoBeScenarioEventMovie.d.ts +0 -0
  212. /package/lib/{events → components/events}/AutoBeScenarioEventMovie.js +0 -0
  213. /package/lib/{events → components/events}/AutoBeStartEventMovie.d.ts +0 -0
  214. /package/lib/{events → components/events}/AutoBeStartEventMovie.js +0 -0
  215. /package/lib/{events → components/events}/AutoBeValidateEventMovie.d.ts +0 -0
  216. /package/lib/{events → components/events}/common/CollapsibleEventGroup.d.ts +0 -0
  217. /package/lib/{events → components/events}/common/EventCard.d.ts +0 -0
  218. /package/lib/{events → components/events}/common/EventCard.js +0 -0
  219. /package/lib/{events → components/events}/common/EventContent.d.ts +0 -0
  220. /package/lib/{events → components/events}/common/EventContent.js +0 -0
  221. /package/lib/{events → components/events}/common/EventHeader.d.ts +0 -0
  222. /package/lib/{events → components/events}/common/EventIcon.d.ts +0 -0
  223. /package/lib/{events → components/events}/common/EventIcon.js +0 -0
  224. /package/lib/{events → components/events}/common/ProgressBar.d.ts +0 -0
  225. /package/lib/{events → components/events}/common/index.d.ts +0 -0
  226. /package/lib/{events → components/events}/common/index.js +0 -0
  227. /package/lib/{events → components/events}/groups/ValidateEventGroup.d.ts +0 -0
  228. /package/lib/{events → components/events}/utils/eventGrouper.d.ts +0 -0
  229. /package/lib/{events → components/events}/utils/eventGrouper.js +0 -0
  230. /package/lib/{events → components/events}/utils/index.d.ts +0 -0
  231. /package/lib/{events → components/events}/utils/index.js +0 -0
  232. /package/lib/{AutoBeChatUploadSendButton.d.ts → components/upload/AutoBeChatUploadSendButton.d.ts} +0 -0
  233. /package/lib/{AutoBeChatUploadSendButton.js → components/upload/AutoBeChatUploadSendButton.js} +0 -0
  234. /package/lib/{AutoBeFileUploadBox.js → components/upload/AutoBeFileUploadBox.js} +0 -0
  235. /package/lib/{AutoBeVoiceRecoderButton.d.ts → components/upload/AutoBeVoiceRecoderButton.d.ts} +0 -0
  236. /package/src/{common → components/common}/openai/OpenAIContent.tsx +0 -0
  237. /package/src/{common → components/common}/openai/OpenAIUserAudioContent.tsx +0 -0
  238. /package/src/{common → components/common}/openai/OpenAIUserFileContent.tsx +0 -0
  239. /package/src/{common → components/common}/openai/OpenAIUserImageContent.tsx +0 -0
  240. /package/src/{common → components/common}/openai/index.ts +0 -0
  241. /package/src/{events → components/events}/AutoBeCompleteEventMovie.tsx +0 -0
  242. /package/src/{events → components/events}/AutoBeProgressEventMovie.tsx +0 -0
  243. /package/src/{events → components/events}/AutoBeScenarioEventMovie.tsx +0 -0
  244. /package/src/{events → components/events}/AutoBeStartEventMovie.tsx +0 -0
  245. /package/src/{events → components/events}/common/EventCard.tsx +0 -0
  246. /package/src/{events → components/events}/common/EventContent.tsx +0 -0
  247. /package/src/{events → components/events}/common/EventIcon.tsx +0 -0
  248. /package/src/{events → components/events}/common/index.ts +0 -0
  249. /package/src/{events → components/events}/utils/eventGrouper.tsx +0 -0
  250. /package/src/{events → components/events}/utils/index.ts +0 -0
  251. /package/src/{AutoBeChatUploadSendButton.tsx → components/upload/AutoBeChatUploadSendButton.tsx} +0 -0
@@ -0,0 +1,300 @@
1
+ # AutoBe Event Components
2
+
3
+ Event UI components for the AutoBe platform with comprehensive event handling, grouping, and collapsible functionality.
4
+
5
+ ## Overview
6
+
7
+ The AutoBe Event system provides a complete solution for displaying various types of events in the AutoBe workflow. The main entry point is `AutoBeEventMovie`, which intelligently routes different event types to their appropriate components.
8
+
9
+ ## Main Event Router
10
+
11
+ ### AutoBeEventMovie
12
+ The central component that handles all event types and routes them to appropriate sub-components.
13
+
14
+ ```tsx
15
+ import { AutoBeEventMovie } from "@autobe/ui/events";
16
+
17
+ <AutoBeEventMovie
18
+ service={rpcService}
19
+ events={eventArray}
20
+ last={isLastEvent}
21
+ />
22
+ ```
23
+
24
+ **Supported Event Types:**
25
+ - **Message Events**: `userMessage`, `assistantMessage`
26
+ - **Start Events**: `analyzeStart`, `prismaStart`, `interfaceStart`, `testStart`, `realizeStart`, `realizeTestStart`, `realizeAuthorizationStart`
27
+ - **Scenario Events**: `analyzeScenario`, `prismaComponents`, `interfaceGroups`, `realizeTestReset`
28
+ - **Progress Events**: `analyzeWrite`, `analyzeReview`, `interfaceEndpoints`, `prismaSchemas`, `prismaReview`, `interfaceOperations`, `interfaceOperationsReview`, `interfaceAuthorization`, `interfaceSchemas`, `interfaceSchemasReview`, `testWrite`, `testScenarios`, `realizeWrite`, `realizeAuthorizationWrite`, `realizeTestOperation`
29
+ - **Validate Events**: `prismaInsufficient`, `prismaValidate`, `interfaceComplement`, `testValidate`, `realizeValidate`, `realizeAuthorizationValidate`
30
+ - **Complete Events**: `analyzeComplete`, `prismaComplete`, `interfaceComplete`, `testComplete`, `realizeComplete`
31
+
32
+ ## Individual Event Components
33
+
34
+ ### AutoBeProgressEventMovie
35
+ Shows progress tracking events with animated progress bars and status indicators.
36
+
37
+ ```tsx
38
+ import { AutoBeProgressEventMovie } from "@autobe/ui/events";
39
+
40
+ <AutoBeProgressEventMovie event={progressEvent} />
41
+ ```
42
+
43
+ ### AutoBeValidateEventMovie
44
+ Displays validation events with detailed error/success states and validation results.
45
+
46
+ ```tsx
47
+ import { AutoBeValidateEventMovie } from "@autobe/ui/events";
48
+
49
+ <AutoBeValidateEventMovie event={validateEvent} />
50
+ ```
51
+
52
+ ### AutoBeScenarioEventMovie
53
+ Shows scenario analysis and component generation events with structured data display.
54
+
55
+ ```tsx
56
+ import { AutoBeScenarioEventMovie } from "@autobe/ui/events";
57
+
58
+ <AutoBeScenarioEventMovie event={scenarioEvent} />
59
+ ```
60
+
61
+ ### AutoBeStartEventMovie
62
+ Displays pipeline start events with clean status indicators and timing information.
63
+
64
+ ```tsx
65
+ import { AutoBeStartEventMovie } from "@autobe/ui/events";
66
+
67
+ <AutoBeStartEventMovie event={startEvent} />
68
+ ```
69
+
70
+ ### AutoBeCompleteEventMovie
71
+ Shows completion events with file download capabilities and summary statistics.
72
+
73
+ ```tsx
74
+ import { AutoBeCompleteEventMovie } from "@autobe/ui/events";
75
+
76
+ <AutoBeCompleteEventMovie
77
+ event={completeEvent}
78
+ getFiles={service.getFiles}
79
+ />
80
+ ```
81
+
82
+ ## Grouped Event Components
83
+
84
+ ### ValidateEventGroup
85
+ Intelligently groups validation events with success rate statistics and collapsible interface.
86
+
87
+ ```tsx
88
+ import { ValidateEventGroup } from "@autobe/ui/events";
89
+
90
+ <ValidateEventGroup
91
+ events={validateEvents}
92
+ defaultCollapsed={true}
93
+ />
94
+ ```
95
+
96
+ **Features:**
97
+ - Automatic success/failure rate calculation
98
+ - Collapsible interface for better UX
99
+ - Grouped display for multiple validation events
100
+ - Individual event access when expanded
101
+
102
+ ## Message Components
103
+
104
+ ### AutoBeUserMessageMovie
105
+ Displays user messages with support for various content types (text, files, images, audio).
106
+
107
+ ```tsx
108
+ import { AutoBeUserMessageMovie } from "@autobe/ui";
109
+
110
+ <AutoBeUserMessageMovie message={userMessageContents} />
111
+ ```
112
+
113
+ ### AutoBeAssistantMessageMovie
114
+ Shows assistant responses with timestamps and custom assistant names.
115
+
116
+ ```tsx
117
+ import { AutoBeAssistantMessageMovie } from "@autobe/ui";
118
+
119
+ <AutoBeAssistantMessageMovie
120
+ text={responseText}
121
+ isoTimestamp={timestamp}
122
+ assistantName="AutoBe"
123
+ />
124
+ ```
125
+
126
+ ## Automatic Event Grouping
127
+
128
+ Use the `groupEvents` utility to automatically group events by type:
129
+
130
+ ```tsx
131
+ import { groupEvents } from "@autobe/ui/events/utils/eventGrouper";
132
+
133
+ const EventList = ({ events }: { events: AutoBeEvent[] }) => {
134
+ const groupedComponents = groupEvents(events, {
135
+ minGroupSize: 3, // Minimum events to form a group
136
+ defaultCollapsed: true, // Start collapsed
137
+ enableGrouping: true, // Enable grouping
138
+ });
139
+
140
+ return (
141
+ <div>
142
+ {groupedComponents}
143
+ </div>
144
+ );
145
+ };
146
+ ```
147
+
148
+ ## Custom Collapsible Groups
149
+
150
+ Create custom event groups using the `CollapsibleEventGroup` component:
151
+
152
+ ```tsx
153
+ import { CollapsibleEventGroup } from "@autobe/ui/events";
154
+
155
+ <CollapsibleEventGroup
156
+ events={customEvents}
157
+ title="Custom Event Group"
158
+ iconType="info"
159
+ getTimestamp={(event) => event.created_at}
160
+ renderEvent={(event, index) => <CustomEventComponent event={event} />}
161
+ renderSummary={(events) => <CustomSummary events={events} />}
162
+ defaultCollapsed={true}
163
+ description="Custom grouped events"
164
+ />
165
+ ```
166
+
167
+ ## Common Components
168
+
169
+ ### EventCard
170
+ Basic card container for consistent styling across all event types.
171
+
172
+ ```tsx
173
+ import { EventCard } from "@autobe/ui/events";
174
+
175
+ <EventCard>
176
+ <div>Your content here</div>
177
+ </EventCard>
178
+ ```
179
+
180
+ ### EventHeader
181
+ Standardized header with icon, title, timestamp, and step numbering.
182
+
183
+ ```tsx
184
+ import { EventHeader } from "@autobe/ui/events";
185
+
186
+ <EventHeader
187
+ title="Event Title"
188
+ timestamp="2024-01-01T12:00:00Z"
189
+ iconType="success"
190
+ step={1}
191
+ />
192
+ ```
193
+
194
+ ### EventContent
195
+ Consistent content area styling with proper spacing and typography.
196
+
197
+ ```tsx
198
+ import { EventContent } from "@autobe/ui/events";
199
+
200
+ <EventContent>
201
+ <div>Your content here</div>
202
+ </EventContent>
203
+ ```
204
+
205
+ ### EventIcon
206
+ Consistent icons for different event states with customizable sizes.
207
+
208
+ ```tsx
209
+ import { EventIcon } from "@autobe/ui/events";
210
+
211
+ <EventIcon type="success" size={16} />
212
+ ```
213
+
214
+ **Available icon types:** `success`, `progress`, `warning`, `error`, `info`, `start`
215
+
216
+ ### ProgressBar
217
+ Reusable progress bar component with customizable styling.
218
+
219
+ ```tsx
220
+ import { ProgressBar } from "@autobe/ui/events";
221
+
222
+ <ProgressBar
223
+ current={7}
224
+ total={10}
225
+ color="#4caf50"
226
+ showLabel={true}
227
+ />
228
+ ```
229
+
230
+ ## Event Flow Architecture
231
+
232
+ The AutoBe event system follows a predictable flow:
233
+
234
+ 1. **Start Events** → Initialize pipeline stages
235
+ 2. **Scenario Events** → Analyze and plan components
236
+ 3. **Progress Events** → Track ongoing operations
237
+ 4. **Validate Events** → Verify outputs and handle errors
238
+ 5. **Complete Events** → Finalize and provide results
239
+
240
+ ## Advanced Usage
241
+
242
+ ### Custom Event Handlers
243
+
244
+ ```tsx
245
+ import { AutoBeEventMovie, IAutoBeEventMovieProps } from "@autobe/ui/events";
246
+
247
+ const CustomEventHandler = ({ events, service, last }: IAutoBeEventMovieProps<AutoBeEvent>) => {
248
+ // Pre-process events if needed
249
+ const processedEvents = preprocessEvents(events);
250
+
251
+ return (
252
+ <AutoBeEventMovie
253
+ events={processedEvents}
254
+ service={service}
255
+ last={last}
256
+ />
257
+ );
258
+ };
259
+ ```
260
+
261
+ ### Event Filtering
262
+
263
+ ```tsx
264
+ const filteredEvents = events.filter(event =>
265
+ !['vendorRequest', 'vendorResponse', 'jsonParseError'].includes(event.type)
266
+ );
267
+ ```
268
+
269
+ ## TypeScript Support
270
+
271
+ All components are fully typed with comprehensive interfaces:
272
+
273
+ ```tsx
274
+ interface IAutoBeEventMovieProps<Event extends AutoBeEvent> {
275
+ service: IAutoBeRpcService;
276
+ events: Event[];
277
+ last: boolean;
278
+ }
279
+ ```
280
+
281
+ ## Features
282
+
283
+ - 🎯 **Intelligent Routing**: Automatic event type detection and routing
284
+ - 📱 **Responsive Design**: Works seamlessly on all screen sizes
285
+ - 🔄 **Smart Grouping**: Automatic grouping of related events
286
+ - 📊 **Rich Statistics**: Built-in progress and error rate calculations
287
+ - 🎨 **Consistent Styling**: Unified design system across all components
288
+ - 💎 **Full TypeScript**: Complete type safety and IntelliSense support
289
+ - ⚡ **Optimized Performance**: Efficient rendering with minimal re-renders
290
+ - 🔧 **Highly Customizable**: Easy to extend and customize for specific needs
291
+ - 🎪 **Animation Support**: Smooth transitions and progress animations
292
+ - 📁 **File Management**: Built-in file download and management capabilities
293
+
294
+ ## Best Practices
295
+
296
+ 1. **Always use AutoBeEventMovie** as the main entry point for event rendering
297
+ 2. **Group related validation events** for better user experience
298
+ 3. **Provide meaningful timestamps** for all events
299
+ 4. **Use consistent naming** for custom event types
300
+ 5. **Handle edge cases** gracefully with null returns for unsupported events
@@ -143,16 +143,7 @@ export const CollapsibleEventGroup = <T,>(
143
143
  }}
144
144
  >
145
145
  {events.map((event, index) => (
146
- <div
147
- key={index}
148
- style={{
149
- border: "1px solid #e2e8f0",
150
- borderRadius: "0.5rem",
151
- overflow: "hidden",
152
- }}
153
- >
154
- {renderEvent(event, index)}
155
- </div>
146
+ <div key={index}>{renderEvent(event, index)}</div>
156
147
  ))}
157
148
  </div>
158
149
  )}
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from "react";
2
2
 
3
- import { formatTime } from "../../utils/time";
3
+ import { formatTime } from "../../../utils/time";
4
4
  import { EventIcon, EventIconType } from "./EventIcon";
5
5
 
6
6
  export interface IEventHeaderProps {
@@ -21,7 +21,8 @@ export const ProgressBar = (props: IProgressBarProps) => {
21
21
  showLabel = true,
22
22
  } = props;
23
23
 
24
- const percentage = Math.round((current / total) * 100);
24
+ const calibratedCurrent = current > total ? total : current;
25
+ const percentage = Math.round((calibratedCurrent / total) * 100);
25
26
 
26
27
  return (
27
28
  <>
@@ -53,7 +54,7 @@ export const ProgressBar = (props: IProgressBarProps) => {
53
54
  textAlign: "center",
54
55
  }}
55
56
  >
56
- {current} / {total} completed
57
+ {calibratedCurrent} / {total} completed
57
58
  </div>
58
59
  )}
59
60
  </>
@@ -0,0 +1,183 @@
1
+ import {
2
+ AutoBePrismaCorrectEvent,
3
+ AutoBeRealizeAuthorizationCorrectEvent,
4
+ AutoBeRealizeCorrectEvent,
5
+ AutoBeTestCorrectEvent,
6
+ } from "@autobe/interface";
7
+
8
+ import { AutoBeCorrectEventMovie } from "../AutoBeCorrectEventMovie";
9
+ import { CollapsibleEventGroup } from "../common/CollapsibleEventGroup";
10
+
11
+ type CorrectEvent =
12
+ | AutoBePrismaCorrectEvent
13
+ | AutoBeTestCorrectEvent
14
+ | AutoBeRealizeCorrectEvent
15
+ | AutoBeRealizeAuthorizationCorrectEvent;
16
+
17
+ export interface ICorrectEventGroupProps {
18
+ events: CorrectEvent[];
19
+ defaultCollapsed?: boolean;
20
+ }
21
+
22
+ /**
23
+ * Specialized group component for correction events Shows correction summary
24
+ * and statistics
25
+ */
26
+ export const CorrectEventGroup = (props: ICorrectEventGroupProps) => {
27
+ const { events, defaultCollapsed = true } = props;
28
+
29
+ if (events.length === 0) {
30
+ return null;
31
+ }
32
+
33
+ // Calculate correction statistics
34
+ const eventTypes = Array.from(new Set(events.map((e) => e.type)));
35
+ const eventTypeCounts = eventTypes.reduce(
36
+ (acc, type) => {
37
+ acc[type] = events.filter((e) => e.type === type).length;
38
+ return acc;
39
+ },
40
+ {} as Record<string, number>,
41
+ );
42
+
43
+ // Get latest step numbers for each event type
44
+ const latestSteps = eventTypes.reduce(
45
+ (acc, type) => {
46
+ const eventsOfType = events.filter((e) => e.type === type);
47
+ acc[type] = Math.max(...eventsOfType.map((e) => e.step));
48
+ return acc;
49
+ },
50
+ {} as Record<string, number>,
51
+ );
52
+
53
+ const renderSummary = (events: CorrectEvent[]) => (
54
+ <>
55
+ Correction events showing AI self-improvement feedback loop
56
+ <br />
57
+ <br />
58
+ <strong>Success Rate:</strong> 100% (All corrections applied successfully)
59
+ <br />
60
+ <strong>Total Corrections:</strong> {events.length} events
61
+ <br />
62
+ <strong>Event Types:</strong> {eventTypes.join(", ")}
63
+ <br />
64
+ <br />
65
+ <div
66
+ style={{
67
+ display: "flex",
68
+ flexDirection: "column",
69
+ gap: "0.5rem",
70
+ }}
71
+ >
72
+ {eventTypes.map((type) => {
73
+ const typeDisplayNames = {
74
+ prismaCorrect: "🗄️ Database Schema",
75
+ testCorrect: "🧪 Test Suite",
76
+ realizeCorrect: "⚙️ Implementation",
77
+ realizeAuthorizationCorrect: "🔐 Authorization",
78
+ };
79
+
80
+ return (
81
+ <div
82
+ key={type}
83
+ style={{
84
+ display: "flex",
85
+ justifyContent: "space-between",
86
+ alignItems: "center",
87
+ padding: "0.5rem",
88
+ backgroundColor: "#f0fdf4",
89
+ borderRadius: "0.25rem",
90
+ border: "1px solid #bbf7d0",
91
+ }}
92
+ >
93
+ <span style={{ fontSize: "0.75rem", fontWeight: "500" }}>
94
+ {typeDisplayNames[type as keyof typeof typeDisplayNames] ||
95
+ type}
96
+ </span>
97
+ <div
98
+ style={{ display: "flex", gap: "1rem", alignItems: "center" }}
99
+ >
100
+ <span style={{ fontSize: "0.75rem", color: "#16a34a" }}>
101
+ {eventTypeCounts[type]} corrections
102
+ </span>
103
+ <span
104
+ style={{
105
+ fontSize: "0.625rem",
106
+ color: "#64748b",
107
+ fontFamily: "monospace",
108
+ backgroundColor: "#e2e8f0",
109
+ padding: "0.125rem 0.375rem",
110
+ borderRadius: "0.25rem",
111
+ }}
112
+ >
113
+ Step {latestSteps[type]}
114
+ </span>
115
+ </div>
116
+ </div>
117
+ );
118
+ })}
119
+ </div>
120
+ <br />
121
+ <div
122
+ style={{
123
+ display: "flex",
124
+ gap: "0.5rem",
125
+ alignItems: "center",
126
+ }}
127
+ >
128
+ <div
129
+ style={{
130
+ display: "flex",
131
+ alignItems: "center",
132
+ gap: "0.25rem",
133
+ }}
134
+ >
135
+ <div
136
+ style={{
137
+ width: "12px",
138
+ height: "12px",
139
+ backgroundColor: "#16a34a",
140
+ borderRadius: "2px",
141
+ }}
142
+ />
143
+ <span style={{ fontSize: "0.75rem" }}>
144
+ Corrected: {events.length}
145
+ </span>
146
+ </div>
147
+ <div
148
+ style={{
149
+ display: "flex",
150
+ alignItems: "center",
151
+ gap: "0.25rem",
152
+ }}
153
+ >
154
+ <div
155
+ style={{
156
+ width: "12px",
157
+ height: "12px",
158
+ backgroundColor: "#10b981",
159
+ borderRadius: "2px",
160
+ }}
161
+ />
162
+ <span style={{ fontSize: "0.75rem" }}>Self-Improvement Active</span>
163
+ </div>
164
+ </div>
165
+ </>
166
+ );
167
+
168
+ return (
169
+ <CollapsibleEventGroup
170
+ events={events}
171
+ title="Correction Events"
172
+ iconType="success"
173
+ variant="success"
174
+ getTimestamp={(event) => event.created_at}
175
+ renderEvent={(event) => <AutoBeCorrectEventMovie event={event} />}
176
+ renderSummary={renderSummary}
177
+ defaultCollapsed={defaultCollapsed}
178
+ description="AI self-correction and improvement events"
179
+ />
180
+ );
181
+ };
182
+
183
+ export default CorrectEventGroup;
@@ -110,7 +110,7 @@ export const ValidateEventGroup = (props: IValidateEventGroupProps) => {
110
110
  style={{
111
111
  width: "12px",
112
112
  height: "12px",
113
- backgroundColor: "#ef4444",
113
+ backgroundColor: "#f59e0b",
114
114
  borderRadius: "2px",
115
115
  }}
116
116
  />
@@ -122,13 +122,13 @@ export const ValidateEventGroup = (props: IValidateEventGroupProps) => {
122
122
 
123
123
  const getGroupIconType = () => {
124
124
  if (errorEvents === 0) return "success"; // All successful
125
- if (successEvents === 0) return "error"; // All failed
125
+ if (successEvents === 0) return "warning"; // All failed
126
126
  return "warning"; // Mixed results
127
127
  };
128
128
 
129
129
  const getGroupVariant = () => {
130
130
  if (errorEvents === 0) return "success"; // All successful
131
- if (successEvents === 0) return "error"; // All failed
131
+ if (successEvents === 0) return "warning"; // All failed
132
132
  return "warning"; // Mixed results
133
133
  };
134
134
 
@@ -1,3 +1,7 @@
1
+ export {
2
+ CorrectEventGroup,
3
+ type ICorrectEventGroupProps,
4
+ } from "./CorrectEventGroup";
1
5
  export {
2
6
  ValidateEventGroup,
3
7
  type IValidateEventGroupProps,
@@ -1,11 +1,10 @@
1
1
  export { default as AutoBeStartEventMovie } from "./AutoBeStartEventMovie";
2
2
  export { default as AutoBeScenarioEventMovie } from "./AutoBeScenarioEventMovie";
3
3
  export { default as AutoBeProgressEventMovie } from "./AutoBeProgressEventMovie";
4
+ export { default as AutoBeCompleteEventMovie } from "./AutoBeCompleteEventMovie";
4
5
  export { default as AutoBeValidateEventMovie } from "./AutoBeValidateEventMovie";
5
- export {
6
- default as AutoBeCompleteEventMovie,
7
- type IAutoBeCompleteEventMovieProps,
8
- } from "./AutoBeCompleteEventMovie";
6
+ export { default as AutoBeCorrectEventMovie } from "./AutoBeCorrectEventMovie";
7
+ export { default as AutoBeEventMovie } from "./AutoBeEventMovie";
9
8
 
10
9
  // Common components
11
10
  export * from "./common";
@@ -0,0 +1,7 @@
1
+ export * from "./AutoBeStatusModal";
2
+ export * from "./AutoBeChatMain";
3
+ export * from "./AutoBeUserMessageMovie";
4
+ export * from "./AutoBeAssistantMessageMovie";
5
+ export * from "./common";
6
+ export * from "./events";
7
+ export * from "./upload";