@orbe-agro/client-core 5.6.262 → 5.6.264

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 (701) hide show
  1. package/dist/@ecme/assets/styles/app.css +240 -7
  2. package/dist/@ecme/assets/styles/tailwind/index.css +252 -8
  3. package/dist/@ecme/components/layouts/PostLoginLayout/PostLoginLayout.js +4 -0
  4. package/dist/@ecme/components/layouts/PostLoginLayout/PostLoginLayout.js.map +1 -1
  5. package/dist/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.js.map +1 -1
  6. package/dist/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.js.map +1 -1
  7. package/dist/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.js.map +1 -1
  8. package/dist/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.js.map +1 -1
  9. package/dist/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.js.map +1 -1
  10. package/dist/@ecme/components/template/Footer.js +1 -1
  11. package/dist/@ecme/components/template/Header.stories.js.map +1 -1
  12. package/dist/@ecme/components/template/Notification/Notification.js +1 -4
  13. package/dist/@ecme/components/template/Notification/Notification.js.map +1 -1
  14. package/dist/@ecme/components/template/OrbeAiWidget/OrbeAiChatDrawer.js +121 -0
  15. package/dist/@ecme/components/template/OrbeAiWidget/OrbeAiChatDrawer.js.map +1 -0
  16. package/dist/@ecme/components/template/OrbeAiWidget/OrbeAiWidget.js +127 -0
  17. package/dist/@ecme/components/template/OrbeAiWidget/OrbeAiWidget.js.map +1 -0
  18. package/dist/@ecme/components/template/OrbeAiWidget/ResizeHandles.js +37 -0
  19. package/dist/@ecme/components/template/OrbeAiWidget/ResizeHandles.js.map +1 -0
  20. package/dist/@ecme/components/template/OrbeAiWidget/index.js +5 -0
  21. package/dist/@ecme/components/template/OrbeAiWidget/index.js.map +1 -0
  22. package/dist/@ecme/components/template/OrbeAiWidget/useResizablePanel.js +91 -0
  23. package/dist/@ecme/components/template/OrbeAiWidget/useResizablePanel.js.map +1 -0
  24. package/dist/@ecme/components/template/Search.js +280 -73
  25. package/dist/@ecme/components/template/Search.js.map +1 -1
  26. package/dist/@ecme/components/template/Search.stories.js +17 -2
  27. package/dist/@ecme/components/template/Search.stories.js.map +1 -1
  28. package/dist/@ecme/components/ui/Dropdown/DropdownMenu.js +5 -1
  29. package/dist/@ecme/components/ui/Dropdown/DropdownMenu.js.map +1 -1
  30. package/dist/@ecme/components/view/ChatBox/ChatBox.js +9 -1
  31. package/dist/@ecme/components/view/ChatBox/ChatBox.js.map +1 -1
  32. package/dist/@ecme/components/view/ChatBox/components/MessageList.js +8 -4
  33. package/dist/@ecme/components/view/ChatBox/components/MessageList.js.map +1 -1
  34. package/dist/@ecme/configs/navigation.config/concepts.navigation.config.js +0 -16
  35. package/dist/@ecme/configs/navigation.config/concepts.navigation.config.js.map +1 -1
  36. package/dist/@ecme/configs/routes.config/conceptsRoute.js +0 -9
  37. package/dist/@ecme/configs/routes.config/conceptsRoute.js.map +1 -1
  38. package/dist/@ecme/index.js +7 -7
  39. package/dist/@ecme/index.js.map +1 -1
  40. package/dist/@ecme/locales/index.js +1 -4
  41. package/dist/@ecme/locales/index.js.map +1 -1
  42. package/dist/@ecme/locales/lang/ptBR/nav.js +1 -0
  43. package/dist/@ecme/locales/lang/ptBR/nav.js.map +1 -1
  44. package/dist/@ecme/mock/data/favoritosMenuData.js +5 -0
  45. package/dist/@ecme/mock/data/favoritosMenuData.js.map +1 -0
  46. package/dist/@ecme/services/AiService.js +95 -12
  47. package/dist/@ecme/services/AiService.js.map +1 -1
  48. package/dist/@ecme/services/aiAuthHeaders.js +35 -0
  49. package/dist/@ecme/services/aiAuthHeaders.js.map +1 -0
  50. package/dist/@ecme/services/axios/AxiosBase.js +30 -24
  51. package/dist/@ecme/services/axios/AxiosBase.js.map +1 -1
  52. package/dist/@ecme/services/axios/AxiosRequestIntrceptorConfigCallback.js +4 -27
  53. package/dist/@ecme/services/axios/AxiosRequestIntrceptorConfigCallback.js.map +1 -1
  54. package/dist/@ecme/services/index.js +8 -3
  55. package/dist/@ecme/services/sseParser.js +42 -0
  56. package/dist/@ecme/services/sseParser.js.map +1 -0
  57. package/dist/@ecme/views/concepts/ai/Chat/components/AiErrorMessage.js +15 -0
  58. package/dist/@ecme/views/concepts/ai/Chat/components/AiErrorMessage.js.map +1 -0
  59. package/dist/@ecme/views/concepts/ai/Chat/components/AiThinkingIndicator.js +23 -0
  60. package/dist/@ecme/views/concepts/ai/Chat/components/AiThinkingIndicator.js.map +1 -0
  61. package/dist/@ecme/views/concepts/ai/Chat/components/ApprovalCard.js +73 -0
  62. package/dist/@ecme/views/concepts/ai/Chat/components/ApprovalCard.js.map +1 -0
  63. package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistory.js +9 -23
  64. package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistory.js.map +1 -1
  65. package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistoryItem.js +6 -16
  66. package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistoryItem.js.map +1 -1
  67. package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistoryRenameDialog.js +10 -7
  68. package/dist/@ecme/views/concepts/ai/Chat/components/ChatHistoryRenameDialog.js.map +1 -1
  69. package/dist/@ecme/views/concepts/ai/Chat/components/ChatLandingView.js +37 -36
  70. package/dist/@ecme/views/concepts/ai/Chat/components/ChatLandingView.js.map +1 -1
  71. package/dist/@ecme/views/concepts/ai/Chat/components/ChatView.js +62 -18
  72. package/dist/@ecme/views/concepts/ai/Chat/components/ChatView.js.map +1 -1
  73. package/dist/@ecme/views/concepts/ai/Chat/components/DataRequestCard.js +99 -0
  74. package/dist/@ecme/views/concepts/ai/Chat/components/DataRequestCard.js.map +1 -0
  75. package/dist/@ecme/views/concepts/ai/Chat/components/ToolCallChip.js +153 -0
  76. package/dist/@ecme/views/concepts/ai/Chat/components/ToolCallChip.js.map +1 -0
  77. package/dist/@ecme/views/concepts/ai/Chat/components/toolPresentation.js +195 -0
  78. package/dist/@ecme/views/concepts/ai/Chat/components/toolPresentation.js.map +1 -0
  79. package/dist/@ecme/views/concepts/ai/Chat/hooks/useChatConversations.js +83 -0
  80. package/dist/@ecme/views/concepts/ai/Chat/hooks/useChatConversations.js.map +1 -0
  81. package/dist/@ecme/views/concepts/ai/Chat/hooks/useChatSend.js +139 -22
  82. package/dist/@ecme/views/concepts/ai/Chat/hooks/useChatSend.js.map +1 -1
  83. package/dist/@ecme/views/concepts/ai/Chat/hooks/useConversationMessages.js +37 -0
  84. package/dist/@ecme/views/concepts/ai/Chat/hooks/useConversationMessages.js.map +1 -0
  85. package/dist/@ecme/views/concepts/ai/Chat/store/generativeChatStore.js +53 -13
  86. package/dist/@ecme/views/concepts/ai/Chat/store/generativeChatStore.js.map +1 -1
  87. package/dist/@ecme/views/concepts/ai/Chat/utils.js +16 -1
  88. package/dist/@ecme/views/concepts/ai/Chat/utils.js.map +1 -1
  89. package/dist/@ecme/views/dashboards/FavoritesLanding/FavoritesLanding.js +92 -0
  90. package/dist/@ecme/views/dashboards/FavoritesLanding/FavoritesLanding.js.map +1 -0
  91. package/dist/@ecme/views/dashboards/FavoritesLanding/index.js +5 -0
  92. package/dist/@ecme/views/dashboards/FavoritesLanding/index.js.map +1 -0
  93. package/dist/@ecme/views/dashboards/FavoritesLanding/types.js +2 -0
  94. package/dist/@ecme/views/dashboards/FavoritesLanding/types.js.map +1 -0
  95. package/dist/@ecme/views/dashboards/FavoritesLanding/utils.js +36 -0
  96. package/dist/@ecme/views/dashboards/FavoritesLanding/utils.js.map +1 -0
  97. package/dist/@ecme/views/dashboards/index.js +1 -4
  98. package/dist/@ecme/views/dashboards/index.js.map +1 -1
  99. package/dist/@ecme/views/index.js +0 -2
  100. package/dist/@ecme/views/index.js.map +1 -1
  101. package/dist/@types/@ecme/components/layouts/PostLoginLayout/PostLoginLayout.d.ts.map +1 -1
  102. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.d.ts +7 -0
  103. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.d.ts.map +1 -0
  104. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.d.ts +7 -0
  105. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.d.ts.map +1 -0
  106. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.d.ts +7 -0
  107. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.d.ts.map +1 -0
  108. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.d.ts +7 -0
  109. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.d.ts.map +1 -0
  110. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.d.ts +7 -0
  111. package/dist/@types/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.d.ts.map +1 -0
  112. package/dist/@types/@ecme/components/template/Header.stories.d.ts +7 -0
  113. package/dist/@types/@ecme/components/template/Header.stories.d.ts.map +1 -0
  114. package/dist/@types/@ecme/components/template/OrbeAiWidget/OrbeAiChatDrawer.d.ts +14 -0
  115. package/dist/@types/@ecme/components/template/OrbeAiWidget/OrbeAiChatDrawer.d.ts.map +1 -0
  116. package/dist/@types/@ecme/components/template/OrbeAiWidget/OrbeAiWidget.d.ts +3 -0
  117. package/dist/@types/@ecme/components/template/OrbeAiWidget/OrbeAiWidget.d.ts.map +1 -0
  118. package/dist/@types/@ecme/components/template/OrbeAiWidget/ResizeHandles.d.ts +9 -0
  119. package/dist/@types/@ecme/components/template/OrbeAiWidget/ResizeHandles.d.ts.map +1 -0
  120. package/dist/@types/@ecme/components/template/OrbeAiWidget/index.d.ts +2 -0
  121. package/dist/@types/@ecme/components/template/OrbeAiWidget/index.d.ts.map +1 -0
  122. package/dist/@types/@ecme/components/template/OrbeAiWidget/useResizablePanel.d.ts +26 -0
  123. package/dist/@types/@ecme/components/template/OrbeAiWidget/useResizablePanel.d.ts.map +1 -0
  124. package/dist/@types/@ecme/components/template/Search.d.ts +2 -0
  125. package/dist/@types/@ecme/components/template/Search.d.ts.map +1 -1
  126. package/dist/@types/@ecme/components/template/Search.stories.d.ts +8 -0
  127. package/dist/@types/@ecme/components/template/Search.stories.d.ts.map +1 -0
  128. package/dist/@types/@ecme/components/ui/Dropdown/DropdownMenu.d.ts +2 -0
  129. package/dist/@types/@ecme/components/ui/Dropdown/DropdownMenu.d.ts.map +1 -1
  130. package/dist/@types/@ecme/components/view/ChatBox/ChatBox.d.ts.map +1 -1
  131. package/dist/@types/@ecme/components/view/ChatBox/components/MessageList.d.ts +5 -0
  132. package/dist/@types/@ecme/components/view/ChatBox/components/MessageList.d.ts.map +1 -1
  133. package/dist/@types/@ecme/configs/navigation.config/concepts.navigation.config.d.ts.map +1 -1
  134. package/dist/@types/@ecme/configs/routes.config/conceptsRoute.d.ts.map +1 -1
  135. package/dist/@types/@ecme/locales/index.d.ts +0 -1
  136. package/dist/@types/@ecme/locales/index.d.ts.map +1 -1
  137. package/dist/@types/@ecme/locales/lang/ptBR/nav.d.ts.map +1 -1
  138. package/dist/@types/@ecme/mock/data/favoritosMenuData.d.ts +3 -0
  139. package/dist/@types/@ecme/mock/data/favoritosMenuData.d.ts.map +1 -0
  140. package/dist/@types/@ecme/services/AiService.d.ts +44 -4
  141. package/dist/@types/@ecme/services/AiService.d.ts.map +1 -1
  142. package/dist/@types/@ecme/services/aiAuthHeaders.d.ts +12 -0
  143. package/dist/@types/@ecme/services/aiAuthHeaders.d.ts.map +1 -0
  144. package/dist/@types/@ecme/services/axios/AxiosBase.d.ts +12 -0
  145. package/dist/@types/@ecme/services/axios/AxiosBase.d.ts.map +1 -1
  146. package/dist/@types/@ecme/services/axios/AxiosRequestIntrceptorConfigCallback.d.ts +6 -0
  147. package/dist/@types/@ecme/services/axios/AxiosRequestIntrceptorConfigCallback.d.ts.map +1 -1
  148. package/dist/@types/@ecme/services/sseParser.d.ts +20 -0
  149. package/dist/@types/@ecme/services/sseParser.d.ts.map +1 -0
  150. package/dist/@types/@ecme/views/concepts/ai/Chat/components/AiErrorMessage.d.ts +8 -0
  151. package/dist/@types/@ecme/views/concepts/ai/Chat/components/AiErrorMessage.d.ts.map +1 -0
  152. package/dist/@types/@ecme/views/concepts/ai/Chat/components/AiThinkingIndicator.d.ts +7 -0
  153. package/dist/@types/@ecme/views/concepts/ai/Chat/components/AiThinkingIndicator.d.ts.map +1 -0
  154. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ApprovalCard.d.ts +15 -0
  155. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ApprovalCard.d.ts.map +1 -0
  156. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ChatHistory.d.ts +3 -1
  157. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ChatHistory.d.ts.map +1 -1
  158. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ChatHistoryItem.d.ts +1 -1
  159. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ChatHistoryItem.d.ts.map +1 -1
  160. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ChatHistoryRenameDialog.d.ts +5 -1
  161. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ChatHistoryRenameDialog.d.ts.map +1 -1
  162. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ChatLandingView.d.ts.map +1 -1
  163. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ChatView.d.ts +8 -1
  164. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ChatView.d.ts.map +1 -1
  165. package/dist/@types/@ecme/views/concepts/ai/Chat/components/DataRequestCard.d.ts +20 -0
  166. package/dist/@types/@ecme/views/concepts/ai/Chat/components/DataRequestCard.d.ts.map +1 -0
  167. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ToolCallChip.d.ts +7 -0
  168. package/dist/@types/@ecme/views/concepts/ai/Chat/components/ToolCallChip.d.ts.map +1 -0
  169. package/dist/@types/@ecme/views/concepts/ai/Chat/components/toolPresentation.d.ts +31 -0
  170. package/dist/@types/@ecme/views/concepts/ai/Chat/components/toolPresentation.d.ts.map +1 -0
  171. package/dist/@types/@ecme/views/concepts/ai/Chat/hooks/useChatConversations.d.ts +12 -0
  172. package/dist/@types/@ecme/views/concepts/ai/Chat/hooks/useChatConversations.d.ts.map +1 -0
  173. package/dist/@types/@ecme/views/concepts/ai/Chat/hooks/useChatSend.d.ts +3 -1
  174. package/dist/@types/@ecme/views/concepts/ai/Chat/hooks/useChatSend.d.ts.map +1 -1
  175. package/dist/@types/@ecme/views/concepts/ai/Chat/hooks/useConversationMessages.d.ts +12 -0
  176. package/dist/@types/@ecme/views/concepts/ai/Chat/hooks/useConversationMessages.d.ts.map +1 -0
  177. package/dist/@types/@ecme/views/concepts/ai/Chat/store/generativeChatStore.d.ts +5 -0
  178. package/dist/@types/@ecme/views/concepts/ai/Chat/store/generativeChatStore.d.ts.map +1 -1
  179. package/dist/@types/@ecme/views/concepts/ai/Chat/types.d.ts +144 -23
  180. package/dist/@types/@ecme/views/concepts/ai/Chat/types.d.ts.map +1 -1
  181. package/dist/@types/@ecme/views/concepts/ai/Chat/utils.d.ts +13 -0
  182. package/dist/@types/@ecme/views/concepts/ai/Chat/utils.d.ts.map +1 -1
  183. package/dist/@types/@ecme/views/dashboards/FavoritesLanding/FavoritesLanding.d.ts +9 -0
  184. package/dist/@types/@ecme/views/dashboards/FavoritesLanding/FavoritesLanding.d.ts.map +1 -0
  185. package/dist/@types/@ecme/views/dashboards/FavoritesLanding/index.d.ts +3 -0
  186. package/dist/@types/@ecme/views/dashboards/FavoritesLanding/index.d.ts.map +1 -0
  187. package/dist/@types/@ecme/views/dashboards/FavoritesLanding/types.d.ts +17 -0
  188. package/dist/@types/@ecme/views/dashboards/FavoritesLanding/types.d.ts.map +1 -0
  189. package/dist/@types/@ecme/views/dashboards/FavoritesLanding/utils.d.ts +5 -0
  190. package/dist/@types/@ecme/views/dashboards/FavoritesLanding/utils.d.ts.map +1 -0
  191. package/dist/@types/@ecme/views/dashboards/index.d.ts +0 -1
  192. package/dist/@types/@ecme/views/dashboards/index.d.ts.map +1 -1
  193. package/dist/@types/@ecme/views/index.d.ts +0 -1
  194. package/dist/@types/@ecme/views/index.d.ts.map +1 -1
  195. package/dist/@types/base/@types/api/request/dm/TCreateFavoritoMenuRequest.d.ts +4 -0
  196. package/dist/@types/base/@types/api/request/dm/TCreateFavoritoMenuRequest.d.ts.map +1 -0
  197. package/dist/@types/base/@types/api/request/dm/TReorderFavoritosMenuRequest.d.ts +4 -0
  198. package/dist/@types/base/@types/api/request/dm/TReorderFavoritosMenuRequest.d.ts.map +1 -0
  199. package/dist/@types/base/@types/api/request/originacao/TSimularConsumoManualSaldoRequest.d.ts +9 -0
  200. package/dist/@types/base/@types/api/request/originacao/TSimularConsumoManualSaldoRequest.d.ts.map +1 -0
  201. package/dist/@types/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.d.ts +8 -0
  202. package/dist/@types/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.d.ts.map +1 -0
  203. package/dist/@types/base/@types/api/response/originacao/TConsumoManualSaldoResponse.d.ts +21 -0
  204. package/dist/@types/base/@types/api/response/originacao/TConsumoManualSaldoResponse.d.ts.map +1 -0
  205. package/dist/@types/base/@types/api/response/originacao/TFindAllSaldoResponse.d.ts +1 -0
  206. package/dist/@types/base/@types/api/response/originacao/TFindAllSaldoResponse.d.ts.map +1 -1
  207. package/dist/@types/base/@types/api/response/originacao/TSimularConsumoManualSaldoResponse.d.ts +17 -0
  208. package/dist/@types/base/@types/api/response/originacao/TSimularConsumoManualSaldoResponse.d.ts.map +1 -0
  209. package/dist/@types/base/@types/enums/originacao/ModoConsumoManual.d.ts +5 -0
  210. package/dist/@types/base/@types/enums/originacao/ModoConsumoManual.d.ts.map +1 -0
  211. package/dist/@types/base/@types/enums/originacao/TipoSaldoConsumivel.d.ts +6 -0
  212. package/dist/@types/base/@types/enums/originacao/TipoSaldoConsumivel.d.ts.map +1 -0
  213. package/dist/@types/base/@types/models/racao/carga.d.ts +39 -0
  214. package/dist/@types/base/@types/models/racao/carga.d.ts.map +1 -1
  215. package/dist/@types/base/@types/models/template/example.d.ts +40 -0
  216. package/dist/@types/base/@types/models/template/example.d.ts.map +1 -0
  217. package/dist/@types/base/@types/models/template/exampleObject.d.ts +14 -0
  218. package/dist/@types/base/@types/models/template/exampleObject.d.ts.map +1 -0
  219. package/dist/@types/base/@types/models/transportadora/irpf.d.ts +1 -0
  220. package/dist/@types/base/@types/models/transportadora/irpf.d.ts.map +1 -1
  221. package/dist/@types/base/@types/models/transportadora/irpfFaixaDesconto.d.ts +0 -1
  222. package/dist/@types/base/@types/models/transportadora/irpfFaixaDesconto.d.ts.map +1 -1
  223. package/dist/@types/base/components/forms/GenericForms/GenericArrayFormSection.d.ts +2 -2
  224. package/dist/@types/base/components/forms/GenericForms/GenericArrayFormSection.d.ts.map +1 -1
  225. package/dist/@types/base/components/shared/AceitarProcessoDialog.d.ts +2 -1
  226. package/dist/@types/base/components/shared/AceitarProcessoDialog.d.ts.map +1 -1
  227. package/dist/@types/base/components/shared/AdicionarHistoricoDialog.d.ts.map +1 -1
  228. package/dist/@types/base/components/shared/CancelarProcessoDialog.d.ts.map +1 -1
  229. package/dist/@types/base/components/shared/ConcluirProcessoDialog.d.ts.map +1 -1
  230. package/dist/@types/base/components/shared/EncerrarProcessoDialog.d.ts.map +1 -1
  231. package/dist/@types/base/components/shared/ReabrirProcessoDialog.d.ts.map +1 -1
  232. package/dist/@types/base/components/shared/RetornarFluxAtendimentoDialog.d.ts.map +1 -1
  233. package/dist/@types/base/components/shared/TransferirParaAtendenteDialog.d.ts.map +1 -1
  234. package/dist/@types/base/components/shared/TransferirParaSolicitanteDialog.d.ts.map +1 -1
  235. package/dist/@types/base/components/shared/TransferirProcessoDialog.d.ts.map +1 -1
  236. package/dist/@types/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.d.ts +8 -0
  237. package/dist/@types/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.d.ts.map +1 -0
  238. package/dist/@types/base/configs/endpoints.config/DadosMestres/Sap/incoterms.endpoint.config.d.ts +1 -0
  239. package/dist/@types/base/configs/endpoints.config/DadosMestres/Sap/incoterms.endpoint.config.d.ts.map +1 -1
  240. package/dist/@types/base/configs/endpoints.config/DadosMestres/Sap/safra.endpoint.config.d.ts +1 -0
  241. package/dist/@types/base/configs/endpoints.config/DadosMestres/Sap/safra.endpoint.config.d.ts.map +1 -1
  242. package/dist/@types/base/configs/endpoints.config/HubFiscal/nfe.endpoint.config.d.ts +1 -1
  243. package/dist/@types/base/configs/endpoints.config/SapService/Sap/executeSapApi.endpoint.config.d.ts +1 -0
  244. package/dist/@types/base/configs/endpoints.config/SapService/Sap/executeSapApi.endpoint.config.d.ts.map +1 -1
  245. package/dist/@types/base/configs/endpoints.config/Ticket/ticket.endpoint.config.d.ts +2 -0
  246. package/dist/@types/base/configs/endpoints.config/Ticket/ticket.endpoint.config.d.ts.map +1 -1
  247. package/dist/@types/base/configs/endpoints.config/agendamento/agendamento.d.ts +0 -1
  248. package/dist/@types/base/configs/endpoints.config/agendamento/agendamento.d.ts.map +1 -1
  249. package/dist/@types/base/configs/endpoints.config/agendamento/config/contratoVenda.d.ts +0 -1
  250. package/dist/@types/base/configs/endpoints.config/agendamento/config/contratoVenda.d.ts.map +1 -1
  251. package/dist/@types/base/configs/endpoints.config/centralNfe/centralNfe.d.ts +18 -0
  252. package/dist/@types/base/configs/endpoints.config/centralNfe/centralNfe.d.ts.map +1 -1
  253. package/dist/@types/base/configs/endpoints.config/centralNfe/config/cfop.d.ts +4 -0
  254. package/dist/@types/base/configs/endpoints.config/centralNfe/config/cfop.d.ts.map +1 -1
  255. package/dist/@types/base/configs/endpoints.config/centralNfe/config/historicoCfop.d.ts +12 -0
  256. package/dist/@types/base/configs/endpoints.config/centralNfe/config/historicoCfop.d.ts.map +1 -0
  257. package/dist/@types/base/configs/endpoints.config/centralNfe/config/vinculoOperacao.d.ts +4 -0
  258. package/dist/@types/base/configs/endpoints.config/centralNfe/config/vinculoOperacao.d.ts.map +1 -1
  259. package/dist/@types/base/configs/endpoints.config/compras/compras.d.ts +6 -0
  260. package/dist/@types/base/configs/endpoints.config/compras/compras.d.ts.map +1 -1
  261. package/dist/@types/base/configs/endpoints.config/compras/config/itemOrdemCompra.d.ts +8 -0
  262. package/dist/@types/base/configs/endpoints.config/compras/config/itemOrdemCompra.d.ts.map +1 -0
  263. package/dist/@types/base/configs/endpoints.config/dm/config/municipio.d.ts +4 -0
  264. package/dist/@types/base/configs/endpoints.config/dm/config/municipio.d.ts.map +1 -1
  265. package/dist/@types/base/configs/endpoints.config/dm/dm.d.ts +4 -0
  266. package/dist/@types/base/configs/endpoints.config/dm/dm.d.ts.map +1 -1
  267. package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts +90 -21
  268. package/dist/@types/base/configs/endpoints.config/endpoints.navigation.d.ts.map +1 -1
  269. package/dist/@types/base/configs/endpoints.config/insumos/config/estoque.d.ts +0 -20
  270. package/dist/@types/base/configs/endpoints.config/insumos/config/estoque.d.ts.map +1 -1
  271. package/dist/@types/base/configs/endpoints.config/insumos/insumos.d.ts +0 -20
  272. package/dist/@types/base/configs/endpoints.config/insumos/insumos.d.ts.map +1 -1
  273. package/dist/@types/base/configs/endpoints.config/originacao/config/consumoManualSaldo.d.ts +10 -0
  274. package/dist/@types/base/configs/endpoints.config/originacao/config/consumoManualSaldo.d.ts.map +1 -0
  275. package/dist/@types/base/configs/endpoints.config/originacao/originacao.d.ts +8 -0
  276. package/dist/@types/base/configs/endpoints.config/originacao/originacao.d.ts.map +1 -1
  277. package/dist/@types/base/configs/endpoints.config/racao/config/carga.d.ts +8 -0
  278. package/dist/@types/base/configs/endpoints.config/racao/config/carga.d.ts.map +1 -1
  279. package/dist/@types/base/configs/endpoints.config/racao/racao.d.ts +8 -0
  280. package/dist/@types/base/configs/endpoints.config/racao/racao.d.ts.map +1 -1
  281. package/dist/@types/base/configs/endpoints.config/trade/config/contratoArmazenagemGraosTrade.d.ts +33 -0
  282. package/dist/@types/base/configs/endpoints.config/trade/config/contratoArmazenagemGraosTrade.d.ts.map +1 -0
  283. package/dist/@types/base/configs/endpoints.config/trade/index.d.ts +34 -0
  284. package/dist/@types/base/configs/endpoints.config/trade/index.d.ts.map +1 -0
  285. package/dist/@types/base/configs/endpoints.config/transportadora/contratoFrete.d.ts +8 -0
  286. package/dist/@types/base/configs/endpoints.config/transportadora/contratoFrete.d.ts.map +1 -1
  287. package/dist/@types/base/configs/navigation.config/modules.navigation.d.ts.map +1 -1
  288. package/dist/@types/base/configs/navigation.config/modules.submenu/gestaoServicos/submenu.gestaoServicos.d.ts +4 -0
  289. package/dist/@types/base/configs/navigation.config/modules.submenu/gestaoServicos/submenu.gestaoServicos.d.ts.map +1 -0
  290. package/dist/@types/base/configs/navigation.config/modules.submenu/index.d.ts +1 -0
  291. package/dist/@types/base/configs/navigation.config/modules.submenu/index.d.ts.map +1 -1
  292. package/dist/@types/base/configs/navigation.config/modules.submenu/originacao/consumoManualSaldo/submenu.consumoManualSaldo.d.ts +4 -0
  293. package/dist/@types/base/configs/navigation.config/modules.submenu/originacao/consumoManualSaldo/submenu.consumoManualSaldo.d.ts.map +1 -0
  294. package/dist/@types/base/configs/navigation.config/modules.submenu/template/submenu.template.d.ts.map +1 -1
  295. package/dist/@types/base/configs/navigation.config/modules.submenu/trade/submenu.trade.d.ts +4 -0
  296. package/dist/@types/base/configs/navigation.config/modules.submenu/trade/submenu.trade.d.ts.map +1 -0
  297. package/dist/@types/base/configs/navigation.config/submenu/centralNfe/cadastros.submenu.d.ts.map +1 -1
  298. package/dist/@types/base/configs/navigation.config/submenu/centralNfe/config/cfop.submenu.d.ts +4 -0
  299. package/dist/@types/base/configs/navigation.config/submenu/centralNfe/config/cfop.submenu.d.ts.map +1 -0
  300. package/dist/@types/base/configs/navigation.config/submenu/index.d.ts +1 -2
  301. package/dist/@types/base/configs/navigation.config/submenu/index.d.ts.map +1 -1
  302. package/dist/@types/base/configs/navigation.config/submenu/originacao/originacao.submenu.d.ts.map +1 -1
  303. package/dist/@types/base/configs/navigation.config/submenu/template/cadastros.submenu.d.ts.map +1 -0
  304. package/dist/@types/base/configs/navigation.config/submenu/template/config/example.submenu.d.ts.map +1 -0
  305. package/dist/@types/base/configs/navigation.config/submenu/template/config/exampleObject.submenu.d.ts.map +1 -0
  306. package/dist/@types/base/configs/navigation.config/submenu/template/template.submenu.d.ts.map +1 -0
  307. package/dist/@types/base/configs/navigation.config/submenu/ticket/cadastros.submenu.d.ts.map +1 -1
  308. package/dist/@types/base/configs/navigation.config/submenu/ticket/config/relatorioTransferenciaArmazens.submenu.d.ts +4 -0
  309. package/dist/@types/base/configs/navigation.config/submenu/ticket/config/relatorioTransferenciaArmazens.submenu.d.ts.map +1 -0
  310. package/dist/@types/base/configs/navigation.config/submenu/ticket/config/relatorioVendasGraos.submenu.d.ts +4 -0
  311. package/dist/@types/base/configs/navigation.config/submenu/ticket/config/relatorioVendasGraos.submenu.d.ts.map +1 -0
  312. package/dist/@types/base/configs/navigation.config/submenu/ticket/relatorios.submenu.d.ts.map +1 -1
  313. package/dist/@types/base/configs/navigation.config/submenu/trade/configs/contratoArmazenagemGraosTrade.submenu.d.ts +4 -0
  314. package/dist/@types/base/configs/navigation.config/submenu/trade/configs/contratoArmazenagemGraosTrade.submenu.d.ts.map +1 -0
  315. package/dist/@types/base/configs/navigation.config/submenu/trade/trade.submenu.d.ts +4 -0
  316. package/dist/@types/base/configs/navigation.config/submenu/trade/trade.submenu.d.ts.map +1 -0
  317. package/dist/@types/base/locales/lang/ptBR/modules/Ticket/ticket.nav.d.ts +2 -0
  318. package/dist/@types/base/locales/lang/ptBR/modules/Ticket/ticket.nav.d.ts.map +1 -1
  319. package/dist/@types/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.d.ts +8 -0
  320. package/dist/@types/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.d.ts.map +1 -0
  321. package/dist/@types/base/services/modules/DadosMestres/Sap/IncotermsService.d.ts +1 -0
  322. package/dist/@types/base/services/modules/DadosMestres/Sap/IncotermsService.d.ts.map +1 -1
  323. package/dist/@types/base/services/modules/DadosMestres/Sap/SafraService.d.ts +1 -0
  324. package/dist/@types/base/services/modules/DadosMestres/Sap/SafraService.d.ts.map +1 -1
  325. package/dist/@types/base/services/modules/HubFiscal/NfeService.d.ts +1 -1
  326. package/dist/@types/base/services/modules/HubFiscal/NfeService.d.ts.map +1 -1
  327. package/dist/@types/base/services/modules/SapService/Sap/ExecuteSapApiService.d.ts +1 -0
  328. package/dist/@types/base/services/modules/SapService/Sap/ExecuteSapApiService.d.ts.map +1 -1
  329. package/dist/@types/base/services/modules/Ticket/TicketService.d.ts +2 -0
  330. package/dist/@types/base/services/modules/Ticket/TicketService.d.ts.map +1 -1
  331. package/dist/@types/base/services/modules/centralNfe/cfop/CfopService.d.ts +1 -0
  332. package/dist/@types/base/services/modules/centralNfe/cfop/CfopService.d.ts.map +1 -1
  333. package/dist/@types/base/services/modules/centralNfe/historicoCfop/HistoricoCfopService.d.ts +3 -0
  334. package/dist/@types/base/services/modules/centralNfe/historicoCfop/HistoricoCfopService.d.ts.map +1 -0
  335. package/dist/@types/base/services/modules/centralNfe/vinculoOperacao/VinculoOperacaoService.d.ts +1 -0
  336. package/dist/@types/base/services/modules/centralNfe/vinculoOperacao/VinculoOperacaoService.d.ts.map +1 -1
  337. package/dist/@types/base/services/modules/compras/index.d.ts +1 -0
  338. package/dist/@types/base/services/modules/compras/index.d.ts.map +1 -1
  339. package/dist/@types/base/services/modules/compras/ordemCompra/ItemOrdemCompraService.d.ts +2 -0
  340. package/dist/@types/base/services/modules/compras/ordemCompra/ItemOrdemCompraService.d.ts.map +1 -0
  341. package/dist/@types/base/services/modules/dm/municipio/MunicipioService.d.ts +1 -0
  342. package/dist/@types/base/services/modules/dm/municipio/MunicipioService.d.ts.map +1 -1
  343. package/dist/@types/base/services/modules/originacao/consumoManualSaldo/consumoManualSaldoService.d.ts +13 -0
  344. package/dist/@types/base/services/modules/originacao/consumoManualSaldo/consumoManualSaldoService.d.ts.map +1 -0
  345. package/dist/@types/base/services/modules/racao/carga/CargaService.d.ts +3 -1
  346. package/dist/@types/base/services/modules/racao/carga/CargaService.d.ts.map +1 -1
  347. package/dist/@types/base/services/modules/template/example/ExampleService.d.ts +7 -4
  348. package/dist/@types/base/services/modules/template/example/ExampleService.d.ts.map +1 -1
  349. package/dist/@types/base/services/modules/template/exampleObject/ExampleObjectService.d.ts +8 -0
  350. package/dist/@types/base/services/modules/template/exampleObject/ExampleObjectService.d.ts.map +1 -0
  351. package/dist/@types/base/services/modules/template/index.d.ts +1 -1
  352. package/dist/@types/base/services/modules/template/index.d.ts.map +1 -1
  353. package/dist/@types/base/services/modules/trade/ContratoArmazenagemGraosTradeService.d.ts +14 -0
  354. package/dist/@types/base/services/modules/trade/ContratoArmazenagemGraosTradeService.d.ts.map +1 -0
  355. package/dist/@types/base/services/modules/transportadora/ContratoFrete/ContratoFreteService.d.ts +2 -0
  356. package/dist/@types/base/services/modules/transportadora/ContratoFrete/ContratoFreteService.d.ts.map +1 -1
  357. package/dist/base/@types/api/request/dm/TCreateFavoritoMenuRequest.js +2 -0
  358. package/dist/base/@types/api/request/dm/TCreateFavoritoMenuRequest.js.map +1 -0
  359. package/dist/base/@types/api/request/dm/TReorderFavoritosMenuRequest.js +2 -0
  360. package/dist/base/@types/api/request/dm/TReorderFavoritosMenuRequest.js.map +1 -0
  361. package/dist/base/@types/api/request/originacao/TSimularConsumoManualSaldoRequest.js +2 -0
  362. package/dist/base/@types/api/request/originacao/TSimularConsumoManualSaldoRequest.js.map +1 -0
  363. package/dist/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.js +2 -0
  364. package/dist/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.js.map +1 -0
  365. package/dist/base/@types/api/response/originacao/TConsumoManualSaldoResponse.js +2 -0
  366. package/dist/base/@types/api/response/originacao/TConsumoManualSaldoResponse.js.map +1 -0
  367. package/dist/base/@types/api/response/originacao/TSimularConsumoManualSaldoResponse.js +2 -0
  368. package/dist/base/@types/api/response/originacao/TSimularConsumoManualSaldoResponse.js.map +1 -0
  369. package/dist/base/@types/enums/originacao/ModoConsumoManual.js +9 -0
  370. package/dist/base/@types/enums/originacao/ModoConsumoManual.js.map +1 -0
  371. package/dist/base/@types/enums/originacao/TipoSaldoConsumivel.js +10 -0
  372. package/dist/base/@types/enums/originacao/TipoSaldoConsumivel.js.map +1 -0
  373. package/dist/base/@types/models/racao/carga.js.map +1 -1
  374. package/dist/base/@types/models/template/example.js +16 -0
  375. package/dist/base/@types/models/template/example.js.map +1 -0
  376. package/dist/base/@types/models/template/exampleObject.js +2 -0
  377. package/dist/base/@types/models/template/exampleObject.js.map +1 -0
  378. package/dist/base/assets/styles/init.css +258 -7
  379. package/dist/base/components/forms/GenericForms/GenericArrayFormSection.js.map +1 -1
  380. package/dist/base/components/shared/AceitarProcessoDialog.js +16 -2
  381. package/dist/base/components/shared/AceitarProcessoDialog.js.map +1 -1
  382. package/dist/base/components/shared/AdicionarHistoricoDialog.js +28 -24
  383. package/dist/base/components/shared/AdicionarHistoricoDialog.js.map +1 -1
  384. package/dist/base/components/shared/CancelarProcessoDialog.js +28 -24
  385. package/dist/base/components/shared/CancelarProcessoDialog.js.map +1 -1
  386. package/dist/base/components/shared/ConcluirProcessoDialog.js +27 -23
  387. package/dist/base/components/shared/ConcluirProcessoDialog.js.map +1 -1
  388. package/dist/base/components/shared/EncerrarProcessoDialog.js +28 -24
  389. package/dist/base/components/shared/EncerrarProcessoDialog.js.map +1 -1
  390. package/dist/base/components/shared/ReabrirProcessoDialog.js +27 -23
  391. package/dist/base/components/shared/ReabrirProcessoDialog.js.map +1 -1
  392. package/dist/base/components/shared/RetornarFluxAtendimentoDialog.js +27 -23
  393. package/dist/base/components/shared/RetornarFluxAtendimentoDialog.js.map +1 -1
  394. package/dist/base/components/shared/TransferirParaAtendenteDialog.js +28 -24
  395. package/dist/base/components/shared/TransferirParaAtendenteDialog.js.map +1 -1
  396. package/dist/base/components/shared/TransferirParaSolicitanteDialog.js +28 -24
  397. package/dist/base/components/shared/TransferirParaSolicitanteDialog.js.map +1 -1
  398. package/dist/base/components/shared/TransferirProcessoDialog.js +43 -33
  399. package/dist/base/components/shared/TransferirProcessoDialog.js.map +1 -1
  400. package/dist/base/configs/api.config.js.map +1 -1
  401. package/dist/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.js +11 -0
  402. package/dist/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.js.map +1 -0
  403. package/dist/base/configs/endpoints.config/DadosMestres/Sap/incoterms.endpoint.config.js +2 -1
  404. package/dist/base/configs/endpoints.config/DadosMestres/Sap/incoterms.endpoint.config.js.map +1 -1
  405. package/dist/base/configs/endpoints.config/DadosMestres/Sap/safra.endpoint.config.js +2 -1
  406. package/dist/base/configs/endpoints.config/DadosMestres/Sap/safra.endpoint.config.js.map +1 -1
  407. package/dist/base/configs/endpoints.config/HubFiscal/nfe.endpoint.config.js +1 -1
  408. package/dist/base/configs/endpoints.config/HubFiscal/nfe.endpoint.config.js.map +1 -1
  409. package/dist/base/configs/endpoints.config/SapService/Sap/executeSapApi.endpoint.config.js +2 -1
  410. package/dist/base/configs/endpoints.config/SapService/Sap/executeSapApi.endpoint.config.js.map +1 -1
  411. package/dist/base/configs/endpoints.config/Ticket/ticket.endpoint.config.js +3 -1
  412. package/dist/base/configs/endpoints.config/Ticket/ticket.endpoint.config.js.map +1 -1
  413. package/dist/base/configs/endpoints.config/agendamento/config/contratoVenda.js +0 -1
  414. package/dist/base/configs/endpoints.config/agendamento/config/contratoVenda.js.map +1 -1
  415. package/dist/base/configs/endpoints.config/centralNfe/centralNfe.js +2 -0
  416. package/dist/base/configs/endpoints.config/centralNfe/centralNfe.js.map +1 -1
  417. package/dist/base/configs/endpoints.config/centralNfe/config/cfop.js +2 -1
  418. package/dist/base/configs/endpoints.config/centralNfe/config/cfop.js.map +1 -1
  419. package/dist/base/configs/endpoints.config/centralNfe/config/historicoCfop.js +9 -0
  420. package/dist/base/configs/endpoints.config/centralNfe/config/historicoCfop.js.map +1 -0
  421. package/dist/base/configs/endpoints.config/centralNfe/config/vinculoOperacao.js +2 -1
  422. package/dist/base/configs/endpoints.config/centralNfe/config/vinculoOperacao.js.map +1 -1
  423. package/dist/base/configs/endpoints.config/compras/compras.js +3 -1
  424. package/dist/base/configs/endpoints.config/compras/compras.js.map +1 -1
  425. package/dist/base/configs/endpoints.config/compras/config/itemOrdemCompra.js +8 -0
  426. package/dist/base/configs/endpoints.config/compras/config/itemOrdemCompra.js.map +1 -0
  427. package/dist/base/configs/endpoints.config/dm/config/municipio.js +2 -1
  428. package/dist/base/configs/endpoints.config/dm/config/municipio.js.map +1 -1
  429. package/dist/base/configs/endpoints.config/endpoints.navigation.js +5 -1
  430. package/dist/base/configs/endpoints.config/endpoints.navigation.js.map +1 -1
  431. package/dist/base/configs/endpoints.config/insumos/config/estoque.js +1 -6
  432. package/dist/base/configs/endpoints.config/insumos/config/estoque.js.map +1 -1
  433. package/dist/base/configs/endpoints.config/originacao/config/consumoManualSaldo.js +12 -0
  434. package/dist/base/configs/endpoints.config/originacao/config/consumoManualSaldo.js.map +1 -0
  435. package/dist/base/configs/endpoints.config/originacao/originacao.js +2 -0
  436. package/dist/base/configs/endpoints.config/originacao/originacao.js.map +1 -1
  437. package/dist/base/configs/endpoints.config/racao/config/carga.js +2 -0
  438. package/dist/base/configs/endpoints.config/racao/config/carga.js.map +1 -1
  439. package/dist/base/configs/endpoints.config/trade/config/contratoArmazenagemGraosTrade.js +15 -0
  440. package/dist/base/configs/endpoints.config/trade/config/contratoArmazenagemGraosTrade.js.map +1 -0
  441. package/dist/base/configs/endpoints.config/trade/index.js +8 -0
  442. package/dist/base/configs/endpoints.config/trade/index.js.map +1 -0
  443. package/dist/base/configs/endpoints.config/transportadora/contratoFrete.js +3 -1
  444. package/dist/base/configs/endpoints.config/transportadora/contratoFrete.js.map +1 -1
  445. package/dist/base/configs/index.js +33 -33
  446. package/dist/base/configs/navigation.config/index.js +31 -31
  447. package/dist/base/configs/navigation.config/modules.navigation.js +3 -1
  448. package/dist/base/configs/navigation.config/modules.navigation.js.map +1 -1
  449. package/dist/base/configs/navigation.config/modules.submenu/gestaoServicos/submenu.gestaoServicos.js +107 -0
  450. package/dist/base/configs/navigation.config/modules.submenu/gestaoServicos/submenu.gestaoServicos.js.map +1 -0
  451. package/dist/base/configs/navigation.config/modules.submenu/index.js +2 -0
  452. package/dist/base/configs/navigation.config/modules.submenu/index.js.map +1 -1
  453. package/dist/base/configs/navigation.config/modules.submenu/originacao/consumoManualSaldo/submenu.consumoManualSaldo.js +16 -0
  454. package/dist/base/configs/navigation.config/modules.submenu/originacao/consumoManualSaldo/submenu.consumoManualSaldo.js.map +1 -0
  455. package/dist/base/configs/navigation.config/modules.submenu/template/cadastros/submenu.example.js +1 -1
  456. package/dist/base/configs/navigation.config/modules.submenu/template/cadastros/submenu.example.js.map +1 -1
  457. package/dist/base/configs/navigation.config/modules.submenu/template/submenu.template.js +1 -1
  458. package/dist/base/configs/navigation.config/modules.submenu/template/submenu.template.js.map +1 -1
  459. package/dist/base/configs/navigation.config/modules.submenu/trade/submenu.trade.js +17 -0
  460. package/dist/base/configs/navigation.config/modules.submenu/trade/submenu.trade.js.map +1 -0
  461. package/dist/base/configs/navigation.config/submenu/agendamento/config/relatorio-cotas.js +1 -1
  462. package/dist/base/configs/navigation.config/submenu/agendamento/config/relatorio-cotas.js.map +1 -1
  463. package/dist/base/configs/navigation.config/submenu/centralNfe/cadastros.submenu.js +3 -1
  464. package/dist/base/configs/navigation.config/submenu/centralNfe/cadastros.submenu.js.map +1 -1
  465. package/dist/base/configs/navigation.config/submenu/centralNfe/config/cfop.submenu.js +16 -0
  466. package/dist/base/configs/navigation.config/submenu/centralNfe/config/cfop.submenu.js.map +1 -0
  467. package/dist/base/configs/navigation.config/submenu/index.js +20 -22
  468. package/dist/base/configs/navigation.config/submenu/index.js.map +1 -1
  469. package/dist/base/configs/navigation.config/submenu/originacao/originacao.submenu.js +2 -0
  470. package/dist/base/configs/navigation.config/submenu/originacao/originacao.submenu.js.map +1 -1
  471. package/dist/base/configs/navigation.config/submenu/template/cadastros.submenu.js.map +1 -0
  472. package/dist/base/configs/navigation.config/submenu/{example → template}/config/example.submenu.js +3 -3
  473. package/dist/base/configs/navigation.config/submenu/template/config/example.submenu.js.map +1 -0
  474. package/dist/base/configs/navigation.config/submenu/{example → template}/config/exampleObject.submenu.js +3 -3
  475. package/dist/base/configs/navigation.config/submenu/template/config/exampleObject.submenu.js.map +1 -0
  476. package/dist/base/configs/navigation.config/submenu/template/template.submenu.js.map +1 -0
  477. package/dist/base/configs/navigation.config/submenu/ticket/cadastros.submenu.js +5 -1
  478. package/dist/base/configs/navigation.config/submenu/ticket/cadastros.submenu.js.map +1 -1
  479. package/dist/base/configs/navigation.config/submenu/ticket/config/relatorioTransferenciaArmazens.submenu.js +16 -0
  480. package/dist/base/configs/navigation.config/submenu/ticket/config/relatorioTransferenciaArmazens.submenu.js.map +1 -0
  481. package/dist/base/configs/navigation.config/submenu/ticket/config/relatorioVendasGraos.submenu.js +16 -0
  482. package/dist/base/configs/navigation.config/submenu/ticket/config/relatorioVendasGraos.submenu.js.map +1 -0
  483. package/dist/base/configs/navigation.config/submenu/ticket/relatorios.submenu.js +5 -13
  484. package/dist/base/configs/navigation.config/submenu/ticket/relatorios.submenu.js.map +1 -1
  485. package/dist/base/configs/navigation.config/submenu/trade/configs/contratoArmazenagemGraosTrade.submenu.js +16 -0
  486. package/dist/base/configs/navigation.config/submenu/trade/configs/contratoArmazenagemGraosTrade.submenu.js.map +1 -0
  487. package/dist/base/configs/navigation.config/submenu/trade/trade.submenu.js +8 -0
  488. package/dist/base/configs/navigation.config/submenu/trade/trade.submenu.js.map +1 -0
  489. package/dist/base/index.js +50 -40
  490. package/dist/base/index.js.map +1 -1
  491. package/dist/base/locales/lang/ptBR/modules/Ticket/ticket.nav.js +3 -1
  492. package/dist/base/locales/lang/ptBR/modules/Ticket/ticket.nav.js.map +1 -1
  493. package/dist/base/services/index.js +15 -5
  494. package/dist/base/services/index.js.map +1 -1
  495. package/dist/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.js +35 -0
  496. package/dist/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.js.map +1 -0
  497. package/dist/base/services/modules/DadosMestres/Sap/IncotermsService.js +9 -1
  498. package/dist/base/services/modules/DadosMestres/Sap/IncotermsService.js.map +1 -1
  499. package/dist/base/services/modules/DadosMestres/Sap/SafraService.js +9 -1
  500. package/dist/base/services/modules/DadosMestres/Sap/SafraService.js.map +1 -1
  501. package/dist/base/services/modules/HubFiscal/NfeService.js +3 -3
  502. package/dist/base/services/modules/HubFiscal/NfeService.js.map +1 -1
  503. package/dist/base/services/modules/SapService/Sap/ExecuteSapApiService.js +9 -1
  504. package/dist/base/services/modules/SapService/Sap/ExecuteSapApiService.js.map +1 -1
  505. package/dist/base/services/modules/Ticket/TicketService.js +16 -0
  506. package/dist/base/services/modules/Ticket/TicketService.js.map +1 -1
  507. package/dist/base/services/modules/agendamento/ContratoVendaService.js +2 -2
  508. package/dist/base/services/modules/agendamento/ContratoVendaService.js.map +1 -1
  509. package/dist/base/services/modules/centralNfe/cfop/CfopService.js +8 -0
  510. package/dist/base/services/modules/centralNfe/cfop/CfopService.js.map +1 -1
  511. package/dist/base/services/modules/centralNfe/historicoCfop/HistoricoCfopService.js +21 -0
  512. package/dist/base/services/modules/centralNfe/historicoCfop/HistoricoCfopService.js.map +1 -0
  513. package/dist/base/services/modules/centralNfe/vinculoOperacao/VinculoOperacaoService.js +7 -0
  514. package/dist/base/services/modules/centralNfe/vinculoOperacao/VinculoOperacaoService.js.map +1 -1
  515. package/dist/base/services/modules/compras/index.js +2 -0
  516. package/dist/base/services/modules/compras/index.js.map +1 -1
  517. package/dist/base/services/modules/compras/ordemCompra/ItemOrdemCompraService.js +14 -0
  518. package/dist/base/services/modules/compras/ordemCompra/ItemOrdemCompraService.js.map +1 -0
  519. package/dist/base/services/modules/dm/index.js +2 -1
  520. package/dist/base/services/modules/dm/municipio/MunicipioService.js +7 -0
  521. package/dist/base/services/modules/dm/municipio/MunicipioService.js.map +1 -1
  522. package/dist/base/services/modules/index.js +15 -5
  523. package/dist/base/services/modules/index.js.map +1 -1
  524. package/dist/base/services/modules/originacao/consumoManualSaldo/consumoManualSaldoService.js +50 -0
  525. package/dist/base/services/modules/originacao/consumoManualSaldo/consumoManualSaldoService.js.map +1 -0
  526. package/dist/base/services/modules/racao/carga/CargaService.js +14 -0
  527. package/dist/base/services/modules/racao/carga/CargaService.js.map +1 -1
  528. package/dist/base/services/modules/racao/index.js +3 -1
  529. package/dist/base/services/modules/template/example/ExampleService.js +26 -12
  530. package/dist/base/services/modules/template/example/ExampleService.js.map +1 -1
  531. package/dist/base/services/modules/template/exampleObject/ExampleObjectService.js +44 -0
  532. package/dist/base/services/modules/template/exampleObject/ExampleObjectService.js.map +1 -0
  533. package/dist/base/services/modules/template/index.js +5 -2
  534. package/dist/base/services/modules/trade/ContratoArmazenagemGraosTradeService.js +59 -0
  535. package/dist/base/services/modules/trade/ContratoArmazenagemGraosTradeService.js.map +1 -0
  536. package/dist/base/services/modules/transportadora/ContratoFrete/ContratoFreteService.js +14 -0
  537. package/dist/base/services/modules/transportadora/ContratoFrete/ContratoFreteService.js.map +1 -1
  538. package/dist/base/services/modules/transportadora/index.js +3 -1
  539. package/lib/@ecme/components/layouts/PostLoginLayout/PostLoginLayout.tsx +5 -1
  540. package/lib/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.tsx +2 -2
  541. package/lib/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.tsx +2 -2
  542. package/lib/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.tsx +2 -2
  543. package/lib/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.tsx +2 -2
  544. package/lib/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.tsx +2 -2
  545. package/lib/@ecme/components/template/Header.stories.tsx +2 -2
  546. package/lib/@ecme/components/template/Notification/Notification.tsx +2 -2
  547. package/lib/@ecme/components/template/OrbeAiWidget/OrbeAiChatDrawer.tsx +140 -0
  548. package/lib/@ecme/components/template/OrbeAiWidget/OrbeAiWidget.tsx +155 -0
  549. package/lib/@ecme/components/template/OrbeAiWidget/ResizeHandles.tsx +47 -0
  550. package/lib/@ecme/components/template/OrbeAiWidget/index.ts +1 -0
  551. package/lib/@ecme/components/template/OrbeAiWidget/useResizablePanel.ts +143 -0
  552. package/lib/@ecme/components/template/Search.stories.tsx +20 -5
  553. package/lib/@ecme/components/template/Search.tsx +370 -84
  554. package/lib/@ecme/components/ui/Dropdown/DropdownMenu.tsx +7 -1
  555. package/lib/@ecme/components/view/ChatBox/ChatBox.tsx +8 -0
  556. package/lib/@ecme/components/view/ChatBox/components/MessageList.tsx +26 -8
  557. package/lib/@ecme/configs/navigation.config/concepts.navigation.config.ts +0 -16
  558. package/lib/@ecme/configs/routes.config/conceptsRoute.ts +0 -9
  559. package/lib/@ecme/locales/index.ts +0 -4
  560. package/lib/@ecme/locales/lang/ptBR/nav.ts +1 -0
  561. package/lib/@ecme/mock/data/favoritosMenuData.ts +3 -0
  562. package/lib/@ecme/services/AiService.ts +165 -13
  563. package/lib/@ecme/services/aiAuthHeaders.ts +58 -0
  564. package/lib/@ecme/services/axios/AxiosBase.ts +45 -24
  565. package/lib/@ecme/services/axios/AxiosRequestIntrceptorConfigCallback.ts +10 -39
  566. package/lib/@ecme/services/sseParser.ts +75 -0
  567. package/lib/@ecme/views/concepts/ai/Chat/components/AiErrorMessage.tsx +28 -0
  568. package/lib/@ecme/views/concepts/ai/Chat/components/AiThinkingIndicator.tsx +24 -0
  569. package/lib/@ecme/views/concepts/ai/Chat/components/ApprovalCard.tsx +103 -0
  570. package/lib/@ecme/views/concepts/ai/Chat/components/ChatHistory.tsx +11 -27
  571. package/lib/@ecme/views/concepts/ai/Chat/components/ChatHistoryItem.tsx +7 -13
  572. package/lib/@ecme/views/concepts/ai/Chat/components/ChatHistoryRenameDialog.tsx +17 -8
  573. package/lib/@ecme/views/concepts/ai/Chat/components/ChatLandingView.tsx +58 -50
  574. package/lib/@ecme/views/concepts/ai/Chat/components/ChatView.tsx +124 -18
  575. package/lib/@ecme/views/concepts/ai/Chat/components/DataRequestCard.tsx +144 -0
  576. package/lib/@ecme/views/concepts/ai/Chat/components/ToolCallChip.tsx +218 -0
  577. package/lib/@ecme/views/concepts/ai/Chat/components/toolPresentation.ts +283 -0
  578. package/lib/@ecme/views/concepts/ai/Chat/hooks/useChatConversations.tsx +128 -0
  579. package/lib/@ecme/views/concepts/ai/Chat/hooks/useChatSend.ts +233 -28
  580. package/lib/@ecme/views/concepts/ai/Chat/hooks/useConversationMessages.ts +68 -0
  581. package/lib/@ecme/views/concepts/ai/Chat/store/generativeChatStore.ts +84 -13
  582. package/lib/@ecme/views/concepts/ai/Chat/types.ts +133 -29
  583. package/lib/@ecme/views/concepts/ai/Chat/utils.ts +33 -0
  584. package/lib/@ecme/views/dashboards/FavoritesLanding/FavoritesLanding.tsx +124 -0
  585. package/lib/@ecme/views/dashboards/FavoritesLanding/index.ts +3 -0
  586. package/lib/@ecme/views/dashboards/FavoritesLanding/types.ts +17 -0
  587. package/lib/@ecme/views/dashboards/FavoritesLanding/utils.ts +51 -0
  588. package/lib/@ecme/views/dashboards/index.ts +1 -3
  589. package/lib/@ecme/views/index.ts +1 -1
  590. package/lib/base/@types/api/request/dm/TCreateFavoritoMenuRequest.ts +3 -0
  591. package/lib/base/@types/api/request/dm/TReorderFavoritosMenuRequest.ts +3 -0
  592. package/lib/base/@types/api/request/originacao/TSimularConsumoManualSaldoRequest.ts +8 -0
  593. package/lib/base/@types/api/response/dadosMestres/TFavoritoMenuResponse.ts +7 -0
  594. package/lib/base/@types/api/response/originacao/TConsumoManualSaldoResponse.ts +22 -0
  595. package/lib/base/@types/api/response/originacao/TFindAllSaldoResponse.ts +1 -0
  596. package/lib/base/@types/api/response/originacao/TSimularConsumoManualSaldoResponse.ts +17 -0
  597. package/lib/base/@types/enums/originacao/ModoConsumoManual.ts +4 -0
  598. package/lib/base/@types/enums/originacao/TipoSaldoConsumivel.ts +5 -0
  599. package/lib/base/@types/models/racao/carga.ts +51 -0
  600. package/lib/base/@types/models/template/example.ts +46 -0
  601. package/lib/base/@types/models/template/{exampleObject → exampleObject.ts} +3 -5
  602. package/lib/base/@types/models/transportadora/irpf.ts +1 -0
  603. package/lib/base/@types/models/transportadora/irpfFaixaDesconto.ts +0 -1
  604. package/lib/base/components/forms/GenericForms/GenericArrayFormSection.tsx +1 -1
  605. package/lib/base/components/shared/AceitarProcessoDialog.tsx +13 -2
  606. package/lib/base/components/shared/AdicionarHistoricoDialog.tsx +16 -13
  607. package/lib/base/components/shared/CancelarProcessoDialog.tsx +16 -13
  608. package/lib/base/components/shared/ConcluirProcessoDialog.tsx +16 -13
  609. package/lib/base/components/shared/EncerrarProcessoDialog.tsx +16 -13
  610. package/lib/base/components/shared/ReabrirProcessoDialog.tsx +16 -13
  611. package/lib/base/components/shared/RetornarFluxAtendimentoDialog.tsx +14 -12
  612. package/lib/base/components/shared/TransferirParaAtendenteDialog.tsx +14 -12
  613. package/lib/base/components/shared/TransferirParaSolicitanteDialog.tsx +14 -12
  614. package/lib/base/components/shared/TransferirProcessoDialog.tsx +20 -12
  615. package/lib/base/configs/api.config.ts +2 -2
  616. package/lib/base/configs/endpoints.config/DadosMestres/FavoritoMenu/favoritoMenu.endpoint.config.ts +10 -0
  617. package/lib/base/configs/endpoints.config/DadosMestres/Sap/incoterms.endpoint.config.ts +1 -0
  618. package/lib/base/configs/endpoints.config/DadosMestres/Sap/safra.endpoint.config.ts +1 -0
  619. package/lib/base/configs/endpoints.config/HubFiscal/nfe.endpoint.config.ts +1 -1
  620. package/lib/base/configs/endpoints.config/SapService/Sap/executeSapApi.endpoint.config.ts +1 -0
  621. package/lib/base/configs/endpoints.config/Ticket/ticket.endpoint.config.ts +2 -0
  622. package/lib/base/configs/endpoints.config/agendamento/config/contratoVenda.ts +0 -1
  623. package/lib/base/configs/endpoints.config/centralNfe/centralNfe.ts +2 -0
  624. package/lib/base/configs/endpoints.config/centralNfe/config/cfop.ts +3 -2
  625. package/lib/base/configs/endpoints.config/centralNfe/config/historicoCfop.ts +8 -0
  626. package/lib/base/configs/endpoints.config/centralNfe/config/vinculoOperacao.ts +2 -1
  627. package/lib/base/configs/endpoints.config/compras/compras.ts +3 -1
  628. package/lib/base/configs/endpoints.config/compras/config/itemOrdemCompra.ts +7 -0
  629. package/lib/base/configs/endpoints.config/dm/config/municipio.ts +2 -1
  630. package/lib/base/configs/endpoints.config/endpoints.navigation.ts +5 -1
  631. package/lib/base/configs/endpoints.config/insumos/config/estoque.ts +2 -7
  632. package/lib/base/configs/endpoints.config/originacao/config/consumoManualSaldo.ts +9 -0
  633. package/lib/base/configs/endpoints.config/originacao/originacao.ts +2 -0
  634. package/lib/base/configs/endpoints.config/racao/config/carga.ts +2 -0
  635. package/lib/base/configs/endpoints.config/trade/config/contratoArmazenagemGraosTrade.ts +13 -0
  636. package/lib/base/configs/endpoints.config/trade/index.ts +7 -0
  637. package/lib/base/configs/endpoints.config/transportadora/contratoFrete.ts +2 -0
  638. package/lib/base/configs/navigation.config/modules.navigation.ts +2 -0
  639. package/lib/base/configs/navigation.config/modules.submenu/gestaoServicos/submenu.gestaoServicos.ts +107 -0
  640. package/lib/base/configs/navigation.config/modules.submenu/index.ts +1 -0
  641. package/lib/base/configs/navigation.config/modules.submenu/originacao/consumoManualSaldo/submenu.consumoManualSaldo.ts +16 -0
  642. package/lib/base/configs/navigation.config/modules.submenu/template/cadastros/submenu.example.ts +1 -1
  643. package/lib/base/configs/navigation.config/modules.submenu/template/submenu.template.ts +2 -3
  644. package/lib/base/configs/navigation.config/modules.submenu/trade/submenu.trade.ts +18 -0
  645. package/lib/base/configs/navigation.config/submenu/agendamento/config/relatorio-cotas.ts +1 -1
  646. package/lib/base/configs/navigation.config/submenu/centralNfe/cadastros.submenu.ts +2 -0
  647. package/lib/base/configs/navigation.config/submenu/centralNfe/config/cfop.submenu.ts +16 -0
  648. package/lib/base/configs/navigation.config/submenu/index.ts +1 -2
  649. package/lib/base/configs/navigation.config/submenu/originacao/originacao.submenu.ts +2 -0
  650. package/lib/base/configs/navigation.config/submenu/{example → template}/config/example.submenu.ts +3 -3
  651. package/lib/base/configs/navigation.config/submenu/{example → template}/config/exampleObject.submenu.ts +3 -3
  652. package/lib/base/configs/navigation.config/submenu/ticket/cadastros.submenu.ts +4 -0
  653. package/lib/base/configs/navigation.config/submenu/ticket/config/relatorioTransferenciaArmazens.submenu.ts +16 -0
  654. package/lib/base/configs/navigation.config/submenu/ticket/config/relatorioVendasGraos.submenu.ts +16 -0
  655. package/lib/base/configs/navigation.config/submenu/ticket/relatorios.submenu.ts +4 -14
  656. package/lib/base/configs/navigation.config/submenu/trade/configs/contratoArmazenagemGraosTrade.submenu.ts +16 -0
  657. package/lib/base/configs/navigation.config/submenu/trade/trade.submenu.ts +8 -0
  658. package/lib/base/locales/lang/ptBR/modules/Ticket/ticket.nav.ts +2 -0
  659. package/lib/base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.ts +35 -0
  660. package/lib/base/services/modules/DadosMestres/Sap/IncotermsService.ts +8 -0
  661. package/lib/base/services/modules/DadosMestres/Sap/SafraService.ts +8 -0
  662. package/lib/base/services/modules/HubFiscal/NfeService.ts +2 -2
  663. package/lib/base/services/modules/SapService/Sap/ExecuteSapApiService.ts +8 -0
  664. package/lib/base/services/modules/Ticket/TicketService.ts +16 -0
  665. package/lib/base/services/modules/agendamento/ContratoVendaService.ts +2 -2
  666. package/lib/base/services/modules/centralNfe/cfop/CfopService.ts +9 -1
  667. package/lib/base/services/modules/centralNfe/historicoCfop/HistoricoCfopService.ts +21 -0
  668. package/lib/base/services/modules/centralNfe/vinculoOperacao/VinculoOperacaoService.ts +7 -0
  669. package/lib/base/services/modules/compras/index.ts +2 -1
  670. package/lib/base/services/modules/compras/ordemCompra/ItemOrdemCompraService.ts +12 -0
  671. package/lib/base/services/modules/dm/municipio/MunicipioService.tsx +7 -0
  672. package/lib/base/services/modules/originacao/consumoManualSaldo/consumoManualSaldoService.ts +54 -0
  673. package/lib/base/services/modules/racao/carga/CargaService.ts +15 -1
  674. package/lib/base/services/modules/template/example/ExampleService.ts +37 -19
  675. package/lib/base/services/modules/template/exampleObject/ExampleObjectService.ts +45 -0
  676. package/lib/base/services/modules/template/index.ts +2 -2
  677. package/lib/base/services/modules/trade/ContratoArmazenagemGraosTradeService.ts +62 -0
  678. package/lib/base/services/modules/transportadora/ContratoFrete/ContratoFreteService.ts +14 -0
  679. package/package.json +1 -1
  680. package/dist/@types/base/configs/navigation.config/submenu/example/cadastros.submenu.d.ts.map +0 -1
  681. package/dist/@types/base/configs/navigation.config/submenu/example/config/example.submenu.d.ts.map +0 -1
  682. package/dist/@types/base/configs/navigation.config/submenu/example/config/exampleObject.submenu.d.ts.map +0 -1
  683. package/dist/@types/base/configs/navigation.config/submenu/example/template.submenu.d.ts.map +0 -1
  684. package/dist/@types/base/services/modules/template/example/ExampleObjectService.d.ts +0 -6
  685. package/dist/@types/base/services/modules/template/example/ExampleObjectService.d.ts.map +0 -1
  686. package/dist/base/configs/navigation.config/submenu/example/cadastros.submenu.js.map +0 -1
  687. package/dist/base/configs/navigation.config/submenu/example/config/example.submenu.js.map +0 -1
  688. package/dist/base/configs/navigation.config/submenu/example/config/exampleObject.submenu.js.map +0 -1
  689. package/dist/base/configs/navigation.config/submenu/example/template.submenu.js.map +0 -1
  690. package/dist/base/services/modules/template/example/ExampleObjectService.js +0 -37
  691. package/dist/base/services/modules/template/example/ExampleObjectService.js.map +0 -1
  692. package/lib/base/@types/models/template/example +0 -37
  693. package/lib/base/services/modules/template/example/ExampleObjectService.ts +0 -34
  694. /package/dist/@types/base/configs/navigation.config/submenu/{example → template}/cadastros.submenu.d.ts +0 -0
  695. /package/dist/@types/base/configs/navigation.config/submenu/{example → template}/config/example.submenu.d.ts +0 -0
  696. /package/dist/@types/base/configs/navigation.config/submenu/{example → template}/config/exampleObject.submenu.d.ts +0 -0
  697. /package/dist/@types/base/configs/navigation.config/submenu/{example → template}/template.submenu.d.ts +0 -0
  698. /package/dist/base/configs/navigation.config/submenu/{example → template}/cadastros.submenu.js +0 -0
  699. /package/dist/base/configs/navigation.config/submenu/{example → template}/template.submenu.js +0 -0
  700. /package/lib/base/configs/navigation.config/submenu/{example → template}/cadastros.submenu.ts +0 -0
  701. /package/lib/base/configs/navigation.config/submenu/{example → template}/template.submenu.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatConversations.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/hooks/useChatConversations.tsx"],"sourcesContent":["import useSWR from 'swr'\nimport Notification from '@/components/ui/Notification'\nimport toast from '@/components/ui/toast'\nimport {\n apiDeleteConversation,\n apiGetConversations,\n apiRenameConversation,\n} from '@/services/AiService'\nimport { useSessionUser } from '@/store/authStore'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { resumoParaHistorico } from '../utils'\nimport type { ChatHistories, GetConversationsResponse } from '../types'\n\nconst avisarFalha = (mensagem: string) => {\n toast.push(\n <Notification type=\"danger\" duration={3000}>\n {mensagem}\n </Notification>,\n { placement: 'top-center' },\n )\n}\n\n/**\n * A lista de conversas do usuário, persistida no backend, e as ações sobre ela.\n *\n * Renomear e excluir são otimistas: a tela muda na hora e volta ao estado\n * anterior se o backend recusar.\n */\nconst useChatConversations = () => {\n const {\n setChatHistory,\n setChatHistoryName,\n setSelectedConversation,\n } = usGenerativeChatStore()\n\n const userId = useSessionUser((state) => state.user.userId)\n const signedIn = useSessionUser((state) => state.session.signedIn)\n\n // O usuário faz parte da chave: cada um tem o próprio cache, e o de quem\n // saiu nunca é servido a quem entrou. Sem sessão, não busca nada.\n //\n // Sem `revalidateIfStale: false` de propósito: cada vez que a lista monta,\n // ela confere o backend. Com ele, o SWR servia o cache antigo, não chamava\n // o `onSuccess`, e a lista só aparecia depois de um F5.\n useSWR(\n signedIn && userId ? ['/ai/chat/conversations', userId] : null,\n // O dono viaja junto com a resposta para o `onSuccess` conferir.\n async ([, dono]: [string, string]) => ({\n dono,\n resumos: await apiGetConversations<GetConversationsResponse>(),\n }),\n {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n onSuccess: ({ dono, resumos }) => {\n // Resposta atrasada de quem já saiu: descarta, senão a lista\n // de um usuário cairia na tela do outro.\n if (dono !== useSessionUser.getState().user.userId) {\n return\n }\n // Lido na hora, e não da closure: a resposta pode chegar\n // depois de o usuário já ter começado uma conversa.\n const atual = usGenerativeChatStore.getState().chatHistory\n setChatHistory(mesclar(atual, resumos))\n },\n },\n )\n\n const remover = async (id: string) => {\n const { chatHistory, selectedConversation } =\n usGenerativeChatStore.getState()\n\n setChatHistory(chatHistory.filter((item) => item.id !== id))\n if (selectedConversation === id) {\n setSelectedConversation('')\n }\n\n try {\n await apiDeleteConversation(id)\n } catch {\n setChatHistory(chatHistory)\n avisarFalha('Não foi possível excluir a conversa.')\n }\n }\n\n const renomear = async (id: string, title: string) => {\n const anterior = usGenerativeChatStore\n .getState()\n .chatHistory.find((item) => item.id === id)?.title\n\n setChatHistoryName({ id, title })\n\n try {\n await apiRenameConversation(id, title)\n } catch {\n if (anterior !== undefined) {\n setChatHistoryName({ id, title: anterior })\n }\n avisarFalha('Não foi possível renomear a conversa.')\n }\n }\n\n return { remover, renomear }\n}\n\n/**\n * Junta a lista do backend com o que já está na tela.\n *\n * - Conversa que já existe no store fica como está: pode ter mensagens\n * carregadas ou um stream em andamento.\n * - Conversa criada nesta sessão e que o backend ainda não conhece não pode\n * sumir: ela aparece primeiro, como ao ser criada.\n */\nfunction mesclar(\n atual: ChatHistories,\n resumos: GetConversationsResponse,\n): ChatHistories {\n const noStore = new Map(atual.map((chat) => [chat.id, chat]))\n const doBackend = new Set(resumos.map((resumo) => resumo.id))\n\n const soNaTela = atual.filter((chat) => !doBackend.has(chat.id))\n const daLista = resumos.map(\n (resumo) => noStore.get(resumo.id) ?? resumoParaHistorico(resumo),\n )\n return [...soNaTela, ...daLista]\n}\n\nexport default useChatConversations\n"],"names":[],"mappings":";;;;;;;;;;AAaA,MAAM,cAAc,CAAC,aAAqB;AACtC,QAAM;AAAA,wBACD,cAAA,EAAa,MAAK,UAAS,UAAU,KACjC,UAAA,UACL;AAAA,IACA,EAAE,WAAW,aAAA;AAAA,EAAa;AAElC;AAQA,MAAM,uBAAuB,MAAM;AAC/B,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACA,sBAAA;AAEJ,QAAM,SAAS,eAAe,CAAC,UAAU,MAAM,KAAK,MAAM;AAC1D,QAAM,WAAW,eAAe,CAAC,UAAU,MAAM,QAAQ,QAAQ;AAQjE;AAAA,IACI,YAAY,SAAS,CAAC,0BAA0B,MAAM,IAAI;AAAA;AAAA,IAE1D,OAAO,CAAA,EAAG,IAAI,OAAyB;AAAA,MACnC;AAAA,MACA,SAAS,MAAM,oBAAA;AAAA,IAA8C;AAAA,IAEjE;AAAA,MACI,mBAAmB;AAAA,MACnB,uBAAuB;AAAA,MACvB,WAAW,CAAC,EAAE,MAAM,cAAc;AAG9B,YAAI,SAAS,eAAe,SAAA,EAAW,KAAK,QAAQ;AAChD;AAAA,QACJ;AAGA,cAAM,QAAQ,sBAAsB,SAAA,EAAW;AAC/C,uBAAe,QAAQ,OAAO,OAAO,CAAC;AAAA,MAC1C;AAAA,IAAA;AAAA,EACJ;AAGJ,QAAM,UAAU,OAAO,OAAe;AAClC,UAAM,EAAE,aAAa,yBACjB,sBAAsB,SAAA;AAE1B,mBAAe,YAAY,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;AAC3D,QAAI,yBAAyB,IAAI;AAC7B,8BAAwB,EAAE;AAAA,IAC9B;AAEA,QAAI;AACA,YAAM,sBAAsB,EAAE;AAAA,IAClC,QAAQ;AACJ,qBAAe,WAAW;AAC1B,kBAAY,sCAAsC;AAAA,IACtD;AAAA,EACJ;AAEA,QAAM,WAAW,OAAO,IAAY,UAAkB;AAClD,UAAM,WAAW,sBACZ,SAAA,EACA,YAAY,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,GAAG;AAEjD,uBAAmB,EAAE,IAAI,OAAO;AAEhC,QAAI;AACA,YAAM,sBAAsB,IAAI,KAAK;AAAA,IACzC,QAAQ;AACJ,UAAI,aAAa,QAAW;AACxB,2BAAmB,EAAE,IAAI,OAAO,SAAA,CAAU;AAAA,MAC9C;AACA,kBAAY,uCAAuC;AAAA,IACvD;AAAA,EACJ;AAEA,SAAO,EAAE,SAAS,SAAA;AACtB;AAUA,SAAS,QACL,OACA,SACa;AACb,QAAM,UAAU,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;AAC5D,QAAM,YAAY,IAAI,IAAI,QAAQ,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC;AAE5D,QAAM,WAAW,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,IAAI,KAAK,EAAE,CAAC;AAC/D,QAAM,UAAU,QAAQ;AAAA,IACpB,CAAC,WAAW,QAAQ,IAAI,OAAO,EAAE,KAAK,oBAAoB,MAAM;AAAA,EAAA;AAEpE,SAAO,CAAC,GAAG,UAAU,GAAG,OAAO;AACnC;"}
