@solidxai/core-ui 0.1.5-beta.9 → 0.1.6

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 (296) hide show
  1. package/dist/components/auth/AuthTabs.d.ts +14 -0
  2. package/dist/components/auth/AuthTabs.d.ts.map +1 -0
  3. package/dist/components/auth/AuthTabs.js +19 -0
  4. package/dist/components/auth/AuthTabs.js.map +1 -0
  5. package/dist/components/auth/AuthTabs.tsx +38 -0
  6. package/dist/components/auth/GoogleAuthChecking.d.ts.map +1 -1
  7. package/dist/components/auth/GoogleAuthChecking.js +10 -10
  8. package/dist/components/auth/GoogleAuthChecking.js.map +1 -1
  9. package/dist/components/auth/GoogleAuthChecking.tsx +8 -9
  10. package/dist/components/auth/SolidChangeForcePassword.d.ts.map +1 -1
  11. package/dist/components/auth/SolidChangeForcePassword.js +9 -10
  12. package/dist/components/auth/SolidChangeForcePassword.js.map +1 -1
  13. package/dist/components/auth/SolidChangeForcePassword.tsx +6 -9
  14. package/dist/components/auth/SolidForgotPassword.d.ts.map +1 -1
  15. package/dist/components/auth/SolidForgotPassword.js +8 -8
  16. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  17. package/dist/components/auth/SolidForgotPassword.tsx +6 -8
  18. package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
  19. package/dist/components/auth/SolidInitialLoginOtp.js +57 -57
  20. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  21. package/dist/components/auth/SolidInitialLoginOtp.tsx +10 -11
  22. package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
  23. package/dist/components/auth/SolidInitiateRegisterOtp.js +57 -57
  24. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  25. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +10 -11
  26. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  27. package/dist/components/auth/SolidLogin.js +12 -12
  28. package/dist/components/auth/SolidLogin.js.map +1 -1
  29. package/dist/components/auth/SolidLogin.tsx +11 -16
  30. package/dist/components/auth/SolidRegister.d.ts.map +1 -1
  31. package/dist/components/auth/SolidRegister.js +19 -19
  32. package/dist/components/auth/SolidRegister.js.map +1 -1
  33. package/dist/components/auth/SolidRegister.tsx +18 -23
  34. package/dist/components/auth/SolidResetPassword.d.ts.map +1 -1
  35. package/dist/components/auth/SolidResetPassword.js +15 -15
  36. package/dist/components/auth/SolidResetPassword.js.map +1 -1
  37. package/dist/components/auth/SolidResetPassword.tsx +7 -8
  38. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  39. package/dist/components/common/GeneralSettings.js +87 -120
  40. package/dist/components/common/GeneralSettings.js.map +1 -1
  41. package/dist/components/common/GeneralSettings.tsx +12 -42
  42. package/dist/components/common/GlobalToast.d.ts +2 -0
  43. package/dist/components/common/GlobalToast.d.ts.map +1 -0
  44. package/dist/components/common/GlobalToast.js +25 -0
  45. package/dist/components/common/GlobalToast.js.map +1 -0
  46. package/dist/components/common/GlobalToast.tsx +25 -0
  47. package/dist/components/common/SolidErrorStatePage.d.ts +12 -0
  48. package/dist/components/common/SolidErrorStatePage.d.ts.map +1 -0
  49. package/dist/components/common/SolidErrorStatePage.js +16 -0
  50. package/dist/components/common/SolidErrorStatePage.js.map +1 -0
  51. package/dist/components/common/SolidErrorStatePage.tsx +55 -0
  52. package/dist/components/common/SolidExport.d.ts.map +1 -1
  53. package/dist/components/common/SolidExport.js +19 -31
  54. package/dist/components/common/SolidExport.js.map +1 -1
  55. package/dist/components/common/SolidExport.tsx +7 -19
  56. package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
  57. package/dist/components/common/SolidFormStepper.js +41 -41
  58. package/dist/components/common/SolidFormStepper.js.map +1 -1
  59. package/dist/components/common/SolidFormStepper.tsx +5 -6
  60. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.d.ts.map +1 -1
  61. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js +9 -9
  62. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.js.map +1 -1
  63. package/dist/components/core/common/SolidAccountSettings/SolidChangePassword.tsx +8 -9
  64. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
  65. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +8 -8
  66. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
  67. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +7 -9
  68. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.d.ts.map +1 -1
  69. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.js +11 -11
  70. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.js.map +1 -1
  71. package/dist/components/core/common/SolidAccountSettings/SolidPersonalInfo.tsx +10 -11
  72. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.d.ts.map +1 -1
  73. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js +9 -9
  74. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.js.map +1 -1
  75. package/dist/components/core/common/SolidGenericImport/SolidImportDropzone.tsx +8 -9
  76. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.d.ts.map +1 -1
  77. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js +7 -7
  78. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.js.map +1 -1
  79. package/dist/components/core/common/SolidGenericImport/SolidImportTransaction.tsx +6 -7
  80. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  81. package/dist/components/core/common/SolidGlobalSearchElement.js +78 -21
  82. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  83. package/dist/components/core/common/SolidGlobalSearchElement.tsx +65 -10
  84. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.d.ts.map +1 -1
  85. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js +6 -8
  86. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.js.map +1 -1
  87. package/dist/components/core/extension/solid-core/modelMetadata/list/DeleteModelRowAction.tsx +5 -9
  88. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.d.ts.map +1 -1
  89. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js +9 -11
  90. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js.map +1 -1
  91. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx +5 -10
  92. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.d.ts.map +1 -1
  93. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.js +5 -6
  94. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.js.map +1 -1
  95. package/dist/components/core/extension/solid-core/moduleMetadata/list/DeleteModuleRowAction.tsx +5 -8
  96. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.d.ts.map +1 -1
  97. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js +10 -12
  98. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js.map +1 -1
  99. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx +6 -11
  100. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.d.ts.map +1 -1
  101. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js +11 -6
  102. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.js.map +1 -1
  103. package/dist/components/core/extension/solid-core/roleMetadata/RolePermissionsManyToManyFieldWidget.tsx +13 -1
  104. package/dist/components/core/form/SolidFormUserViewLayout.d.ts.map +1 -1
  105. package/dist/components/core/form/SolidFormUserViewLayout.js +7 -8
  106. package/dist/components/core/form/SolidFormUserViewLayout.js.map +1 -1
  107. package/dist/components/core/form/SolidFormUserViewLayout.tsx +5 -7
  108. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  109. package/dist/components/core/form/SolidFormView.js +12 -21
  110. package/dist/components/core/form/SolidFormView.js.map +1 -1
  111. package/dist/components/core/form/SolidFormView.tsx +11 -33
  112. package/dist/components/core/form/fields/SolidMediaSingleField.d.ts.map +1 -1
  113. package/dist/components/core/form/fields/SolidMediaSingleField.js +22 -15
  114. package/dist/components/core/form/fields/SolidMediaSingleField.js.map +1 -1
  115. package/dist/components/core/form/fields/SolidMediaSingleField.tsx +14 -2
  116. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  117. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +37 -26
  118. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  119. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +38 -5
  120. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.d.ts.map +1 -1
  121. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +11 -11
  122. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  123. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +9 -11
  124. package/dist/components/core/kanban/KanbanUserViewLayout.d.ts.map +1 -1
  125. package/dist/components/core/kanban/KanbanUserViewLayout.js +7 -8
  126. package/dist/components/core/kanban/KanbanUserViewLayout.js.map +1 -1
  127. package/dist/components/core/kanban/KanbanUserViewLayout.tsx +4 -6
  128. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  129. package/dist/components/core/kanban/SolidKanbanView.js +5 -7
  130. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  131. package/dist/components/core/kanban/SolidKanbanView.tsx +4 -9
  132. package/dist/components/core/list/PLAN.md +92 -0
  133. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.d.ts.map +1 -1
  134. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js +13 -13
  135. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js.map +1 -1
  136. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx +5 -6
  137. package/dist/components/core/list/SolidDataTable.d.ts +58 -0
  138. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -0
  139. package/dist/components/core/list/SolidDataTable.js +141 -0
  140. package/dist/components/core/list/SolidDataTable.js.map +1 -0
  141. package/dist/components/core/list/SolidDataTable.tsx +314 -0
  142. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  143. package/dist/components/core/list/SolidListView.js +20 -67
  144. package/dist/components/core/list/SolidListView.js.map +1 -1
  145. package/dist/components/core/list/SolidListView.tsx +9 -76
  146. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  147. package/dist/components/core/model/CreateModel.js +15 -25
  148. package/dist/components/core/model/CreateModel.js.map +1 -1
  149. package/dist/components/core/model/CreateModel.tsx +12 -32
  150. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  151. package/dist/components/core/model/FieldMetaData.js +6 -17
  152. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  153. package/dist/components/core/model/FieldMetaData.tsx +5 -26
  154. package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
  155. package/dist/components/core/model/ModelMetaData.js +48 -55
  156. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  157. package/dist/components/core/model/ModelMetaData.tsx +4 -22
  158. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  159. package/dist/components/core/module/CreateModule.js +42 -44
  160. package/dist/components/core/module/CreateModule.js.map +1 -1
  161. package/dist/components/core/module/CreateModule.tsx +13 -27
  162. package/dist/components/core/module/ModuleListViewData.d.ts.map +1 -1
  163. package/dist/components/core/module/ModuleListViewData.js +11 -7
  164. package/dist/components/core/module/ModuleListViewData.js.map +1 -1
  165. package/dist/components/core/module/ModuleListViewData.tsx +10 -8
  166. package/dist/components/core/solid-ai/SolidAiChat.d.ts +3 -0
  167. package/dist/components/core/solid-ai/SolidAiChat.d.ts.map +1 -0
  168. package/dist/components/core/solid-ai/SolidAiChat.js +1043 -0
  169. package/dist/components/core/solid-ai/SolidAiChat.js.map +1 -0
  170. package/dist/components/core/solid-ai/SolidAiChat.module.css +1339 -0
  171. package/dist/components/core/solid-ai/SolidAiChat.tsx +1237 -0
  172. package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
  173. package/dist/components/core/tree/SolidTreeView.js +32 -69
  174. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  175. package/dist/components/core/tree/SolidTreeView.tsx +8 -47
  176. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  177. package/dist/components/core/users/CreateUser.js +24 -37
  178. package/dist/components/core/users/CreateUser.js.map +1 -1
  179. package/dist/components/core/users/CreateUser.tsx +8 -46
  180. package/dist/components/core/users/UserListView.d.ts.map +1 -1
  181. package/dist/components/core/users/UserListView.js +9 -16
  182. package/dist/components/core/users/UserListView.js.map +1 -1
  183. package/dist/components/core/users/UserListView.tsx +5 -21
  184. package/dist/components/layout/AdminLayout.d.ts.map +1 -1
  185. package/dist/components/layout/AdminLayout.js +4 -2
  186. package/dist/components/layout/AdminLayout.js.map +1 -1
  187. package/dist/components/layout/AdminLayout.tsx +4 -2
  188. package/dist/components/layout/AdminTopHeader.d.ts +2 -0
  189. package/dist/components/layout/AdminTopHeader.d.ts.map +1 -0
  190. package/dist/components/layout/AdminTopHeader.js +80 -0
  191. package/dist/components/layout/AdminTopHeader.js.map +1 -0
  192. package/dist/components/layout/AdminTopHeader.tsx +165 -0
  193. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  194. package/dist/components/layout/AppSidebar.js +1 -2
  195. package/dist/components/layout/AppSidebar.js.map +1 -1
  196. package/dist/components/layout/AppSidebar.tsx +0 -2
  197. package/dist/components/layout/Layout.d.ts.map +1 -1
  198. package/dist/components/layout/Layout.js +2 -1
  199. package/dist/components/layout/Layout.js.map +1 -1
  200. package/dist/components/layout/Layout.tsx +2 -0
  201. package/dist/components/layout/SolidAiStudioLayout.d.ts +10 -0
  202. package/dist/components/layout/SolidAiStudioLayout.d.ts.map +1 -0
  203. package/dist/components/layout/SolidAiStudioLayout.js +159 -0
  204. package/dist/components/layout/SolidAiStudioLayout.js.map +1 -0
  205. package/dist/components/layout/SolidAiStudioLayout.tsx +333 -0
  206. package/dist/components/layout/navbar-one.d.ts.map +1 -1
  207. package/dist/components/layout/navbar-one.js +1 -2
  208. package/dist/components/layout/navbar-one.js.map +1 -1
  209. package/dist/components/layout/navbar-one.tsx +0 -2
  210. package/dist/components/layout/navbar-two-menu.d.ts.map +1 -1
  211. package/dist/components/layout/navbar-two-menu.js +50 -24
  212. package/dist/components/layout/navbar-two-menu.js.map +1 -1
  213. package/dist/components/layout/navbar-two-menu.tsx +48 -30
  214. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts +24 -0
  215. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +1 -0
  216. package/dist/components/shad-cn-ui/SolidAutocomplete.js +224 -0
  217. package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +1 -0
  218. package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +339 -0
  219. package/dist/components/shad-cn-ui/SolidButton.d.ts +14 -0
  220. package/dist/components/shad-cn-ui/SolidButton.d.ts.map +1 -0
  221. package/dist/components/shad-cn-ui/SolidButton.js +36 -0
  222. package/dist/components/shad-cn-ui/SolidButton.js.map +1 -0
  223. package/dist/components/shad-cn-ui/SolidButton.tsx +54 -0
  224. package/dist/components/shad-cn-ui/SolidInput.d.ts +5 -0
  225. package/dist/components/shad-cn-ui/SolidInput.d.ts.map +1 -0
  226. package/dist/components/shad-cn-ui/SolidInput.js +35 -0
  227. package/dist/components/shad-cn-ui/SolidInput.js.map +1 -0
  228. package/dist/components/shad-cn-ui/SolidInput.tsx +12 -0
  229. package/dist/components/shad-cn-ui/SolidNumberInput.d.ts +10 -0
  230. package/dist/components/shad-cn-ui/SolidNumberInput.d.ts.map +1 -0
  231. package/dist/components/shad-cn-ui/SolidNumberInput.js +33 -0
  232. package/dist/components/shad-cn-ui/SolidNumberInput.js.map +1 -0
  233. package/dist/components/shad-cn-ui/SolidNumberInput.tsx +24 -0
  234. package/dist/components/shad-cn-ui/SolidSelect.d.ts +16 -0
  235. package/dist/components/shad-cn-ui/SolidSelect.d.ts.map +1 -0
  236. package/dist/components/shad-cn-ui/SolidSelect.js +26 -0
  237. package/dist/components/shad-cn-ui/SolidSelect.js.map +1 -0
  238. package/dist/components/shad-cn-ui/SolidSelect.tsx +65 -0
  239. package/dist/components/shad-cn-ui/SolidTabs.d.ts +18 -0
  240. package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -0
  241. package/dist/components/shad-cn-ui/SolidTabs.js +22 -0
  242. package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -0
  243. package/dist/components/shad-cn-ui/SolidTabs.tsx +73 -0
  244. package/dist/components/shad-cn-ui/index.d.ts +7 -0
  245. package/dist/components/shad-cn-ui/index.d.ts.map +1 -0
  246. package/dist/components/shad-cn-ui/index.js +7 -0
  247. package/dist/components/shad-cn-ui/index.js.map +1 -0
  248. package/dist/components/shad-cn-ui/index.ts +6 -0
  249. package/dist/helpers/studioSandbox.d.ts +31 -0
  250. package/dist/helpers/studioSandbox.d.ts.map +1 -0
  251. package/dist/helpers/studioSandbox.js +104 -0
  252. package/dist/helpers/studioSandbox.js.map +1 -0
  253. package/dist/helpers/studioSandbox.ts +117 -0
  254. package/dist/index.d.ts +4 -0
  255. package/dist/index.d.ts.map +1 -1
  256. package/dist/index.js +3 -0
  257. package/dist/index.js.map +1 -1
  258. package/dist/index.ts +4 -0
  259. package/dist/redux/features/solidStudioSlice.d.ts +9 -0
  260. package/dist/redux/features/solidStudioSlice.d.ts.map +1 -0
  261. package/dist/redux/features/solidStudioSlice.js +72 -0
  262. package/dist/redux/features/solidStudioSlice.js.map +1 -0
  263. package/dist/redux/features/solidStudioSlice.ts +78 -0
  264. package/dist/redux/features/toastSlice.d.ts +15 -0
  265. package/dist/redux/features/toastSlice.d.ts.map +1 -0
  266. package/dist/redux/features/toastSlice.js +20 -0
  267. package/dist/redux/features/toastSlice.js.map +1 -0
  268. package/dist/redux/features/toastSlice.ts +35 -0
  269. package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
  270. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  271. package/dist/redux/store/defaultStoreConfig.js +2 -1
  272. package/dist/redux/store/defaultStoreConfig.js.map +1 -1
  273. package/dist/redux/store/defaultStoreConfig.ts +2 -0
  274. package/dist/resources/images/errors/error-astronaut-404.png +0 -0
  275. package/dist/resources/shadcn-base.css +4171 -0
  276. package/dist/routes/SolidLayoutRegistry.d.ts +51 -0
  277. package/dist/routes/SolidLayoutRegistry.d.ts.map +1 -0
  278. package/dist/routes/SolidLayoutRegistry.js +108 -0
  279. package/dist/routes/SolidLayoutRegistry.js.map +1 -0
  280. package/dist/routes/SolidLayoutRegistry.tsx +157 -0
  281. package/dist/routes/guards/AdminGuard.d.ts +2 -0
  282. package/dist/routes/guards/AdminGuard.d.ts.map +1 -0
  283. package/dist/routes/guards/AdminGuard.js +16 -0
  284. package/dist/routes/guards/AdminGuard.js.map +1 -0
  285. package/dist/routes/guards/AdminGuard.tsx +17 -0
  286. package/dist/routes/pages/studio/StudioHomePage.d.ts +2 -0
  287. package/dist/routes/pages/studio/StudioHomePage.d.ts.map +1 -0
  288. package/dist/routes/pages/studio/StudioHomePage.js +22 -0
  289. package/dist/routes/pages/studio/StudioHomePage.js.map +1 -0
  290. package/dist/routes/pages/studio/StudioHomePage.tsx +106 -0
  291. package/dist/routes/pages/studio/StudioLandingPage.d.ts +2 -0
  292. package/dist/routes/pages/studio/StudioLandingPage.d.ts.map +1 -0
  293. package/dist/routes/pages/studio/StudioLandingPage.js +78 -0
  294. package/dist/routes/pages/studio/StudioLandingPage.js.map +1 -0
  295. package/dist/routes/pages/studio/StudioLandingPage.tsx +320 -0
  296. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolidAiChat.js","sourceRoot":"","sources":["../../../../src/components/core/solid-ai/SolidAiChat.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport { loadSession } from \"../../../adapters/auth/storage\";\nimport styles from \"./SolidAiChat.module.css\";\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\ninterface ToolProgressStep {\n label: string;\n status: \"running\" | \"done\";\n durationMs?: number;\n}\n\ninterface Message {\n id: string;\n role: \"user\" | \"assistant\" | \"event\";\n content: string;\n timestamp: Date;\n // event messages only\n eventState?: \"active\" | \"done\";\n // tool call events only\n toolName?: string;\n toolDesc?: string;\n toolArgs?: Record<string, unknown>;\n toolProgress?: ToolProgressStep[];\n durationMs?: number;\n toolStatus?: \"success\" | \"warning\" | \"error\";\n toolOutput?: string;\n toolOutputRaw?: string;\n // step tracking for dividers\n step?: number;\n // error flag for styled error bubble\n isError?: boolean;\n}\n\ninterface SessionSummary {\n session_id: string;\n status: string;\n total_steps: number;\n created_at: string | null;\n preview: string;\n}\n\n// ── Constants ─────────────────────────────────────────────────────────────────\n\nconst WS_URL = \"ws://localhost:8765/ws/agent\";\nconst API_BASE = \"http://localhost:8765\";\nconst RECONNECT_DELAY = 3000;\nconst PAGE_SIZE = 50;\n\n// ── Session persistence ───────────────────────────────────────────────────────\n// Module-level vars survive sidebar collapse; localStorage survives hard reload.\nconst LS_SESSION_ID = \"solidx.ai.session_id\";\nconst LS_HISTORY_ID = \"solidx.ai.history_session_id\";\n\nfunction readLS(key: string): string | null {\n try { return localStorage.getItem(key); } catch { return null; }\n}\nfunction writeLS(key: string, val: string | null) {\n try { val ? localStorage.setItem(key, val) : localStorage.removeItem(key); } catch { /* ignore */ }\n}\n\nlet _persistedSessionId: string | null = readLS(LS_SESSION_ID);\nlet _historySessionId: string | null = readLS(LS_HISTORY_ID);\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction formatSessionDate(iso: string | null): string {\n if (!iso) return \"Unknown date\";\n const d = new Date(iso);\n const diffDays = Math.floor((Date.now() - d.getTime()) / 86400000);\n if (diffDays === 0) return d.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" });\n if (diffDays === 1) return \"Yesterday\";\n if (diffDays < 7) return d.toLocaleDateString([], { weekday: \"short\" });\n return d.toLocaleDateString([], { month: \"short\", day: \"numeric\" });\n}\n\n// ── Sub-components ────────────────────────────────────────────────────────────\n\nfunction CopyButton({ text }: { text: string }) {\n const [copied, setCopied] = useState(false);\n const handleCopy = async (e: React.MouseEvent) => {\n e.stopPropagation();\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n return (\n <button className={styles.CopyBtn} onClick={handleCopy} title=\"Copy\" aria-label=\"Copy message\">\n <i className={`pi ${copied ? \"pi-check\" : \"pi-copy\"}`} style={{ fontSize: \"11px\" }} />\n </button>\n );\n}\n\nfunction CodeBlock({ children, className }: { children?: React.ReactNode; className?: string }) {\n const [copied, setCopied] = useState(false);\n const code = String(children ?? \"\").replace(/\\n$/, \"\");\n const lang = className?.replace(\"language-\", \"\") ?? \"\";\n const handleCopy = async () => {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n return (\n <div className={styles.CodeBlockWrapper}>\n <div className={styles.CodeBlockHeader}>\n <span className={styles.CodeLang}>{lang || \"code\"}</span>\n <button className={styles.CodeCopyBtn} onClick={handleCopy}>\n <i className={`pi ${copied ? \"pi-check\" : \"pi-copy\"}`} style={{ fontSize: \"11px\" }} />\n {copied ? \"Copied\" : \"Copy\"}\n </button>\n </div>\n <pre className={styles.CodePre}><code>{code}</code></pre>\n </div>\n );\n}\n\nconst markdownComponents = {\n code({ node, inline, className, children, ...props }: any) {\n // Detect by className — only named fenced blocks (```lang) become CodeBlock.\n // Inline backticks and unnamed fenced blocks render as inline code.\n const isBlock = /language-/.test(className || \"\");\n if (!isBlock) return <code className={styles.InlineCode} {...props}>{children}</code>;\n return <CodeBlock className={className}>{children}</CodeBlock>;\n },\n pre({ children }: any) { return <>{children}</>; },\n table({ children }: any) {\n return <div className={styles.MarkdownTableWrapper}><table>{children}</table></div>;\n },\n a({ href, children }: any) {\n return (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={styles.MarkdownLink}>\n {children}\n </a>\n );\n },\n};\n\n// ── Tool helpers ──────────────────────────────────────────────────────────────\n\nconst TOOL_CATEGORIES: Record<string, string[]> = {\n \"Read\": [\"solid_get_module_metadata\", \"solid_get_model_metadata\", \"solid_get_field_metadata\", \"solid_get_layout_context\", \"select_relevant_code_context\"],\n \"Create\": [\"solid_create_module\", \"solid_create_model_with_fields\", \"solid_add_fields_to_model\", \"solid_modify_fields_in_model\", \"solid_update_layout\", \"solid_patch_layout\", \"solid_add_or_update_menu\", \"edit_solid_code\"],\n \"Chat\": [\"solid_chat_with_ozzy\"],\n \"Shell\": [\"bash\"],\n};\n\nfunction getToolCategory(name: string): string {\n for (const [cat, tools] of Object.entries(TOOL_CATEGORIES)) {\n if (tools.includes(name)) return cat;\n }\n return \"Tool\";\n}\n\nfunction getToolIconClass(name: string): string {\n if (name === \"bash\") return \"pi-terminal\";\n const cat = getToolCategory(name);\n if (cat === \"Read\") return \"pi-search\";\n if (cat === \"Create\") return \"pi-file-edit\";\n if (cat === \"Chat\") return \"pi-comments\";\n return \"pi-cog\";\n}\n\nfunction describeToolArgs(args: Record<string, unknown>): string {\n const priority = [\"cmd\", \"command\", \"query\", \"path\", \"file\", \"module_name\", \"model_name\", \"name\", \"id\", \"content\"];\n for (const key of priority) {\n if (args[key] != null) {\n const val = String(args[key]).trim().replace(/\\n/g, \" \");\n return val.length > 72 ? val.slice(0, 72) + \"…\" : val;\n }\n }\n const first = Object.values(args)[0];\n if (first != null) {\n const val = String(first).trim().replace(/\\n/g, \" \");\n return val.length > 72 ? val.slice(0, 72) + \"…\" : val;\n }\n return \"\";\n}\n\nfunction formatDuration(ms?: number): string {\n if (ms == null) return \"\";\n if (ms < 1000) return `${Math.round(ms)}ms`;\n return `${(ms / 1000).toFixed(1)}s`;\n}\n\n/**\n * Parses tool output to extract semantic status and clean display text.\n * Handles nested JSON structures like the Solid agent uses.\n */\nfunction parseToolResult(output: string): { status: Message[\"toolStatus\"]; text: string } {\n if (!output) return { status: \"success\", text: \"\" };\n try {\n const outer = JSON.parse(output);\n let status: Message[\"toolStatus\"] = \"success\";\n let text = \"\";\n\n // The Solid agent often wraps the real result in a 'data' string or object\n const innerData = outer.data;\n if (typeof innerData === \"string\") {\n try {\n const inner = JSON.parse(innerData);\n if (inner.generation_status === \"error\" || inner.status === \"error\") {\n status = \"warning\";\n text = inner.instructions || (inner.errors && inner.errors.join(\", \")) || innerData;\n } else {\n text = inner.message || inner.content || innerData;\n }\n } catch {\n text = innerData;\n }\n } else if (innerData && typeof innerData === \"object\") {\n if (innerData.generation_status === \"error\" || innerData.status === \"error\") {\n status = \"warning\";\n text = innerData.instructions || (innerData.errors && innerData.errors.join(\", \")) || JSON.stringify(innerData);\n } else {\n text = innerData.message || innerData.content || JSON.stringify(innerData);\n }\n } else {\n text = outer.content || outer.message || output;\n }\n\n // Check if the outer status is error\n if (outer.status === \"error\" || outer.errors?.length > 0) {\n status = \"error\";\n text = outer.message || (outer.errors && outer.errors.join(\", \")) || text;\n }\n\n return { status, text: text.length > 500 ? text.slice(0, 500) + \"…\" : text };\n } catch {\n return { status: \"success\", text: output.length > 120 ? output.slice(0, 120) + \"…\" : output };\n }\n}\n\n/**\n * Detects LLM metadata strings that should not be rendered as chat messages.\n * These include token counts, model info, finish_reason, and message-list summaries.\n */\nfunction isLlmMetadata(content: string): boolean {\n if (!content) return true;\n return /\\d+\\s*(input|output)\\s*tokens/i.test(content)\n || /finish_reason:/i.test(content)\n || /^\\d+\\s+messages\\s*\\(/i.test(content)\n || /\\|\\s*model:\\s*\\S+/i.test(content);\n}\n\n// ── Message grouping ──────────────────────────────────────────────────────────\n// Groups consecutive event + assistant messages into a single AI turn so we can\n// render the avatar once per turn rather than per message.\n\ntype MsgGroup =\n | { kind: \"user\"; msg: Message }\n | { kind: \"ai\"; msgs: Message[]; groupKey: string };\n\nfunction groupMessages(messages: Message[]): MsgGroup[] {\n const result: MsgGroup[] = [];\n let aiBuffer: Message[] = [];\n for (const msg of messages) {\n if (msg.role === \"user\") {\n if (aiBuffer.length > 0) {\n result.push({ kind: \"ai\", msgs: aiBuffer, groupKey: aiBuffer[0].id });\n aiBuffer = [];\n }\n result.push({ kind: \"user\", msg });\n } else {\n aiBuffer.push(msg);\n }\n }\n if (aiBuffer.length > 0) {\n result.push({ kind: \"ai\", msgs: aiBuffer, groupKey: aiBuffer[0].id });\n }\n return result;\n}\n\n/**\n * Maps the new backend \"event-based\" JSON history into a flattened Message list for UI.\n * Handles merging ToolResult into ToolCalling, and processing StepStarted etc.\n */\nfunction processHistoryEvents(backendMsgs: any[]): Message[] {\n const result: Message[] = [];\n // Tracks the \"active\" message so we can update its duration/progress inline.\n let currentEventIdx: number | null = null;\n\n for (const m of backendMsgs) {\n const type = m.event_type;\n const data = m.event_data || {};\n const id = `hist-${m.id}`;\n // The backend ISO timestamp or the current time as fallback.\n const ts = m.timestamp ? new Date(m.timestamp) : new Date();\n\n switch (type) {\n case \"UserMessage\":\n result.push({\n id,\n role: \"user\",\n content: m.content || data.content || \"\",\n timestamp: ts,\n });\n currentEventIdx = null;\n break;\n\n case \"AgentStarted\":\n case \"StepStarted\":\n // Create a \"Thinking…\" event row.\n currentEventIdx = result.length;\n result.push({\n id,\n role: \"event\",\n content: \"Thinking…\",\n timestamp: ts,\n eventState: \"done\",\n });\n break;\n\n case \"ToolCalling\": {\n const toolName = data.tool_name || m.tool_name || \"tool\";\n const toolArgs = data.arguments || {};\n currentEventIdx = result.length;\n result.push({\n id,\n role: \"event\",\n content: toolName,\n timestamp: ts,\n eventState: \"done\",\n toolName,\n toolDesc: describeToolArgs(toolArgs),\n toolArgs,\n });\n break;\n }\n\n case \"ToolProgress\": {\n if (currentEventIdx != null) {\n const label = data.label || \"\";\n const progressStatus = data.status || \"running\";\n const stepStatus: ToolProgressStep[\"status\"] =\n progressStatus === \"success\" || progressStatus === \"done\" ? \"done\" : \"running\";\n const durationMs: number | undefined = data.duration_ms;\n\n const prev = result[currentEventIdx];\n if (prev && prev.role === \"event\") {\n const existing = prev.toolProgress || [];\n const existingIdx = existing.findIndex((p) => p.label === label);\n if (existingIdx >= 0) {\n const updated = [...existing];\n updated[existingIdx] = {\n label,\n status: stepStatus,\n durationMs: durationMs ?? updated[existingIdx].durationMs,\n };\n prev.toolProgress = updated;\n } else {\n prev.toolProgress = [...existing, { label, status: stepStatus, durationMs }];\n }\n }\n }\n break;\n }\n\n case \"ToolResult\": {\n if (currentEventIdx != null) {\n const prev = result[currentEventIdx];\n if (prev && prev.role === \"event\") {\n prev.durationMs = data.duration_ms || m.duration_ms;\n const outputStr = data.output || m.content || \"\";\n if (outputStr) {\n const { status, text } = parseToolResult(outputStr);\n prev.toolStatus = status;\n prev.toolOutput = text;\n prev.toolOutputRaw = outputStr;\n }\n }\n }\n break;\n }\n\n case \"LlmComplete\": {\n const llmContent = m.content || data.content || \"\";\n if (!llmContent || isLlmMetadata(llmContent)) break;\n const prevAssistantLlm = [...result].reverse().find(r => r.role === \"assistant\");\n if (prevAssistantLlm?.content === llmContent) break;\n result.push({ id, role: \"assistant\", content: llmContent, timestamp: ts });\n currentEventIdx = null;\n break;\n }\n case \"TurnCompleteEvent\": {\n const tcContent = m.content || data.content || \"\";\n if (!tcContent) { currentEventIdx = null; break; }\n const prevAssistantTc = [...result].reverse().find(r => r.role === \"assistant\");\n if (prevAssistantTc?.content === tcContent) { currentEventIdx = null; break; }\n result.push({ id, role: \"assistant\", content: tcContent, timestamp: ts });\n currentEventIdx = null;\n break;\n }\n\n case \"StepComplete\":\n case \"AgentComplete\":\n currentEventIdx = null;\n break;\n\n case \"AgentError\":\n case \"error\":\n result.push({\n id,\n role: \"assistant\",\n content: `Error: ${data.error || m.content || \"Unknown error\"}`,\n timestamp: ts,\n });\n currentEventIdx = null;\n break;\n\n default:\n if (m.role === \"user\") {\n result.push({ id, role: \"user\", content: m.content || \"\", timestamp: ts });\n currentEventIdx = null;\n } else if (m.role === \"assistant\") {\n const fallbackContent = m.content || \"\";\n if (fallbackContent && !isLlmMetadata(fallbackContent)) {\n const prevAst = [...result].reverse().find(r => r.role === \"assistant\");\n if (prevAst?.content !== fallbackContent) {\n result.push({ id, role: \"assistant\", content: fallbackContent, timestamp: ts });\n }\n }\n currentEventIdx = null;\n }\n break;\n }\n }\n return result;\n}\n\n// ── Main component ────────────────────────────────────────────────────────────\n\nexport const SolidAiChat: React.FC = () => {\n const [messages, setMessages] = useState<Message[]>([]);\n const [input, setInput] = useState(\"\");\n const [isConnected, setIsConnected] = useState(false);\n const [sessionId, setSessionId] = useState<string | null>(null);\n const [isLoadingHistory, setIsLoadingHistory] = useState(false);\n const [hasMoreHistory, setHasMoreHistory] = useState(false);\n const [historyPage, setHistoryPage] = useState(1);\n\n const [showSessionMenu, setShowSessionMenu] = useState(false);\n const [sessions, setSessions] = useState<SessionSummary[]>([]);\n const [isLoadingSessions, setIsLoadingSessions] = useState(false);\n const [isProcessing, setIsProcessing] = useState(false);\n const [activeHistoryId, setActiveHistoryId] = useState<string | null>(null);\n const [isDeletingSessionId, setIsDeletingSessionId] = useState<string | null>(null);\n const [expandedToolIds, setExpandedToolIds] = useState<Set<string>>(new Set());\n\n const sessionMenuRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const wsRef = useRef<WebSocket | null>(null);\n const reconnectTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const hasStreamedRef = useRef(false);\n const intentionalCloseRef = useRef(false);\n const isPrependingRef = useRef(false);\n const prevScrollHeightRef = useRef(0);\n // Tracks the id of the current \"live\" event message so we can update it in-place.\n const liveEventIdRef = useRef<string | null>(null);\n const currentStepRef = useRef<number | null>(null);\n const activeSessionIdRef = useRef<string | null>(_persistedSessionId);\n\n // ── Close session menu on outside click ──────────────────────────────────\n useEffect(() => {\n if (!showSessionMenu) return;\n const handler = (e: MouseEvent) => {\n if (sessionMenuRef.current && !sessionMenuRef.current.contains(e.target as Node)) {\n setShowSessionMenu(false);\n }\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [showSessionMenu]);\n\n // ── Scroll management ─────────────────────────────────────────────────────\n const scrollToBottom = useCallback(() => {\n if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\n }, []);\n\n useEffect(() => {\n if (isPrependingRef.current && scrollRef.current) {\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight - prevScrollHeightRef.current;\n isPrependingRef.current = false;\n } else {\n scrollToBottom();\n }\n }, [messages, scrollToBottom]);\n\n // ── History fetch ─────────────────────────────────────────────────────────\n const fetchHistory = useCallback(async (sid: string, page: number, prepend: boolean) => {\n setIsLoadingHistory(true);\n try {\n const res = await fetch(`${API_BASE}/api/agent/sessions/${sid}/messages?page=${page}&page_size=${PAGE_SIZE}`);\n if (!res.ok) return;\n const data = await res.json();\n const fetched = processHistoryEvents(data.messages ?? []);\n if (prepend) {\n prevScrollHeightRef.current = scrollRef.current?.scrollHeight ?? 0;\n isPrependingRef.current = true;\n setMessages((prev) => [...fetched, ...prev]);\n } else {\n setMessages(fetched);\n }\n setHasMoreHistory(data.has_more ?? false);\n setHistoryPage(page);\n } catch {\n // silently skip\n } finally {\n setIsLoadingHistory(false);\n }\n }, []);\n\n // ── Sessions list fetch ───────────────────────────────────────────────────\n const fetchSessions = useCallback(async () => {\n setIsLoadingSessions(true);\n try {\n const userId = loadSession()?.user?.id ?? null;\n const url = userId\n ? `${API_BASE}/api/agent/sessions/history?user_id=${userId}`\n : `${API_BASE}/api/agent/sessions/history`;\n const res = await fetch(url);\n if (!res.ok) return;\n setSessions(await res.json());\n } catch {\n // silently ignore\n } finally {\n setIsLoadingSessions(false);\n }\n }, []);\n\n // ── WebSocket ─────────────────────────────────────────────────────────────\n const connectWebSocket = useCallback(() => {\n const state = wsRef.current?.readyState;\n if (state === WebSocket.OPEN || state === WebSocket.CONNECTING) return;\n intentionalCloseRef.current = false;\n\n const ws = new WebSocket(WS_URL);\n\n ws.onopen = () => {\n setIsConnected(true);\n if (reconnectTimerRef.current) clearTimeout(reconnectTimerRef.current);\n const userId = loadSession()?.user?.id ?? null;\n if (_persistedSessionId) {\n ws.send(JSON.stringify({ action: \"resume_session\", session_id: _persistedSessionId, user_id: userId }));\n } else {\n ws.send(JSON.stringify({ action: \"start_session\", user_id: userId }));\n }\n };\n\n ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n\n // Filtering: Only process messages for the active session.\n // data.session_id is the primary field; sometimes it's nested in data.data\n const msgSessionId = data.session_id || data.data?.session_id;\n\n // If we have an active session and the message is for a different one, ignore it.\n // Exception: session_started events are always allowed as they establish the new active ID.\n if (data.type !== \"session_started\" && msgSessionId && activeSessionIdRef.current && msgSessionId !== activeSessionIdRef.current) {\n return;\n }\n\n // Add a new persistent event row, auto-freezing any previous live one.\n // Pass extra fields (toolName, toolDesc, …) for tool card events.\n const addEvent = (content: string, extra?: Partial<Message>) => {\n const prevId = liveEventIdRef.current;\n const id = `evt-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n liveEventIdRef.current = id;\n setMessages((prev) => {\n const base = prevId\n ? prev.map((m) => m.id === prevId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n return [...base, { id, role: \"event\" as const, content, timestamp: new Date(), eventState: \"active\" as const, ...extra }];\n });\n };\n\n // Freeze the current live event as done.\n const freezeEvent = () => {\n const id = liveEventIdRef.current;\n if (!id) return;\n liveEventIdRef.current = null;\n setMessages((prev) => prev.map((m) => m.id === id ? { ...m, eventState: \"done\" as const } : m));\n };\n\n switch (data.type) {\n // ── Session lifecycle ──────────────────────────────────\n case \"session_started\": {\n const sid: string = data.session_id;\n // Prefer the backend's history_session_id if provided.\n // This fixes the \"ID chaining\" issue where resuming a restored session\n // would create a new ID. We want to stick to the \"original\" ID for history.\n const historySid: string = data.history_session_id || sid;\n\n _persistedSessionId = sid;\n _historySessionId = historySid;\n writeLS(LS_SESSION_ID, sid);\n writeLS(LS_HISTORY_ID, historySid);\n setSessionId(sid);\n activeSessionIdRef.current = sid;\n setActiveHistoryId(historySid);\n\n // Only fetch history if we don't have any messages yet (initial load or session switch)\n setMessages((prev) => {\n if (prev.length === 0) fetchHistory(historySid, 1, false);\n return prev;\n });\n break;\n }\n\n case \"session_ended\":\n setSessionId(null);\n break;\n\n // ── Agent lifecycle ────────────────────────────────────\n case \"AgentStarted\":\n setIsProcessing(true);\n currentStepRef.current = null;\n addEvent(\"Thinking…\");\n break;\n\n case \"StepStarted\": {\n const step: number = data.data?.step ?? 1;\n currentStepRef.current = step;\n // Only create a \"Thinking…\" row when there's no active live event\n // (e.g. step 2+ after tool results already froze the previous card).\n if (!liveEventIdRef.current) addEvent(\"Thinking…\", { step });\n break;\n }\n\n case \"StepComplete\":\n freezeEvent();\n break;\n\n case \"ToolResult\": {\n const durationMs: number | undefined = data.data?.duration_ms;\n const outputStr: string = data.data?.output || \"\";\n const id = liveEventIdRef.current;\n if (id) {\n setMessages((prev) => prev.map((m) => {\n if (m.id === id) {\n const update: Partial<Message> = { durationMs };\n if (outputStr) {\n const { status, text } = parseToolResult(outputStr);\n update.toolStatus = status;\n update.toolOutput = text;\n update.toolOutputRaw = outputStr;\n }\n return { ...m, ...update };\n }\n return m;\n }));\n }\n freezeEvent();\n break;\n }\n\n case \"AgentComplete\":\n freezeEvent();\n break;\n\n // ── LLM streaming ──────────────────────────────────────\n case \"LlmToken\": {\n const delta: string = data.data?.delta ?? \"\";\n if (!delta) break;\n hasStreamedRef.current = true;\n // Freeze the live event row on the first token, then stream.\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n let msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n const last = msgs[msgs.length - 1];\n if (last?.role === \"assistant\" && last.id.startsWith(\"stream-\")) {\n return [...msgs.slice(0, -1), { ...last, content: last.content + delta }];\n }\n return [...msgs, { id: `stream-${Date.now()}`, role: \"assistant\", content: delta, timestamp: new Date() }];\n });\n break;\n }\n\n // ── LLM complete (intermediate text before tool calls) ─\n case \"LlmComplete\": {\n const llmContent: string = data.data?.content ?? \"\";\n if (llmContent && !isLlmMetadata(llmContent)) {\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n let msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n const lastAssistant = [...msgs].reverse().find(m => m.role === \"assistant\");\n if (!lastAssistant || lastAssistant.content !== llmContent) {\n msgs = [...msgs, { id: `llm-${Date.now()}`, role: \"assistant\" as const, content: llmContent, timestamp: new Date() }];\n }\n return msgs;\n });\n }\n break;\n }\n\n // ── Tool activity ──────────────────────────────────────\n case \"ToolCalling\": {\n const toolName: string = data.data?.tool_name ?? \"tool\";\n const toolArgs: Record<string, unknown> = data.data?.arguments ?? {};\n addEvent(toolName, { toolName, toolDesc: describeToolArgs(toolArgs), toolArgs });\n break;\n }\n\n case \"ToolProgress\": {\n const label: string = data.data?.label ?? \"\";\n const progressStatus: string = data.data?.status ?? \"running\";\n const durationMs: number | undefined = data.data?.duration_ms;\n const stepStatus: ToolProgressStep[\"status\"] =\n progressStatus === \"success\" || progressStatus === \"done\" ? \"done\" : \"running\";\n const id = liveEventIdRef.current;\n if (!id) break;\n setMessages((prev) => prev.map((m) => {\n if (m.id !== id) return m;\n const existing = m.toolProgress ?? [];\n const idx = existing.findIndex((p) => p.label === label);\n if (idx >= 0) {\n const updated = [...existing];\n updated[idx] = { label, status: stepStatus, durationMs: durationMs ?? updated[idx].durationMs };\n return { ...m, toolProgress: updated };\n }\n return { ...m, toolProgress: [...existing, { label, status: stepStatus, durationMs }] };\n }));\n break;\n }\n\n // ── Turn complete ──────────────────────────────────────\n case \"TurnCompleteEvent\":\n case \"turn_complete\": {\n setIsProcessing(false);\n const content: string = data.data?.content ?? data.content ?? \"\";\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n let msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n if (content) {\n const lastAssistant = [...msgs].reverse().find(m => m.role === \"assistant\");\n const alreadyRendered = lastAssistant && lastAssistant.content === content;\n if (!hasStreamedRef.current && !alreadyRendered) {\n msgs = [...msgs, { id: `tc-${Date.now()}`, role: \"assistant\", content, timestamp: new Date() }];\n }\n }\n return msgs;\n });\n break;\n }\n\n // ── Errors ─────────────────────────────────────────────\n case \"AgentError\":\n case \"error\": {\n setIsProcessing(false);\n const errMsg: string = data.data?.error ?? \"Unknown error\";\n const evtId = liveEventIdRef.current;\n liveEventIdRef.current = null;\n setMessages((prev) => {\n const msgs = evtId\n ? prev.map((m) => m.id === evtId ? { ...m, eventState: \"done\" as const } : m)\n : prev;\n return [...msgs, { id: `err-${Date.now()}`, role: \"assistant\" as const, content: errMsg, timestamp: new Date(), isError: true }];\n });\n break;\n }\n\n default:\n break;\n }\n } catch {\n // ignore JSON parse errors\n }\n };\n\n ws.onclose = () => {\n setIsConnected(false);\n setSessionId(null);\n setIsProcessing(false);\n liveEventIdRef.current = null;\n if (!intentionalCloseRef.current) {\n // Unexpected disconnect — banner is shown via !isConnected state; schedule reconnect.\n reconnectTimerRef.current = setTimeout(connectWebSocket, RECONNECT_DELAY);\n }\n };\n\n ws.onerror = () => {\n setIsConnected(false);\n };\n\n wsRef.current = ws;\n }, [fetchHistory]);\n\n useEffect(() => {\n connectWebSocket();\n return () => {\n reconnectTimerRef.current && clearTimeout(reconnectTimerRef.current);\n intentionalCloseRef.current = true;\n wsRef.current?.close();\n };\n }, [connectWebSocket]);\n\n // ── Send message ──────────────────────────────────────────────────────────\n const handleSend = useCallback(() => {\n const trimmed = input.trim();\n if (!trimmed || !isConnected || !sessionId || isProcessing) return;\n\n setIsProcessing(true);\n hasStreamedRef.current = false;\n currentStepRef.current = null;\n liveEventIdRef.current = null;\n setMessages((prev) => [...prev, { id: `u-${Date.now()}`, role: \"user\", content: trimmed, timestamp: new Date() }]);\n wsRef.current?.send(JSON.stringify({ action: \"message\", session_id: sessionId, content: trimmed }));\n setInput(\"\");\n if (textareaRef.current) {\n textareaRef.current.style.height = \"auto\";\n textareaRef.current.focus();\n }\n }, [input, isConnected, sessionId, isProcessing]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) { e.preventDefault(); handleSend(); }\n };\n\n const autoResize = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInput(e.target.value);\n const el = e.target;\n el.style.height = \"auto\";\n el.style.height = `${Math.min(el.scrollHeight, 480)}px`;\n };\n\n // ── Session actions ───────────────────────────────────────────────────────\n const handleNewChat = useCallback(() => {\n _persistedSessionId = null;\n _historySessionId = null;\n writeLS(LS_SESSION_ID, null);\n writeLS(LS_HISTORY_ID, null);\n liveEventIdRef.current = null;\n activeSessionIdRef.current = \"__switching__\";\n setMessages([]);\n setIsProcessing(false);\n setExpandedToolIds(new Set());\n setSessionId(null);\n setActiveHistoryId(null);\n setHasMoreHistory(false);\n setHistoryPage(1);\n setShowSessionMenu(false);\n const userId = loadSession()?.user?.id ?? null;\n wsRef.current?.send(JSON.stringify({ action: \"start_session\", user_id: userId }));\n }, []);\n\n const handleSelectSession = useCallback((targetSessionId: string) => {\n if (targetSessionId === activeHistoryId) {\n setShowSessionMenu(false);\n return;\n }\n _persistedSessionId = targetSessionId;\n _historySessionId = targetSessionId;\n writeLS(LS_SESSION_ID, targetSessionId);\n writeLS(LS_HISTORY_ID, targetSessionId);\n liveEventIdRef.current = null;\n activeSessionIdRef.current = targetSessionId;\n setMessages([]);\n setSessionId(null);\n setActiveHistoryId(targetSessionId);\n setExpandedToolIds(new Set());\n setHasMoreHistory(false);\n setHistoryPage(1);\n setShowSessionMenu(false);\n const userId = loadSession()?.user?.id ?? null;\n wsRef.current?.send(JSON.stringify({ action: \"resume_session\", session_id: targetSessionId, user_id: userId }));\n }, [activeHistoryId]);\n\n const handleDeleteSession = useCallback(async (e: React.MouseEvent, targetId: string) => {\n e.stopPropagation();\n if (!window.confirm(\"Are you sure you want to delete this conversation?\")) return;\n\n setIsDeletingSessionId(targetId);\n try {\n const res = await fetch(`${API_BASE}/api/agent/sessions/${targetId}`, { method: \"DELETE\" });\n if (res.ok) {\n setSessions((prev) => prev.filter((s) => s.session_id !== targetId));\n if (targetId === activeHistoryId) {\n handleNewChat();\n }\n }\n } catch {\n // ignore\n } finally {\n setIsDeletingSessionId(null);\n }\n }, [activeHistoryId, handleNewChat]);\n\n const handleToggleSessionMenu = useCallback(() => {\n setShowSessionMenu((prev) => { if (!prev) fetchSessions(); return !prev; });\n }, [fetchSessions]);\n\n const handleLoadOlder = useCallback(() => {\n const sid = _historySessionId ?? sessionId;\n if (!sid || isLoadingHistory) return;\n fetchHistory(sid, historyPage + 1, true);\n }, [sessionId, isLoadingHistory, historyPage, fetchHistory]);\n\n // ── Derived ───────────────────────────────────────────────────────────────\n const canSend = isConnected && !!sessionId && !!input.trim() && !isProcessing;\n const inputPlaceholder = !isConnected ? \"Connecting to server…\" : !sessionId ? \"Establishing session…\" : isProcessing ? \"SolidX AI is thinking…\" : \"Message SolidX AI…\";\n\n // ── Render ────────────────────────────────────────────────────────────────\n return (\n <div className={styles.Container}>\n\n {/* ── Header ── */}\n <header className={styles.Header}>\n <span className={`${styles.StatusDot} ${isProcessing ? styles.StatusRunning : isConnected ? styles.StatusOnline : styles.StatusOffline}`} />\n <span className={styles.StatusLabel}>\n <i className={`pi ${isConnected ? \"pi-wifi\" : \"pi-times-circle\"}`} style={{ fontSize: \"11px\" }} />\n {isConnected ? (isProcessing ? \"Running…\" : sessionId ? \"Connected\" : \"Starting…\") : \"Offline\"}\n </span>\n\n <div className={styles.HeaderSpacer} />\n\n <button className={styles.NewChatHeaderBtn} onClick={handleNewChat} title=\"New conversation\">\n <i className=\"pi pi-plus\" style={{ fontSize: \"10px\" }} />\n New Chat\n </button>\n\n {/* Hamburger + sessions dropdown — rightmost */}\n <div className={styles.SessionMenuAnchor} ref={sessionMenuRef}>\n <button className={styles.HamburgerBtn} onClick={handleToggleSessionMenu} title=\"Session history\" aria-label=\"Open session history\">\n <i className=\"pi pi-bars\" style={{ fontSize: \"13px\" }} />\n </button>\n\n {showSessionMenu && (\n <div className={styles.SessionMenu}>\n <button className={styles.SessionMenuNewChat} onClick={handleNewChat}>\n <i className=\"pi pi-plus\" style={{ fontSize: \"12px\" }} />\n New Chat\n </button>\n <div className={styles.SessionMenuSectionLabel}>Recent Sessions</div>\n <div className={styles.SessionList}>\n {isLoadingSessions ? (\n <div className={styles.SessionMenuLoading}>\n <i className=\"pi pi-spin pi-spinner\" style={{ fontSize: \"11px\" }} />\n Loading…\n </div>\n ) : sessions.length === 0 ? (\n <div className={styles.SessionMenuEmpty}>No past sessions found</div>\n ) : (\n sessions.map((s) => (\n <div\n key={s.session_id}\n className={`${styles.SessionItem} ${s.session_id === activeHistoryId ? styles.SessionItemActive : \"\"}`}\n onClick={() => handleSelectSession(s.session_id)}\n >\n <div className={styles.SessionItemMain}>\n <span className={styles.SessionItemPreview}>{s.preview || \"New conversation\"}</span>\n <span className={styles.SessionItemMeta}>\n {formatSessionDate(s.created_at)}\n {s.total_steps > 0 && ` · ${s.total_steps} turn${s.total_steps !== 1 ? \"s\" : \"\"}`}\n </span>\n </div>\n <button\n className={styles.SessionDeleteBtn}\n onClick={(e) => handleDeleteSession(e, s.session_id)}\n disabled={isDeletingSessionId === s.session_id}\n title=\"Delete conversation\"\n >\n <i className={`pi ${isDeletingSessionId === s.session_id ? \"pi-spin pi-spinner\" : \"pi-trash\"}`} style={{ fontSize: \"11px\" }} />\n </button>\n </div>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n </header>\n\n {/* ── Reconnecting banner ── */}\n {!isConnected && (\n <div className={styles.ReconnectBanner}>\n <i className=\"pi pi-spin pi-spinner\" style={{ fontSize: \"11px\" }} />\n Reconnecting…\n </div>\n )}\n\n {/* ── Message list ── */}\n <div className={styles.MessageList} ref={scrollRef}>\n {hasMoreHistory && (\n <div className={styles.LoadOlderWrap}>\n <button className={styles.LoadOlderBtn} onClick={handleLoadOlder} disabled={isLoadingHistory}>\n {isLoadingHistory\n ? <><i className=\"pi pi-spin pi-spinner\" style={{ fontSize: \"11px\" }} /> Loading…</>\n : <><i className=\"pi pi-history\" style={{ fontSize: \"11px\" }} /> Load older messages</>\n }\n </button>\n </div>\n )}\n\n {isLoadingHistory && messages.length === 0 && (\n <div className={styles.HistoryLoading}>\n <i className=\"pi pi-spin pi-spinner\" style={{ fontSize: \"16px\" }} />\n <span>Loading conversation…</span>\n </div>\n )}\n\n {messages.length === 0 && !isLoadingHistory && (\n <div className={styles.EmptyState}>\n <div className={styles.EmptyIcon}>\n <i className=\"pi pi-comments\" style={{ fontSize: \"28px\" }} />\n </div>\n <p className={styles.EmptyTitle}>How can I help you today?</p>\n <p className={styles.EmptySubtitle}>Ask me anything about your SolidX project.</p>\n </div>\n )}\n\n {groupMessages(messages).map((group) => {\n // ── User message ────────────────────────────────────────\n if (group.kind === \"user\") {\n const msg = group.msg;\n return (\n <div key={msg.id} className={`${styles.Row} ${styles.RowUser}`}>\n {/* Avatar first in DOM → rightmost with row-reverse */}\n <div className={`${styles.Avatar} ${styles.AvatarUser}`}>\n <i className=\"pi pi-user\" style={{ fontSize: \"12px\" }} />\n </div>\n <div className={styles.BubbleGroup}>\n <div className={`${styles.Bubble} ${styles.BubbleUser}`}>\n <p className={styles.UserText}>{msg.content}</p>\n </div>\n <div className={`${styles.BubbleMeta} ${styles.BubbleMetaUser}`}>\n <span className={styles.Timestamp}>\n {msg.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}\n </span>\n <CopyButton text={msg.content} />\n </div>\n </div>\n </div>\n );\n }\n\n // ── AI turn: avatar once, events + response stacked ─────\n return (\n <div key={group.groupKey} className={styles.AiTurnGroup}>\n <div className={styles.Avatar}>\n <i className=\"pi pi-android\" style={{ fontSize: \"12px\" }} />\n </div>\n <div className={styles.AiTurnContent}>\n {group.msgs.flatMap((msg) => {\n const items: React.ReactNode[] = [];\n\n if (msg.role === \"event\") {\n const active = msg.eventState === \"active\";\n\n // ── Tool call card ──────────────────────────────\n if (msg.toolName) {\n const status = msg.toolStatus || (active ? \"running\" : \"success\");\n const cardClass = status === \"running\" ? styles.ToolCardRunning :\n status === \"warning\" ? styles.ToolCardWarning :\n status === \"error\" ? styles.ToolCardError :\n styles.ToolCardDone;\n\n const statusIcon = status === \"running\" ? \"pi-spin pi-spinner\" :\n status === \"warning\" ? \"pi-exclamation-triangle\" :\n status === \"error\" ? \"pi-times-circle\" :\n \"pi-check-circle\";\n\n const statusIconClass = status === \"warning\" ? styles.ToolCardStatusWarning :\n status === \"error\" ? styles.ToolCardStatusError :\n status === \"success\" ? styles.ToolCardStatusDone :\n styles.ToolCardStatusIcon;\n\n const hasExpandable = !!msg.toolOutput || !!msg.toolArgs;\n const isExpanded = expandedToolIds.has(msg.id);\n const toggleExpand = hasExpandable && status !== \"running\"\n ? () => setExpandedToolIds((prev) => {\n const next = new Set(prev);\n if (next.has(msg.id)) next.delete(msg.id); else next.add(msg.id);\n return next;\n })\n : undefined;\n\n items.push(\n <div key={msg.id} className={`${styles.ToolCard} ${cardClass}`}>\n <button\n className={styles.ToolCardHeaderBtn}\n onClick={toggleExpand}\n data-expandable={hasExpandable && status !== \"running\" ? \"true\" : undefined}\n >\n <i className={`pi ${statusIcon} ${statusIconClass}`} />\n <i className={`pi ${getToolIconClass(msg.toolName)} ${styles.ToolCardToolIcon}`} />\n <span className={styles.ToolCardName}>{msg.toolName}</span>\n {msg.toolDesc && <span className={styles.ToolCardDesc} title={msg.toolDesc}>{msg.toolDesc}</span>}\n <span className={styles.ToolCardBadge}>{getToolCategory(msg.toolName)}</span>\n {msg.durationMs != null && (\n <span className={styles.ToolCardDuration}>{formatDuration(msg.durationMs)}</span>\n )}\n {hasExpandable && status !== \"running\" && (\n <i className={`pi pi-chevron-right ${styles.ToolCardChevron} ${isExpanded ? styles.ToolCardChevronOpen : \"\"}`} />\n )}\n </button>\n {/* Progress substeps: always visible */}\n {msg.toolProgress && msg.toolProgress.length > 0 && (\n <div className={styles.ToolCardProgress}>\n {msg.toolProgress.map((p, i) => (\n <div key={i} className={`${styles.ToolProgressItem} ${p.status === \"running\" ? styles.ToolProgressRunning : styles.ToolProgressDone}`}>\n <i className={`pi ${p.status === \"running\" ? \"pi-spin pi-spinner\" : \"pi-check-circle\"}`} style={{ fontSize: \"10px\" }} />\n <span className={styles.ToolProgressLabel}>{p.label}</span>\n {p.durationMs != null && p.status === \"done\" && (\n <span className={styles.ToolProgressDuration}>{formatDuration(p.durationMs)}</span>\n )}\n </div>\n ))}\n </div>\n )}\n {isExpanded && (msg.toolArgs || msg.toolOutput) && (\n <div className={styles.ToolCardExpandable}>\n {msg.toolArgs && Object.keys(msg.toolArgs).length > 0 && (\n <div className={styles.ToolCardOutput}>\n <div className={styles.ToolOutputHeader}>\n <span>Arguments</span>\n </div>\n <pre className={styles.ToolOutputText}>\n {JSON.stringify(msg.toolArgs, null, 2)}\n </pre>\n </div>\n )}\n {msg.toolOutput && (\n <div className={styles.ToolCardOutput}>\n <div className={styles.ToolOutputHeader}>\n <span>Result</span>\n </div>\n <pre className={`${styles.ToolOutputText} ${status === \"warning\" ? styles.ToolOutputWarning : status === \"error\" ? styles.ToolOutputError : \"\"}`}>\n {msg.toolOutputRaw || msg.toolOutput}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n return items;\n }\n\n // ── Thinking bubble: only show while active ──────\n if (active) {\n items.push(\n <div key={msg.id} className={styles.ThinkingBubble}>\n <div className={styles.ThinkingDots}>\n <span className={styles.ThinkingDot} />\n <span className={styles.ThinkingDot} />\n <span className={styles.ThinkingDot} />\n </div>\n <span className={styles.ThinkingLabel}>Thinking…</span>\n </div>\n );\n }\n return items;\n }\n\n // ── Error bubble ────────────────────────────────────\n if (msg.isError) {\n items.push(\n <div key={msg.id} className={styles.ErrorBubble}>\n <div className={styles.ErrorIcon}>\n <i className=\"pi pi-exclamation-circle\" style={{ fontSize: \"13px\" }} />\n </div>\n <div className={styles.ErrorContent}>\n <p className={styles.ErrorTitle}>Error</p>\n <p className={styles.ErrorText}>{msg.content}</p>\n </div>\n </div>\n );\n return items;\n }\n\n // ── Assistant message ───────────────────────────────\n const isStreaming = msg.id.startsWith(\"stream-\") && isProcessing;\n items.push(\n <div key={msg.id} className={styles.BubbleGroup}>\n <div className={`${styles.Bubble} ${styles.BubbleAssistant}`}>\n <div className={styles.MarkdownRoot}>\n <ReactMarkdown remarkPlugins={[remarkGfm]} components={markdownComponents}>\n {msg.content}\n </ReactMarkdown>\n </div>\n {isStreaming && <span className={styles.StreamingCursor} />}\n </div>\n <div className={`${styles.BubbleMeta} ${styles.BubbleMetaAssistant}`}>\n <span className={styles.Timestamp}>\n {msg.timestamp.toLocaleTimeString([], { hour: \"2-digit\", minute: \"2-digit\" })}\n </span>\n <CopyButton text={msg.content} />\n </div>\n </div>\n );\n return items;\n })}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* ── Input area ── */}\n <div className={styles.InputArea}>\n <div className={`${styles.InputBox} ${!isConnected || !sessionId ? styles.InputBoxDisabled : \"\"}`}>\n <textarea\n ref={textareaRef}\n className={styles.Textarea}\n placeholder={inputPlaceholder}\n value={input}\n onChange={autoResize}\n onKeyDown={handleKeyDown}\n disabled={!isConnected || !sessionId || isProcessing}\n rows={1}\n />\n <button\n className={`${styles.SendBtn} ${canSend ? styles.SendBtnActive : \"\"}`}\n disabled={!canSend}\n onClick={handleSend}\n aria-label=\"Send message\"\n >\n <i className=\"pi pi-send\" style={{ fontSize: \"12px\" }} />\n </button>\n </div>\n </div>\n\n </div>\n );\n};\n"]}