@@ -1,22 +1,28 @@
1
1
  import { usGenerativeChatStore } from "../store/generativeChatStore.js";
2
- import { apiPostChat } from "../../../../../services/AiService.js";
2
+ import { streamChat, resumeChat } from "../../../../../services/AiService.js";
3
+ import "../../../../../auth/index.js";
3
4
  import dayjs from "dayjs";
4
5
  import uniqueId from "lodash/uniqueId";
6
+ import { novoIdDeConversa } from "../utils.js";
7
+ import useAuth from "../../../../../auth/useAuth.js";
8
+ const AI_ERROR_MESSAGE = "Desculpe, estou com um pequeno problema de comunicação e não consigo te atender no momento. Tente novamente em instantes.";
5
9
  const useChatSend = () => {
10
+ const { user } = useAuth();
6
11
  const {
7
12
  selectedConversation,
8
13
  setSelectedConversation,
9
14
  pushChatHistory,
10
15
  pushConversation,
16
+ updateConversation,
11
17
  setIsTyping
12
18
  } = usGenerativeChatStore();
13
19
  const creteMyMessage = (id, prompt) => {
14
20
  pushConversation(id, {
15
21
  id: uniqueId("ai-conversation-"),
16
22
  sender: {
17
- id: "1",
18
- name: "Angelina Gotelli",
19
- avatarImageUrl: "/img/avatars/thumb-1.jpg"
23
+ id: user.userId ?? "me",
24
+ name: user.userName ?? "Você",
25
+ avatarImageUrl: user.avatar ?? void 0
20
26
  },
21
27
  content: prompt,
22
28
  timestamp: dayjs().toDate(),
@@ -24,51 +30,162 @@ const useChatSend = () => {
24
30
  isMyMessage: true
25
31
  });
26
32
  };
27
- const sendMessage = async (id, prompt, attachments) => {
28
- const resp = await apiPostChat({
29
- prompt,
30
- attachments
31
- });
32
- pushConversation(id, {
33
- id: uniqueId("ai-conversation-"),
33
+ const createAiMessage = (chatId, options) => {
34
+ const messageId = uniqueId("ai-conversation-");
35
+ pushConversation(chatId, {
36
+ id: messageId,
34
37
  sender: {
35
38
  id: "ai",
36
39
  name: "Chat AI",
37
40
  avatarImageUrl: "/img/thumbs/ai.jpg"
38
41
  },
39
- content: resp.choices[0].message.content || "",
42
+ content: "",
40
43
  timestamp: dayjs().toDate(),
41
44
  type: "regular",
42
45
  isMyMessage: false,
43
- fresh: true
46
+ fresh: false,
47
+ ...options
44
48
  });
45
- setIsTyping(false);
49
+ return messageId;
50
+ };
51
+ const consumirStream = async (chatId, messageId, executar, inicial) => {
52
+ let texto = inicial.texto;
53
+ let tools = inicial.tools;
54
+ const aplicar = (evento) => {
55
+ switch (evento.type) {
56
+ case "token":
57
+ texto += evento.data.content;
58
+ updateConversation(chatId, messageId, { content: texto });
59
+ break;
60
+ case "tool_start":
61
+ tools = [
62
+ ...tools,
63
+ {
64
+ id: evento.data.id,
65
+ name: evento.data.name,
66
+ args: evento.data.args,
67
+ running: true
68
+ }
69
+ ];
70
+ updateConversation(chatId, messageId, { tools });
71
+ break;
72
+ case "tool_end":
73
+ tools = tools.map(
74
+ (tool) => tool.id === evento.data.id ? {
75
+ ...tool,
76
+ running: false,
77
+ awaitingApproval: false,
78
+ result: evento.data.content,
79
+ isError: evento.data.is_error
80
+ } : tool
81
+ );
82
+ updateConversation(chatId, messageId, { tools });
83
+ break;
84
+ case "approval_required": {
85
+ const pausadas = new Set(
86
+ evento.data.calls.map((call) => call.id)
87
+ );
88
+ tools = tools.map(
89
+ (tool) => pausadas.has(tool.id) ? { ...tool, running: false, awaitingApproval: true } : tool
90
+ );
91
+ updateConversation(chatId, messageId, {
92
+ tools,
93
+ pendingApproval: evento.data
94
+ });
95
+ break;
96
+ }
97
+ case "input_required":
98
+ updateConversation(chatId, messageId, {
99
+ pendingInput: evento.data
100
+ });
101
+ break;
102
+ case "done":
103
+ texto = inicial.texto + evento.data.content;
104
+ updateConversation(chatId, messageId, { content: texto });
105
+ break;
106
+ case "error":
107
+ updateConversation(chatId, messageId, {
108
+ content: evento.data.message || AI_ERROR_MESSAGE,
109
+ isError: true
110
+ });
111
+ break;
112
+ }
113
+ };
114
+ try {
115
+ await executar(aplicar);
116
+ } catch {
117
+ updateConversation(chatId, messageId, {
118
+ content: texto || AI_ERROR_MESSAGE,
119
+ isError: !texto
120
+ });
121
+ } finally {
122
+ setIsTyping(false);
123
+ }
124
+ };
125
+ const sendMessage = async (chatId, prompt) => {
126
+ const messageId = createAiMessage(chatId);
127
+ await consumirStream(
128
+ chatId,
129
+ messageId,
130
+ (onEvent) => streamChat({ prompt, conversationId: chatId, onEvent }),
131
+ { texto: "", tools: [] }
132
+ );
46
133
  };
47
- const createConversation = async (id, prompt, attachments) => {
48
- setSelectedConversation(id);
49
- await sendMessage(id, prompt, attachments);
134
+ const createConversation = async (chatId, prompt) => {
135
+ setSelectedConversation(chatId);
136
+ await sendMessage(chatId, prompt);
50
137
  };
51
- const handleSend = async (prompt, attachments) => {
138
+ const handleSend = async (prompt) => {
52
139
  setIsTyping(true);
53
140
  if (selectedConversation) {
54
141
  creteMyMessage(selectedConversation, prompt);
55
142
  await sendMessage(selectedConversation, prompt);
56
143
  } else {
57
- const newId = uniqueId("ai-chat-");
144
+ const newId = novoIdDeConversa();
58
145
  pushChatHistory({
59
146
  id: newId,
60
147
  title: prompt,
61
148
  lastConversation: "",
62
149
  createdTime: dayjs().unix(),
63
150
  updatedTime: dayjs().unix(),
64
- enable: false
151
+ enable: true
65
152
  });
66
153
  creteMyMessage(newId, prompt);
67
- await createConversation(newId, prompt, attachments);
154
+ await createConversation(newId, prompt);
68
155
  }
69
156
  };
157
+ const handleApproval = async (chatId, messageId, approved) => {
158
+ const mensagem = usGenerativeChatStore.getState().chatHistory.find((chat) => chat.id === chatId)?.conversation?.find((item) => item.id === messageId);
159
+ if (!mensagem?.pendingApproval) {
160
+ return;
161
+ }
162
+ setIsTyping(true);
163
+ updateConversation(chatId, messageId, { pendingApproval: void 0 });
164
+ await consumirStream(
165
+ chatId,
166
+ messageId,
167
+ (onEvent) => resumeChat({ approved, conversationId: chatId, onEvent }),
168
+ { texto: mensagem.content ?? "", tools: mensagem.tools ?? [] }
169
+ );
170
+ };
171
+ const handleDataSubmit = async (chatId, messageId, dados) => {
172
+ const mensagem = usGenerativeChatStore.getState().chatHistory.find((chat) => chat.id === chatId)?.conversation?.find((item) => item.id === messageId);
173
+ if (!mensagem?.pendingInput) {
174
+ return;
175
+ }
176
+ setIsTyping(true);
177
+ updateConversation(chatId, messageId, { pendingInput: void 0 });
178
+ await consumirStream(
179
+ chatId,
180
+ messageId,
181
+ (onEvent) => resumeChat({ dados, conversationId: chatId, onEvent }),
182
+ { texto: mensagem.content ?? "", tools: mensagem.tools ?? [] }
183
+ );
184
+ };
70
185
  return {
71
- handleSend
186
+ handleSend,
187
+ handleApproval,
188
+ handleDataSubmit
72
189
  };
73
190
  };
74
191
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"useChatSend.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/hooks/useChatSend.ts"],"sourcesContent":["import { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { apiPostChat } from '@/services/AiService'\nimport dayjs from 'dayjs'\nimport uniqueId from 'lodash/uniqueId'\nimport type { PostAiChatResponse } from '../types'\n\nconst useChatSend = () => {\n const {\n selectedConversation,\n setSelectedConversation,\n pushChatHistory,\n pushConversation,\n setIsTyping,\n } = usGenerativeChatStore()\n\n const creteMyMessage = (id: string, prompt: string) => {\n pushConversation(id, {\n id: uniqueId('ai-conversation-'),\n sender: {\n id: '1',\n name: 'Angelina Gotelli',\n avatarImageUrl: '/img/avatars/thumb-1.jpg',\n },\n content: prompt,\n timestamp: dayjs().toDate(),\n type: 'regular',\n isMyMessage: true,\n })\n }\n\n const sendMessage = async (\n id: string,\n prompt: string,\n attachments?: File[],\n ) => {\n const resp = await apiPostChat<PostAiChatResponse>({\n prompt,\n attachments,\n })\n pushConversation(id, {\n id: uniqueId('ai-conversation-'),\n sender: {\n id: 'ai',\n name: 'Chat AI',\n avatarImageUrl: '/img/thumbs/ai.jpg',\n },\n content: resp.choices[0].message.content || '',\n timestamp: dayjs().toDate(),\n type: 'regular',\n isMyMessage: false,\n fresh: true,\n })\n setIsTyping(false)\n }\n\n const createConversation = async (\n id: string,\n prompt: string,\n attachments?: File[],\n ) => {\n setSelectedConversation(id)\n await sendMessage(id, prompt, attachments)\n }\n\n const handleSend = async (prompt: string, attachments?: File[]) => {\n setIsTyping(true)\n if (selectedConversation) {\n creteMyMessage(selectedConversation, prompt)\n await sendMessage(selectedConversation, prompt)\n } else {\n const newId = uniqueId('ai-chat-')\n pushChatHistory({\n id: newId,\n title: prompt,\n lastConversation: '',\n createdTime: dayjs().unix(),\n updatedTime: dayjs().unix(),\n enable: false,\n })\n creteMyMessage(newId, prompt)\n await createConversation(newId, prompt, attachments)\n }\n }\n\n return {\n handleSend,\n }\n}\n\nexport default useChatSend\n"],"names":[],"mappings":";;;;AAMA,MAAM,cAAc,MAAM;AACtB,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACA,sBAAA;AAEJ,QAAM,iBAAiB,CAAC,IAAY,WAAmB;AACnD,qBAAiB,IAAI;AAAA,MACjB,IAAI,SAAS,kBAAkB;AAAA,MAC/B,QAAQ;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,gBAAgB;AAAA,MAAA;AAAA,MAEpB,SAAS;AAAA,MACT,WAAW,MAAA,EAAQ,OAAA;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,IAAA,CAChB;AAAA,EACL;AAEA,QAAM,cAAc,OAChB,IACA,QACA,gBACC;AACD,UAAM,OAAO,MAAM,YAAgC;AAAA,MAC/C;AAAA,MACA;AAAA,IAAA,CACH;AACD,qBAAiB,IAAI;AAAA,MACjB,IAAI,SAAS,kBAAkB;AAAA,MAC/B,QAAQ;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,gBAAgB;AAAA,MAAA;AAAA,MAEpB,SAAS,KAAK,QAAQ,CAAC,EAAE,QAAQ,WAAW;AAAA,MAC5C,WAAW,MAAA,EAAQ,OAAA;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IAAA,CACV;AACD,gBAAY,KAAK;AAAA,EACrB;AAEA,QAAM,qBAAqB,OACvB,IACA,QACA,gBACC;AACD,4BAAwB,EAAE;AAC1B,UAAM,YAAY,IAAI,QAAQ,WAAW;AAAA,EAC7C;AAEA,QAAM,aAAa,OAAO,QAAgB,gBAAyB;AAC/D,gBAAY,IAAI;AAChB,QAAI,sBAAsB;AACtB,qBAAe,sBAAsB,MAAM;AAC3C,YAAM,YAAY,sBAAsB,MAAM;AAAA,IAClD,OAAO;AACH,YAAM,QAAQ,SAAS,UAAU;AACjC,sBAAgB;AAAA,QACZ,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,kBAAkB;AAAA,QAClB,aAAa,MAAA,EAAQ,KAAA;AAAA,QACrB,aAAa,MAAA,EAAQ,KAAA;AAAA,QACrB,QAAQ;AAAA,MAAA,CACX;AACD,qBAAe,OAAO,MAAM;AAC5B,YAAM,mBAAmB,OAAO,QAAQ,WAAW;AAAA,IACvD;AAAA,EACJ;AAEA,SAAO;AAAA,IACH;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"useChatSend.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/hooks/useChatSend.ts"],"sourcesContent":["import { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { resumeChat, streamChat } from '@/services/AiService'\nimport { useAuth } from '@/auth'\nimport dayjs from 'dayjs'\nimport uniqueId from 'lodash/uniqueId'\nimport { novoIdDeConversa } from '../utils'\nimport type { ChatEvent, Conversation, ToolCall } from '../types'\n\n/** Resposta genérica exibida no chat quando a comunicação com a IA falha. */\nconst AI_ERROR_MESSAGE =\n 'Desculpe, estou com um pequeno problema de comunicação e não consigo te atender no momento. Tente novamente em instantes.'\n\nconst useChatSend = () => {\n const { user } = useAuth()\n const {\n selectedConversation,\n setSelectedConversation,\n pushChatHistory,\n pushConversation,\n updateConversation,\n setIsTyping,\n } = usGenerativeChatStore()\n\n const creteMyMessage = (id: string, prompt: string) => {\n pushConversation(id, {\n id: uniqueId('ai-conversation-'),\n sender: {\n id: user.userId ?? 'me',\n name: user.userName ?? 'Você',\n avatarImageUrl: user.avatar ?? undefined,\n },\n content: prompt,\n timestamp: dayjs().toDate(),\n type: 'regular',\n isMyMessage: true,\n })\n }\n\n /**\n * Cria a mensagem da IA vazia e devolve o id, para o streaming preenchê-la.\n *\n * `fresh: false` é obrigatório: `fresh` liga a animação de máquina de\n * escrever do ChatCustomContent, que reinicia do zero a cada mudança de\n * conteúdo — com streaming, o texto ficaria piscando e voltando ao início.\n * A animação agora vem do servidor.\n */\n const createAiMessage = (\n chatId: string,\n options?: Partial<Conversation>,\n ) => {\n const messageId = uniqueId('ai-conversation-')\n pushConversation(chatId, {\n id: messageId,\n sender: {\n id: 'ai',\n name: 'Chat AI',\n avatarImageUrl: '/img/thumbs/ai.jpg',\n },\n content: '',\n timestamp: dayjs().toDate(),\n type: 'regular',\n isMyMessage: false,\n fresh: false,\n ...options,\n })\n return messageId\n }\n\n /**\n * Consome um stream escrevendo numa mensagem que já existe.\n *\n * Compartilhado pelo envio e pela retomada de aprovação: quando o usuário\n * aprova, a resposta continua na MESMA mensagem, então o acumulador de\n * texto e de ferramentas precisa partir do que já está lá.\n */\n const consumirStream = async (\n chatId: string,\n messageId: string,\n executar: (onEvent: (evento: ChatEvent) => void) => Promise<void>,\n inicial: { texto: string; tools: ToolCall[] },\n ) => {\n // Acumulados localmente: o store guarda o resultado, mas ler de volta a\n // cada token para concatenar seria uma corrida com o próprio set().\n let texto = inicial.texto\n let tools = inicial.tools\n\n const aplicar = (evento: ChatEvent) => {\n switch (evento.type) {\n case 'token':\n texto += evento.data.content\n updateConversation(chatId, messageId, { content: texto })\n break\n\n case 'tool_start':\n tools = [\n ...tools,\n {\n id: evento.data.id,\n name: evento.data.name,\n args: evento.data.args,\n running: true,\n },\n ]\n updateConversation(chatId, messageId, { tools })\n break\n\n case 'tool_end':\n tools = tools.map((tool) =>\n tool.id === evento.data.id\n ? {\n ...tool,\n running: false,\n awaitingApproval: false,\n result: evento.data.content,\n isError: evento.data.is_error,\n }\n : tool,\n )\n updateConversation(chatId, messageId, { tools })\n break\n\n case 'approval_required': {\n // O tool_start já marcou estas ferramentas como \"running\".\n // Elas não estão executando: estão paradas esperando o\n // clique — senão o chip giraria para sempre.\n const pausadas = new Set(\n evento.data.calls.map((call) => call.id),\n )\n tools = tools.map((tool) =>\n pausadas.has(tool.id)\n ? { ...tool, running: false, awaitingApproval: true }\n : tool,\n )\n updateConversation(chatId, messageId, {\n tools,\n pendingApproval: evento.data,\n })\n break\n }\n\n case 'input_required':\n // Diferente da aprovação, aqui nenhuma ferramenta foi\n // pedida ao ERP: o agente só percebeu que faltam campos.\n // Por isso não há chip de ferramenta para ajustar.\n updateConversation(chatId, messageId, {\n pendingInput: evento.data,\n })\n break\n\n case 'done':\n // O done é a fonte autoritativa do texto DESTA requisição —\n // se algum token se perdeu, ele corrige.\n //\n // Numa retomada, porém, o que o agente disse ANTES da pausa\n // não vem nele (o backend acumula as falas por requisição):\n // veio em `inicial.texto`. Sem concatenar, a bolha encolhia\n // para só a frase final — \"Vou criar a área para você…\"\n // virava \"Nada foi criado\" — e o agente parecia ter\n // esquecido tudo. No primeiro envio `inicial.texto` é '',\n // então nada muda ali.\n texto = inicial.texto + evento.data.content\n updateConversation(chatId, messageId, { content: texto })\n break\n\n case 'error':\n updateConversation(chatId, messageId, {\n content: evento.data.message || AI_ERROR_MESSAGE,\n isError: true,\n })\n break\n }\n }\n\n try {\n await executar(aplicar)\n } catch {\n updateConversation(chatId, messageId, {\n content: texto || AI_ERROR_MESSAGE,\n isError: !texto,\n })\n } finally {\n setIsTyping(false)\n }\n }\n\n const sendMessage = async (chatId: string, prompt: string) => {\n const messageId = createAiMessage(chatId)\n await consumirStream(\n chatId,\n messageId,\n (onEvent) => streamChat({ prompt, conversationId: chatId, onEvent }),\n { texto: '', tools: [] },\n )\n }\n\n const createConversation = async (chatId: string, prompt: string) => {\n setSelectedConversation(chatId)\n await sendMessage(chatId, prompt)\n }\n\n const handleSend = async (prompt: string) => {\n setIsTyping(true)\n if (selectedConversation) {\n creteMyMessage(selectedConversation, prompt)\n await sendMessage(selectedConversation, prompt)\n } else {\n const newId = novoIdDeConversa()\n pushChatHistory({\n id: newId,\n title: prompt,\n lastConversation: '',\n createdTime: dayjs().unix(),\n updatedTime: dayjs().unix(),\n enable: true,\n })\n creteMyMessage(newId, prompt)\n await createConversation(newId, prompt)\n }\n }\n\n /**\n * Aprova ou nega a operação pendente e retoma a conversa.\n *\n * Continua escrevendo na mesma mensagem: por isso o acumulador parte do\n * conteúdo e das ferramentas que já estão lá.\n */\n const handleApproval = async (\n chatId: string,\n messageId: string,\n approved: boolean,\n ) => {\n const mensagem = usGenerativeChatStore\n .getState()\n .chatHistory.find((chat) => chat.id === chatId)\n ?.conversation?.find((item) => item.id === messageId)\n\n if (!mensagem?.pendingApproval) {\n return\n }\n\n setIsTyping(true)\n // Some com o card antes da chamada: dois cliques rápidos enviariam duas\n // retomadas, e a segunda falha (o interrupt já foi consumido).\n updateConversation(chatId, messageId, { pendingApproval: undefined })\n\n await consumirStream(\n chatId,\n messageId,\n (onEvent) =>\n resumeChat({ approved, conversationId: chatId, onEvent }),\n { texto: mensagem.content ?? '', tools: mensagem.tools ?? [] },\n )\n }\n\n /**\n * Envia os dados que faltavam (ou o cancelamento) e retoma a conversa.\n *\n * Mesma mecânica do `handleApproval`: continua na MESMA mensagem, então o\n * acumulador parte do que já está lá.\n */\n const handleDataSubmit = async (\n chatId: string,\n messageId: string,\n dados: Record<string, unknown> | null,\n ) => {\n const mensagem = usGenerativeChatStore\n .getState()\n .chatHistory.find((chat) => chat.id === chatId)\n ?.conversation?.find((item) => item.id === messageId)\n\n if (!mensagem?.pendingInput) {\n return\n }\n\n setIsTyping(true)\n // Some com o formulário antes da chamada: dois envios mandariam duas\n // retomadas, e a segunda falha (o interrupt já foi consumido).\n updateConversation(chatId, messageId, { pendingInput: undefined })\n\n await consumirStream(\n chatId,\n messageId,\n (onEvent) => resumeChat({ dados, conversationId: chatId, onEvent }),\n { texto: mensagem.content ?? '', tools: mensagem.tools ?? [] },\n )\n }\n\n return {\n handleSend,\n handleApproval,\n handleDataSubmit,\n }\n}\n\nexport default useChatSend\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { useState, useEffect } from "react";
2
+ import { apiGetChatHistory } from "../../../../../services/AiService.js";
3
+ import { usGenerativeChatStore } from "../store/generativeChatStore.js";
4
+ import { mensagemDoHistorico } from "../utils.js";
5
+ const useConversationMessages = () => {
6
+ const { selectedConversation, chatHistory, setConversationMessages } = usGenerativeChatStore();
7
+ const [carregando, setCarregando] = useState(false);
8
+ const pendente = chatHistory.find((chat) => chat.id === selectedConversation)?.loaded === false;
9
+ useEffect(() => {
10
+ if (!selectedConversation || !pendente) {
11
+ return;
12
+ }
13
+ let cancelado = false;
14
+ setCarregando(true);
15
+ const gravar = (antigas) => {
16
+ const naTela = usGenerativeChatStore.getState().chatHistory.find((chat) => chat.id === selectedConversation)?.conversation ?? [];
17
+ setConversationMessages(selectedConversation, [...antigas, ...naTela]);
18
+ };
19
+ apiGetChatHistory(selectedConversation).then((resposta) => {
20
+ if (cancelado) return;
21
+ gravar((resposta[0]?.conversation ?? []).map(mensagemDoHistorico));
22
+ }).catch(() => {
23
+ if (!cancelado) gravar([]);
24
+ }).finally(() => {
25
+ if (!cancelado) setCarregando(false);
26
+ });
27
+ return () => {
28
+ cancelado = true;
29
+ setCarregando(false);
30
+ };
31
+ }, [selectedConversation, pendente, setConversationMessages]);
32
+ return { carregando };
33
+ };
34
+ export {
35
+ useConversationMessages as default
36
+ };
37
+ //# sourceMappingURL=useConversationMessages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConversationMessages.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/hooks/useConversationMessages.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { apiGetChatHistory } from '@/services/AiService'\nimport { usGenerativeChatStore } from '../store/generativeChatStore'\nimport { mensagemDoHistorico } from '../utils'\nimport type { Conversation, HistoryChat } from '../types'\n\n/**\n * Busca as mensagens da conversa selecionada quando ela veio da lista do\n * backend e ainda não foi aberta nesta sessão.\n *\n * Busca uma vez por conversa: depois disso `loaded` fica true e as mensagens\n * novas chegam pelo streaming, como em qualquer conversa.\n */\nconst useConversationMessages = () => {\n const { selectedConversation, chatHistory, setConversationMessages } =\n usGenerativeChatStore()\n const [carregando, setCarregando] = useState(false)\n\n const pendente =\n chatHistory.find((chat) => chat.id === selectedConversation)?.loaded ===\n false\n\n useEffect(() => {\n if (!selectedConversation || !pendente) {\n return\n }\n\n // Trocar de conversa no meio da busca não pode gravar a resposta\n // atrasada na tela errada.\n let cancelado = false\n setCarregando(true)\n\n // O usuário pode ter enviado algo enquanto a busca corria: o que já\n // está na tela vem depois do histórico, e não some.\n const gravar = (antigas: Conversation[]) => {\n const naTela =\n usGenerativeChatStore\n .getState()\n .chatHistory.find((chat) => chat.id === selectedConversation)\n ?.conversation ?? []\n setConversationMessages(selectedConversation, [...antigas, ...naTela])\n }\n\n apiGetChatHistory<HistoryChat[]>(selectedConversation)\n .then((resposta) => {\n if (cancelado) return\n gravar((resposta[0]?.conversation ?? []).map(mensagemDoHistorico))\n })\n .catch(() => {\n // Marca como carregada mesmo assim: sem isto, cada render\n // tentaria de novo. A conversa segue utilizável, porque a\n // memória está no backend.\n if (!cancelado) gravar([])\n })\n .finally(() => {\n if (!cancelado) setCarregando(false)\n })\n\n return () => {\n cancelado = true\n setCarregando(false)\n }\n }, [selectedConversation, pendente, setConversationMessages])\n\n return { carregando }\n}\n\nexport default useConversationMessages\n"],"names":[],"mappings":";;;;AAaA,MAAM,0BAA0B,MAAM;AAClC,QAAM,EAAE,sBAAsB,aAAa,wBAAA,IACvC,sBAAA;AACJ,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAElD,QAAM,WACF,YAAY,KAAK,CAAC,SAAS,KAAK,OAAO,oBAAoB,GAAG,WAC9D;AAEJ,YAAU,MAAM;AACZ,QAAI,CAAC,wBAAwB,CAAC,UAAU;AACpC;AAAA,IACJ;AAIA,QAAI,YAAY;AAChB,kBAAc,IAAI;AAIlB,UAAM,SAAS,CAAC,YAA4B;AACxC,YAAM,SACF,sBACK,SAAA,EACA,YAAY,KAAK,CAAC,SAAS,KAAK,OAAO,oBAAoB,GAC1D,gBAAgB,CAAA;AAC1B,8BAAwB,sBAAsB,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC;AAAA,IACzE;AAEA,sBAAiC,oBAAoB,EAChD,KAAK,CAAC,aAAa;AAChB,UAAI,UAAW;AACf,cAAQ,SAAS,CAAC,GAAG,gBAAgB,IAAI,IAAI,mBAAmB,CAAC;AAAA,IACrE,CAAC,EACA,MAAM,MAAM;AAIT,UAAI,CAAC,UAAW,QAAO,EAAE;AAAA,IAC7B,CAAC,EACA,QAAQ,MAAM;AACX,UAAI,CAAC,UAAW,eAAc,KAAK;AAAA,IACvC,CAAC;AAEL,WAAO,MAAM;AACT,kBAAY;AACZ,oBAAc,KAAK;AAAA,IACvB;AAAA,EACJ,GAAG,CAAC,sBAAsB,UAAU,uBAAuB,CAAC;AAE5D,SAAO,EAAE,WAAA;AACb;"}
@@ -1,4 +1,5 @@
1
1
  import { create } from "zustand";
2
+ import { useSessionUser } from "../../../../../store/authStore.js";
2
3
  const initialState = {
3
4
  selectedConversation: "",
4
5
  selectedConversationRecord: [],
@@ -12,6 +13,13 @@ const initialState = {
12
13
  };
13
14
  const usGenerativeChatStore = create((set, get) => ({
14
15
  ...initialState,
16
+ // Arrays novos: `setSelectedConversationRecord` muta o array no lugar, e
17
+ // reusar o do initialState traria de volta o que ele acumulou.
18
+ reset: () => set(() => ({
19
+ ...initialState,
20
+ selectedConversationRecord: [],
21
+ chatHistory: []
22
+ })),
15
23
  setSelectedConversation: (payload) => set(() => ({ selectedConversation: payload })),
16
24
  setChatHistory: (payload) => set(() => ({ chatHistory: payload })),
17
25
  setChatHistoryName: (payload) => set(() => {
@@ -33,19 +41,44 @@ const usGenerativeChatStore = create((set, get) => ({
33
41
  }
34
42
  return { selectedConversationRecord: record };
35
43
  }),
36
- pushChatHistory: (payload) => set(() => ({ chatHistory: [...[payload], ...get().chatHistory] })),
37
- pushConversation: (id, conversation) => set(() => {
38
- const chatHistory = get().chatHistory.map((chat) => {
39
- if (chat.id === id) {
40
- if (!chat.conversation) {
41
- chat.conversation = [];
42
- }
43
- chat.conversation?.push(conversation);
44
- }
45
- return chat;
46
- });
47
- return { chatHistory };
48
- }),
44
+ // Conversa criada nesta sessão já nasce carregada: as mensagens estão aqui,
45
+ // não há o que buscar no backend.
46
+ pushChatHistory: (payload) => set(() => ({
47
+ chatHistory: [{ loaded: true, ...payload }, ...get().chatHistory]
48
+ })),
49
+ setConversationMessages: (id, conversation) => set(() => ({
50
+ chatHistory: get().chatHistory.map(
51
+ (chat) => chat.id === id ? { ...chat, conversation, loaded: true } : chat
52
+ )
53
+ })),
54
+ pushConversation: (id, conversation) => set(() => ({
55
+ chatHistory: get().chatHistory.map(
56
+ (chat) => chat.id === id ? {
57
+ ...chat,
58
+ conversation: [
59
+ ...chat.conversation ?? [],
60
+ conversation
61
+ ]
62
+ } : chat
63
+ )
64
+ })),
65
+ /**
66
+ * Atualiza UMA mensagem de uma conversa.
67
+ *
68
+ * Imutavel de proposito: o streaming chama isto a cada token, e mutar o
69
+ * objeto no lugar faria o React perder atualizacoes — a re-renderizacao
70
+ * dependeria da identidade do array externo mudar por acaso.
71
+ */
72
+ updateConversation: (chatId, messageId, patch) => set(() => ({
73
+ chatHistory: get().chatHistory.map(
74
+ (chat) => chat.id === chatId ? {
75
+ ...chat,
76
+ conversation: chat.conversation?.map(
77
+ (mensagem) => mensagem.id === messageId ? { ...mensagem, ...patch } : mensagem
78
+ )
79
+ } : chat
80
+ )
81
+ })),
49
82
  setIsTyping: (payload) => set(() => ({ isTyping: payload })),
50
83
  disabledChatFresh: () => set(() => {
51
84
  const chatHistory = get().chatHistory.map((chat) => {
@@ -64,6 +97,13 @@ const usGenerativeChatStore = create((set, get) => ({
64
97
  return { chatHistory };
65
98
  })
66
99
  }));
100
+ useSessionUser.subscribe((atual, anterior) => {
101
+ const trocouUsuario = atual.user.userId !== anterior.user.userId;
102
+ const saiu = anterior.session.signedIn && !atual.session.signedIn;
103
+ if (trocouUsuario || saiu) {
104
+ usGenerativeChatStore.getState().reset();
105
+ }
106
+ });
67
107
  export {
68
108
  usGenerativeChatStore
69
109
  };
@@ -1 +1 @@
1
- {"version":3,"file":"generativeChatStore.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/store/generativeChatStore.ts"],"sourcesContent":["import { create } from 'zustand'\nimport type { ChatHistories, ChatHistory, Conversation } from '../types'\n\ntype RenameDialog = {\n id: string\n title: string\n open: boolean\n}\n\nexport type GenerativeChatState = {\n selectedConversation: string\n selectedConversationRecord: string[]\n chatHistory: ChatHistories\n renameDialog: RenameDialog\n isTyping: boolean\n}\n\ntype GenerativeChatAction = {\n setSelectedConversation: (payload: string) => void\n setSelectedConversationRecord: (payload: string) => void\n setChatHistory: (payload: ChatHistories) => void\n setChatHistoryName: (payload: { id: string; title: string }) => void\n setRenameDialog: (payload: RenameDialog) => void\n setIsTyping: (payload: boolean) => void\n pushChatHistory: (payload: ChatHistory) => void\n pushConversation: (id: string, conversation: Conversation) => void\n disabledChatFresh: (id: string) => void\n}\n\nconst initialState: GenerativeChatState = {\n selectedConversation: '',\n selectedConversationRecord: [],\n chatHistory: [],\n renameDialog: {\n id: '',\n title: '',\n open: false,\n },\n isTyping: false,\n}\n\nexport const usGenerativeChatStore = create<\n GenerativeChatState & GenerativeChatAction\n>((set, get) => ({\n ...initialState,\n setSelectedConversation: (payload) =>\n set(() => ({ selectedConversation: payload })),\n setChatHistory: (payload) => set(() => ({ chatHistory: payload })),\n setChatHistoryName: (payload) =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === payload.id) {\n chat.title = payload.title\n }\n return chat\n })\n return { chatHistory }\n }),\n setRenameDialog: (payload) => set(() => ({ renameDialog: payload })),\n setSelectedConversationRecord: (payload) =>\n set(() => {\n let record = get().selectedConversationRecord\n\n if (record.includes(payload)) {\n record = record.filter((item) => item !== payload)\n } else {\n record.push(payload)\n }\n\n return { selectedConversationRecord: record }\n }),\n pushChatHistory: (payload) =>\n set(() => ({ chatHistory: [...[payload], ...get().chatHistory] })),\n pushConversation: (id, conversation) =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === id) {\n if (!chat.conversation) {\n chat.conversation = []\n }\n chat.conversation?.push(conversation)\n }\n return chat\n })\n return { chatHistory }\n }),\n setIsTyping: (payload) => set(() => ({ isTyping: payload })),\n disabledChatFresh: () =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === get().selectedConversation) {\n chat.conversation = chat.conversation?.map(\n (conversation) => {\n if (conversation.fresh) {\n conversation.fresh = false\n }\n return conversation\n },\n )\n }\n return chat\n })\n return { chatHistory }\n }),\n}))\n"],"names":[],"mappings":";AA6BA,MAAM,eAAoC;AAAA,EACtC,sBAAsB;AAAA,EACtB,4BAA4B,CAAA;AAAA,EAC5B,aAAa,CAAA;AAAA,EACb,cAAc;AAAA,IACV,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,EAAA;AAAA,EAEV,UAAU;AACd;AAEO,MAAM,wBAAwB,OAEnC,CAAC,KAAK,SAAS;AAAA,EACb,GAAG;AAAA,EACH,yBAAyB,CAAC,YACtB,IAAI,OAAO,EAAE,sBAAsB,UAAU;AAAA,EACjD,gBAAgB,CAAC,YAAY,IAAI,OAAO,EAAE,aAAa,UAAU;AAAA,EACjE,oBAAoB,CAAC,YACjB,IAAI,MAAM;AACN,UAAM,cAAc,IAAA,EAAM,YAAY,IAAI,CAAC,SAAS;AAChD,UAAI,KAAK,OAAO,QAAQ,IAAI;AACxB,aAAK,QAAQ,QAAQ;AAAA,MACzB;AACA,aAAO;AAAA,IACX,CAAC;AACD,WAAO,EAAE,YAAA;AAAA,EACb,CAAC;AAAA,EACL,iBAAiB,CAAC,YAAY,IAAI,OAAO,EAAE,cAAc,UAAU;AAAA,EACnE,+BAA+B,CAAC,YAC5B,IAAI,MAAM;AACN,QAAI,SAAS,MAAM;AAEnB,QAAI,OAAO,SAAS,OAAO,GAAG;AAC1B,eAAS,OAAO,OAAO,CAAC,SAAS,SAAS,OAAO;AAAA,IACrD,OAAO;AACH,aAAO,KAAK,OAAO;AAAA,IACvB;AAEA,WAAO,EAAE,4BAA4B,OAAA;AAAA,EACzC,CAAC;AAAA,EACL,iBAAiB,CAAC,YACd,IAAI,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,MAAM,WAAW,IAAI;AAAA,EACrE,kBAAkB,CAAC,IAAI,iBACnB,IAAI,MAAM;AACN,UAAM,cAAc,IAAA,EAAM,YAAY,IAAI,CAAC,SAAS;AAChD,UAAI,KAAK,OAAO,IAAI;AAChB,YAAI,CAAC,KAAK,cAAc;AACpB,eAAK,eAAe,CAAA;AAAA,QACxB;AACA,aAAK,cAAc,KAAK,YAAY;AAAA,MACxC;AACA,aAAO;AAAA,IACX,CAAC;AACD,WAAO,EAAE,YAAA;AAAA,EACb,CAAC;AAAA,EACL,aAAa,CAAC,YAAY,IAAI,OAAO,EAAE,UAAU,UAAU;AAAA,EAC3D,mBAAmB,MACf,IAAI,MAAM;AACN,UAAM,cAAc,IAAA,EAAM,YAAY,IAAI,CAAC,SAAS;AAChD,UAAI,KAAK,OAAO,IAAA,EAAM,sBAAsB;AACxC,aAAK,eAAe,KAAK,cAAc;AAAA,UACnC,CAAC,iBAAiB;AACd,gBAAI,aAAa,OAAO;AACpB,2BAAa,QAAQ;AAAA,YACzB;AACA,mBAAO;AAAA,UACX;AAAA,QAAA;AAAA,MAER;AACA,aAAO;AAAA,IACX,CAAC;AACD,WAAO,EAAE,YAAA;AAAA,EACb,CAAC;AACT,EAAE;"}
1
+ {"version":3,"file":"generativeChatStore.js","sources":["../../../../../../../lib/@ecme/views/concepts/ai/Chat/store/generativeChatStore.ts"],"sourcesContent":["import { create } from 'zustand'\nimport { useSessionUser } from '@/store/authStore'\nimport type { ChatHistories, ChatHistory, Conversation } from '../types'\n\ntype RenameDialog = {\n id: string\n title: string\n open: boolean\n}\n\nexport type GenerativeChatState = {\n selectedConversation: string\n selectedConversationRecord: string[]\n chatHistory: ChatHistories\n renameDialog: RenameDialog\n isTyping: boolean\n}\n\ntype GenerativeChatAction = {\n setSelectedConversation: (payload: string) => void\n setSelectedConversationRecord: (payload: string) => void\n setChatHistory: (payload: ChatHistories) => void\n setChatHistoryName: (payload: { id: string; title: string }) => void\n setRenameDialog: (payload: RenameDialog) => void\n setIsTyping: (payload: boolean) => void\n pushChatHistory: (payload: ChatHistory) => void\n pushConversation: (id: string, conversation: Conversation) => void\n /** Grava as mensagens buscadas no backend e marca a conversa como carregada. */\n setConversationMessages: (id: string, conversation: Conversation[]) => void\n updateConversation: (\n chatId: string,\n messageId: string,\n patch: Partial<Conversation>,\n ) => void\n disabledChatFresh: (id: string) => void\n /** Volta ao estado inicial. Chamado sozinho quando o usuário da sessão muda. */\n reset: () => void\n}\n\nconst initialState: GenerativeChatState = {\n selectedConversation: '',\n selectedConversationRecord: [],\n chatHistory: [],\n renameDialog: {\n id: '',\n title: '',\n open: false,\n },\n isTyping: false,\n}\n\nexport const usGenerativeChatStore = create<\n GenerativeChatState & GenerativeChatAction\n>((set, get) => ({\n ...initialState,\n // Arrays novos: `setSelectedConversationRecord` muta o array no lugar, e\n // reusar o do initialState traria de volta o que ele acumulou.\n reset: () =>\n set(() => ({\n ...initialState,\n selectedConversationRecord: [],\n chatHistory: [],\n })),\n setSelectedConversation: (payload) =>\n set(() => ({ selectedConversation: payload })),\n setChatHistory: (payload) => set(() => ({ chatHistory: payload })),\n setChatHistoryName: (payload) =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === payload.id) {\n chat.title = payload.title\n }\n return chat\n })\n return { chatHistory }\n }),\n setRenameDialog: (payload) => set(() => ({ renameDialog: payload })),\n setSelectedConversationRecord: (payload) =>\n set(() => {\n let record = get().selectedConversationRecord\n\n if (record.includes(payload)) {\n record = record.filter((item) => item !== payload)\n } else {\n record.push(payload)\n }\n\n return { selectedConversationRecord: record }\n }),\n // Conversa criada nesta sessão já nasce carregada: as mensagens estão aqui,\n // não há o que buscar no backend.\n pushChatHistory: (payload) =>\n set(() => ({\n chatHistory: [{ loaded: true, ...payload }, ...get().chatHistory],\n })),\n setConversationMessages: (id, conversation) =>\n set(() => ({\n chatHistory: get().chatHistory.map((chat) =>\n chat.id === id ? { ...chat, conversation, loaded: true } : chat,\n ),\n })),\n pushConversation: (id, conversation) =>\n set(() => ({\n chatHistory: get().chatHistory.map((chat) =>\n chat.id === id\n ? {\n ...chat,\n conversation: [\n ...(chat.conversation ?? []),\n conversation,\n ],\n }\n : chat,\n ),\n })),\n /**\n * Atualiza UMA mensagem de uma conversa.\n *\n * Imutavel de proposito: o streaming chama isto a cada token, e mutar o\n * objeto no lugar faria o React perder atualizacoes — a re-renderizacao\n * dependeria da identidade do array externo mudar por acaso.\n */\n updateConversation: (chatId, messageId, patch) =>\n set(() => ({\n chatHistory: get().chatHistory.map((chat) =>\n chat.id === chatId\n ? {\n ...chat,\n conversation: chat.conversation?.map((mensagem) =>\n mensagem.id === messageId\n ? { ...mensagem, ...patch }\n : mensagem,\n ),\n }\n : chat,\n ),\n })),\n setIsTyping: (payload) => set(() => ({ isTyping: payload })),\n disabledChatFresh: () =>\n set(() => {\n const chatHistory = get().chatHistory.map((chat) => {\n if (chat.id === get().selectedConversation) {\n chat.conversation = chat.conversation?.map(\n (conversation) => {\n if (conversation.fresh) {\n conversation.fresh = false\n }\n return conversation\n },\n )\n }\n return chat\n })\n return { chatHistory }\n }),\n}))\n\n/**\n * O chat pertence ao usuário da sessão: trocou o usuário, zera o chat.\n *\n * Login e logout acontecem sem recarregar a página, e este store é um singleton\n * do módulo. Sem isto, o próximo usuário via as conversas do anterior.\n *\n * Olha o `signedIn` além do `userId` porque o logout faz `setUser({})`, e o\n * `setUser` faz MERGE: o `userId` antigo continua lá depois de sair.\n *\n * É uma assinatura, e não um efeito de componente, para zerar ANTES do próximo\n * render: a lista antiga nem chega a piscar na tela.\n */\nuseSessionUser.subscribe((atual, anterior) => {\n const trocouUsuario = atual.user.userId !== anterior.user.userId\n const saiu = anterior.session.signedIn && !atual.session.signedIn\n if (trocouUsuario || saiu) {\n usGenerativeChatStore.getState().reset()\n }\n})\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,15 @@
1
+ import dayjs from "dayjs";
2
+ const novoIdDeConversa = () => crypto.randomUUID();
3
+ const resumoParaHistorico = (resumo) => ({
4
+ ...resumo,
5
+ lastConversation: "",
6
+ enable: true,
7
+ loaded: false
8
+ });
9
+ const mensagemDoHistorico = (mensagem) => ({
10
+ ...mensagem,
11
+ timestamp: dayjs.unix(mensagem.timestamp).toDate()
12
+ });
1
13
  const getStringPosition = (string, subString, index) => {
2
14
  return string.split(subString, index).join(" ").length;
3
15
  };
@@ -15,6 +27,9 @@ const getCurrentNodeOverflow = (arr, pos) => {
15
27
  };
16
28
  export {
17
29
  getCurrentNodeOverflow,
18
- getStringPosition
30
+ getStringPosition,
31
+ mensagemDoHistorico,
32
+ novoIdDeConversa,
33
+ resumoParaHistorico
19
34
  };
20
35
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../lib/@ecme/views/concepts/ai/Chat/utils.ts"],"sourcesContent":["export const getStringPosition = (\n string: string,\n subString: string,\n index: number,\n): number => {\n return string.split(subString, index).join(' ').length\n}\n\nexport const getCurrentNodeOverflow = (\n arr: number[],\n pos: number,\n): [number, number] => {\n let acc = 0\n let index = 0\n for (let i = 0; i < arr.length; i++) {\n if (acc + arr[i] > pos) {\n break\n }\n\n index++\n\n acc += arr[i]\n }\n\n return [index, pos - acc]\n}\n"],"names":[],"mappings":"AAAO,MAAM,oBAAoB,CAC7B,QACA,WACA,UACS;AACT,SAAO,OAAO,MAAM,WAAW,KAAK,EAAE,KAAK,GAAG,EAAE;AACpD;AAEO,MAAM,yBAAyB,CAClC,KACA,QACmB;AACnB,MAAI,MAAM;AACV,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,QAAI,MAAM,IAAI,CAAC,IAAI,KAAK;AACpB;AAAA,IACJ;AAEA;AAEA,WAAO,IAAI,CAAC;AAAA,EAChB;AAEA,SAAO,CAAC,OAAO,MAAM,GAAG;AAC5B;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../lib/@ecme/views/concepts/ai/Chat/utils.ts"],"sourcesContent":["import dayjs from 'dayjs'\nimport type {\n ChatHistory,\n Conversation,\n ConversationSummary,\n HistoryMessage,\n} from './types'\n\n/**\n * Id de uma conversa nova.\n *\n * Precisa ser único entre recargas: o backend guarda a memória por este id.\n * Um contador por página (como o `uniqueId` do lodash) recomeça no F5, e o\n * \"novo chat\" herdaria a memória de uma conversa antiga.\n */\nexport const novoIdDeConversa = (): string => crypto.randomUUID()\n\n/** Conversa da lista do backend, ainda sem as mensagens. */\nexport const resumoParaHistorico = (\n resumo: ConversationSummary,\n): ChatHistory => ({\n ...resumo,\n lastConversation: '',\n enable: true,\n loaded: false,\n})\n\n/** Mensagem do /ai/chat/history no formato do chat (timestamp em Date). */\nexport const mensagemDoHistorico = (mensagem: HistoryMessage): Conversation => ({\n ...mensagem,\n timestamp: dayjs.unix(mensagem.timestamp).toDate(),\n})\n\nexport const getStringPosition = (\n string: string,\n subString: string,\n index: number,\n): number => {\n return string.split(subString, index).join(' ').length\n}\n\nexport const getCurrentNodeOverflow = (\n arr: number[],\n pos: number,\n): [number, number] => {\n let acc = 0\n let index = 0\n for (let i = 0; i < arr.length; i++) {\n if (acc + arr[i] > pos) {\n break\n }\n\n index++\n\n acc += arr[i]\n }\n\n return [index, pos - acc]\n}\n"],"names":[],"mappings":";AAeO,MAAM,mBAAmB,MAAc,OAAO,WAAA;AAG9C,MAAM,sBAAsB,CAC/B,YACe;AAAA,EACf,GAAG;AAAA,EACH,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EACR,QAAQ;AACZ;AAGO,MAAM,sBAAsB,CAAC,cAA4C;AAAA,EAC5E,GAAG;AAAA,EACH,WAAW,MAAM,KAAK,SAAS,SAAS,EAAE,OAAA;AAC9C;AAEO,MAAM,oBAAoB,CAC7B,QACA,WACA,UACS;AACT,SAAO,OAAO,MAAM,WAAW,KAAK,EAAE,KAAK,GAAG,EAAE;AACpD;AAEO,MAAM,yBAAyB,CAClC,KACA,QACmB;AACnB,MAAI,MAAM;AACV,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,QAAI,MAAM,IAAI,CAAC,IAAI,KAAK;AACpB;AAAA,IACJ;AAEA;AAEA,WAAO,IAAI,CAAC;AAAA,EAChB;AAEA,SAAO,CAAC,OAAO,MAAM,GAAG;AAC5B;"}
@@ -0,0 +1,92 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
3
+ import { useNavigate } from "react-router-dom";
4
+ import { useTranslation } from "react-i18next";
5
+ import useSWR from "swr";
6
+ import "../../../components/ui/Card/index.js";
7
+ import "../../../components/ui/Button/index.js";
8
+ import Loading from "../../../components/shared/Loading.js";
9
+ import navigationConfig from "../../../configs/navigation.config/index.js";
10
+ import navigationIcon from "../../../configs/navigation-icon.config.js";
11
+ import { filterNavigationByAuthority } from "../../../components/template/Search.js";
12
+ import { useSessionUser } from "../../../store/authStore.js";
13
+ import { apiFindFavoritosByUsuario } from "../../../../base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService.js";
14
+ import { PiStarDuotone } from "react-icons/pi";
15
+ import { buildFavoriteNavMap } from "./utils.js";
16
+ import Card from "../../../components/ui/Card/Card.js";
17
+ import Button from "../../../components/ui/Button/Button.js";
18
+ const FavoritesLandingBase = ({
19
+ title = "Meus favoritos",
20
+ emptyStateMessage = "Você ainda não adicionou nenhum favorito. Use a busca para marcar páginas com a estrela.",
21
+ className
22
+ }) => {
23
+ const { t } = useTranslation();
24
+ const navigate = useNavigate();
25
+ const userId = useSessionUser((state) => state.user.userId);
26
+ const userAuthority = useSessionUser((state) => state.user.authority);
27
+ const { data: favorites, isLoading } = useSWR(
28
+ userId ? ["/api/favoritos-menu/usuario", userId] : null,
29
+ () => apiFindFavoritosByUsuario(Number(userId)),
30
+ { revalidateOnFocus: false }
31
+ );
32
+ const navMap = useMemo(() => {
33
+ const filteredNavigationTree = filterNavigationByAuthority(
34
+ navigationConfig,
35
+ userAuthority || []
36
+ );
37
+ return buildFavoriteNavMap(filteredNavigationTree);
38
+ }, [userAuthority]);
39
+ const favoriteGroups = useMemo(() => {
40
+ if (!favorites || favorites.length === 0) return [];
41
+ const sorted = [...favorites].sort((a, b) => a.ordem - b.ordem);
42
+ const groups = /* @__PURE__ */ new Map();
43
+ sorted.forEach((fav) => {
44
+ const navInfo = navMap.get(fav.menuKey);
45
+ if (!navInfo) return;
46
+ const group = groups.get(navInfo.moduleKey);
47
+ if (group) {
48
+ group.items.push(navInfo);
49
+ } else {
50
+ groups.set(navInfo.moduleKey, {
51
+ moduleKey: navInfo.moduleKey,
52
+ moduleTitle: t(
53
+ navInfo.moduleTranslateKey,
54
+ navInfo.moduleTitle
55
+ ),
56
+ items: [navInfo]
57
+ });
58
+ }
59
+ });
60
+ return Array.from(groups.values());
61
+ }, [favorites, navMap, t]);
62
+ return /* @__PURE__ */ jsx(Loading, { loading: isLoading, children: /* @__PURE__ */ jsxs("div", { className, children: [
63
+ /* @__PURE__ */ jsx("h3", { className: "mb-4", children: title }),
64
+ favoriteGroups.length === 0 ? /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx("p", { className: "text-center text-gray-500", children: emptyStateMessage }) }) : /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-4", children: favoriteGroups.map((group) => /* @__PURE__ */ jsx(
65
+ Card,
66
+ {
67
+ header: { content: group.moduleTitle },
68
+ children: /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: group.items.map((item) => /* @__PURE__ */ jsx(
69
+ Button,
70
+ {
71
+ block: true,
72
+ className: "!justify-start gap-2 text-left",
73
+ icon: navigationIcon[item.icon] ?? /* @__PURE__ */ jsx(PiStarDuotone, {}),
74
+ onClick: () => navigate(item.path),
75
+ children: t(item.translateKey, item.title)
76
+ },
77
+ item.key
78
+ )) })
79
+ },
80
+ group.moduleKey
81
+ )) })
82
+ ] }) });
83
+ };
84
+ const FavoritesLanding = () => {
85
+ return /* @__PURE__ */ jsx(FavoritesLandingBase, {});
86
+ };
87
+ export {
88
+ FavoritesLanding,
89
+ FavoritesLandingBase,
90
+ FavoritesLanding as default
91
+ };
92
+ //# sourceMappingURL=FavoritesLanding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FavoritesLanding.js","sources":["../../../../../lib/@ecme/views/dashboards/FavoritesLanding/FavoritesLanding.tsx"],"sourcesContent":["import { useMemo } from 'react'\nimport { useNavigate } from 'react-router-dom'\nimport { useTranslation } from 'react-i18next'\nimport useSWR from 'swr'\nimport Card from '@/components/ui/Card'\nimport Button from '@/components/ui/Button'\nimport Loading from '@/components/shared/Loading'\nimport navigationConfig from '@/configs/navigation.config'\nimport navigationIcon from '@/configs/navigation-icon.config'\nimport { filterNavigationByAuthority } from '@/components/template/Search'\nimport { useSessionUser } from '@/store/authStore'\nimport { apiFindFavoritosByUsuario } from '@base/services/modules/DadosMestres/FavoritoMenu/FavoritoMenuService'\nimport { PiStarDuotone } from 'react-icons/pi'\nimport { buildFavoriteNavMap } from './utils'\nimport type { FavoriteGroup } from './types'\n\ntype FavoritesLandingProps = {\n title?: string\n emptyStateMessage?: string\n className?: string\n}\n\nexport const FavoritesLandingBase = ({\n title = 'Meus favoritos',\n emptyStateMessage = 'Você ainda não adicionou nenhum favorito. Use a busca para marcar páginas com a estrela.',\n className,\n}: FavoritesLandingProps) => {\n const { t } = useTranslation()\n const navigate = useNavigate()\n const userId = useSessionUser((state) => state.user.userId)\n const userAuthority = useSessionUser((state) => state.user.authority)\n\n const { data: favorites, isLoading } = useSWR(\n userId ? ['/api/favoritos-menu/usuario', userId] : null,\n () => apiFindFavoritosByUsuario(Number(userId)),\n { revalidateOnFocus: false },\n )\n\n const navMap = useMemo(() => {\n const filteredNavigationTree = filterNavigationByAuthority(\n navigationConfig,\n userAuthority || [],\n )\n return buildFavoriteNavMap(filteredNavigationTree)\n }, [userAuthority])\n\n const favoriteGroups = useMemo<FavoriteGroup[]>(() => {\n if (!favorites || favorites.length === 0) return []\n\n const sorted = [...favorites].sort((a, b) => a.ordem - b.ordem)\n const groups = new Map<string, FavoriteGroup>()\n\n sorted.forEach((fav) => {\n const navInfo = navMap.get(fav.menuKey)\n if (!navInfo) return\n\n const group = groups.get(navInfo.moduleKey)\n if (group) {\n group.items.push(navInfo)\n } else {\n groups.set(navInfo.moduleKey, {\n moduleKey: navInfo.moduleKey,\n moduleTitle: t(\n navInfo.moduleTranslateKey,\n navInfo.moduleTitle,\n ),\n items: [navInfo],\n })\n }\n })\n\n return Array.from(groups.values())\n }, [favorites, navMap, t])\n\n return (\n <Loading loading={isLoading}>\n <div className={className}>\n <h3 className=\"mb-4\">{title}</h3>\n {favoriteGroups.length === 0 ? (\n <Card>\n <p className=\"text-center text-gray-500\">\n {emptyStateMessage}\n </p>\n </Card>\n ) : (\n <div className=\"flex flex-col gap-4\">\n {favoriteGroups.map((group) => (\n <Card\n key={group.moduleKey}\n header={{ content: group.moduleTitle }}\n >\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {group.items.map((item) => (\n <Button\n key={item.key}\n block\n className=\"!justify-start gap-2 text-left\"\n icon={\n navigationIcon[item.icon] ?? (\n <PiStarDuotone />\n )\n }\n onClick={() =>\n navigate(item.path)\n }\n >\n {t(item.translateKey, item.title)}\n </Button>\n ))}\n </div>\n </Card>\n ))}\n </div>\n )}\n </div>\n </Loading>\n )\n}\n\nexport const FavoritesLanding = () => {\n return <FavoritesLandingBase />\n}\n\nexport default FavoritesLanding"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAsBO,MAAM,uBAAuB,CAAC;AAAA,EACjC,QAAQ;AAAA,EACR,oBAAoB;AAAA,EACpB;AACJ,MAA6B;AACzB,QAAM,EAAE,EAAA,IAAM,eAAA;AACd,QAAM,WAAW,YAAA;AACjB,QAAM,SAAS,eAAe,CAAC,UAAU,MAAM,KAAK,MAAM;AAC1D,QAAM,gBAAgB,eAAe,CAAC,UAAU,MAAM,KAAK,SAAS;AAEpE,QAAM,EAAE,MAAM,WAAW,UAAA,IAAc;AAAA,IACnC,SAAS,CAAC,+BAA+B,MAAM,IAAI;AAAA,IACnD,MAAM,0BAA0B,OAAO,MAAM,CAAC;AAAA,IAC9C,EAAE,mBAAmB,MAAA;AAAA,EAAM;AAG/B,QAAM,SAAS,QAAQ,MAAM;AACzB,UAAM,yBAAyB;AAAA,MAC3B;AAAA,MACA,iBAAiB,CAAA;AAAA,IAAC;AAEtB,WAAO,oBAAoB,sBAAsB;AAAA,EACrD,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,iBAAiB,QAAyB,MAAM;AAClD,QAAI,CAAC,aAAa,UAAU,WAAW,UAAU,CAAA;AAEjD,UAAM,SAAS,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAC9D,UAAM,6BAAa,IAAA;AAEnB,WAAO,QAAQ,CAAC,QAAQ;AACpB,YAAM,UAAU,OAAO,IAAI,IAAI,OAAO;AACtC,UAAI,CAAC,QAAS;AAEd,YAAM,QAAQ,OAAO,IAAI,QAAQ,SAAS;AAC1C,UAAI,OAAO;AACP,cAAM,MAAM,KAAK,OAAO;AAAA,MAC5B,OAAO;AACH,eAAO,IAAI,QAAQ,WAAW;AAAA,UAC1B,WAAW,QAAQ;AAAA,UACnB,aAAa;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,UAAA;AAAA,UAEZ,OAAO,CAAC,OAAO;AAAA,QAAA,CAClB;AAAA,MACL;AAAA,IACJ,CAAC;AAED,WAAO,MAAM,KAAK,OAAO,OAAA,CAAQ;AAAA,EACrC,GAAG,CAAC,WAAW,QAAQ,CAAC,CAAC;AAEzB,6BACK,SAAA,EAAQ,SAAS,WACd,UAAA,qBAAC,SAAI,WACD,UAAA;AAAA,IAAA,oBAAC,MAAA,EAAG,WAAU,QAAQ,UAAA,OAAM;AAAA,IAC3B,eAAe,WAAW,wBACtB,MAAA,EACG,UAAA,oBAAC,OAAE,WAAU,6BACR,6BACL,GACJ,wBAEC,OAAA,EAAI,WAAU,uBACV,UAAA,eAAe,IAAI,CAAC,UACjB;AAAA,MAAC;AAAA,MAAA;AAAA,QAEG,QAAQ,EAAE,SAAS,MAAM,YAAA;AAAA,QAEzB,UAAA,oBAAC,SAAI,WAAU,wDACV,gBAAM,MAAM,IAAI,CAAC,SACd;AAAA,UAAC;AAAA,UAAA;AAAA,YAEG,OAAK;AAAA,YACL,WAAU;AAAA,YACV,MACI,eAAe,KAAK,IAAI,yBACnB,eAAA,EAAc;AAAA,YAGvB,SAAS,MACL,SAAS,KAAK,IAAI;AAAA,YAGrB,UAAA,EAAE,KAAK,cAAc,KAAK,KAAK;AAAA,UAAA;AAAA,UAZ3B,KAAK;AAAA,QAAA,CAcjB,EAAA,CACL;AAAA,MAAA;AAAA,MArBK,MAAM;AAAA,IAAA,CAuBlB,EAAA,CACL;AAAA,EAAA,EAAA,CAER,EAAA,CACJ;AAER;AAEO,MAAM,mBAAmB,MAAM;AAClC,6BAAQ,sBAAA,EAAqB;AACjC;"}
@@ -0,0 +1,5 @@
1
+ import { FavoritesLanding } from "./FavoritesLanding.js";
2
+ export {
3
+ FavoritesLanding as default
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}