@hotmeshio/long-tail 0.4.4 → 0.4.5

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 (295) hide show
  1. package/build/api/agent-subscriptions.js +14 -0
  2. package/build/lib/events/index.js +3 -0
  3. package/build/lib/events/nats.js +2 -0
  4. package/build/services/agent/index.js +14 -0
  5. package/build/services/agent/trigger-registry.d.ts +2 -0
  6. package/build/services/agent/trigger-registry.js +37 -8
  7. package/build/start/workers.js +3 -0
  8. package/build/types/events.d.ts +1 -1
  9. package/dashboard/dist/assets/AdminDashboard-ntLz5Pro.js +2 -0
  10. package/dashboard/dist/assets/{AdminDashboard-DISq0Tz8.js.map → AdminDashboard-ntLz5Pro.js.map} +1 -1
  11. package/dashboard/dist/assets/AgentConfigPage-D27vWOI6.js +16 -0
  12. package/dashboard/dist/assets/{AgentConfigPage-DqaJpB3K.js.map → AgentConfigPage-D27vWOI6.js.map} +1 -1
  13. package/dashboard/dist/assets/AgentDetailPage-Cm2KFR4O.js +4 -0
  14. package/dashboard/dist/assets/{AgentDetailPage-BPzPk2GC.js.map → AgentDetailPage-Cm2KFR4O.js.map} +1 -1
  15. package/dashboard/dist/assets/AgentsPage-_ptA-0YO.js +2 -0
  16. package/dashboard/dist/assets/{AgentsPage-CLcxJWjC.js.map → AgentsPage-_ptA-0YO.js.map} +1 -1
  17. package/dashboard/dist/assets/AvailableEscalationsPage-bdPqEzbx.js +2 -0
  18. package/dashboard/dist/assets/{AvailableEscalationsPage-hOcjAAIj.js.map → AvailableEscalationsPage-bdPqEzbx.js.map} +1 -1
  19. package/dashboard/dist/assets/BotPicker-CYfFMpkY.js +2 -0
  20. package/dashboard/dist/assets/{BotPicker-DuAZgHbJ.js.map → BotPicker-CYfFMpkY.js.map} +1 -1
  21. package/dashboard/dist/assets/CapabilitiesPage-M7-ZTFNV.js +2 -0
  22. package/dashboard/dist/assets/{CapabilitiesPage-PRel6TXd.js.map → CapabilitiesPage-M7-ZTFNV.js.map} +1 -1
  23. package/dashboard/dist/assets/CollapsibleSection-DU5KAtQ-.js +2 -0
  24. package/dashboard/dist/assets/{CollapsibleSection-DnoUFQVf.js.map → CollapsibleSection-DU5KAtQ-.js.map} +1 -1
  25. package/dashboard/dist/assets/ConfirmDeleteModal-_hW5Vc05.js +2 -0
  26. package/dashboard/dist/assets/{ConfirmDeleteModal-dOxidrSR.js.map → ConfirmDeleteModal-_hW5Vc05.js.map} +1 -1
  27. package/dashboard/dist/assets/CopyableId-DiWqv41D.js +2 -0
  28. package/dashboard/dist/assets/{CopyableId-D0SQ39nR.js.map → CopyableId-DiWqv41D.js.map} +1 -1
  29. package/dashboard/dist/assets/CredentialsPage-CmbwypSF.js +2 -0
  30. package/dashboard/dist/assets/{CredentialsPage-CqedUU7b.js.map → CredentialsPage-CmbwypSF.js.map} +1 -1
  31. package/dashboard/dist/assets/CronLabel-nycfAefc.js +2 -0
  32. package/dashboard/dist/assets/{CronLabel-CPEjE-mH.js.map → CronLabel-nycfAefc.js.map} +1 -1
  33. package/dashboard/dist/assets/CustomDurationPicker-gNZRBaHg.js +2 -0
  34. package/dashboard/dist/assets/{CustomDurationPicker-BIQWzbv0.js.map → CustomDurationPicker-gNZRBaHg.js.map} +1 -1
  35. package/dashboard/dist/assets/DataTable-DGerT2ZM.js +2 -0
  36. package/dashboard/dist/assets/{DataTable-D9yuBv0w.js.map → DataTable-DGerT2ZM.js.map} +1 -1
  37. package/dashboard/dist/assets/DropZone-vNcqMd05.js +2 -0
  38. package/dashboard/dist/assets/{DropZone-e5EOL5gC.js.map → DropZone-vNcqMd05.js.map} +1 -1
  39. package/dashboard/dist/assets/ElapsedCell-CdvQbtve.js +2 -0
  40. package/dashboard/dist/assets/{ElapsedCell-CzVjr74Y.js.map → ElapsedCell-CdvQbtve.js.map} +1 -1
  41. package/dashboard/dist/assets/EmptyState-DMldv8c5.js +2 -0
  42. package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js.map → EmptyState-DMldv8c5.js.map} +1 -1
  43. package/dashboard/dist/assets/EscalationsOverview-BNENCL_2.js +2 -0
  44. package/dashboard/dist/assets/{EscalationsOverview-Bcrb44xJ.js.map → EscalationsOverview-BNENCL_2.js.map} +1 -1
  45. package/dashboard/dist/assets/EventTable-BqDAyXyc.js +2 -0
  46. package/dashboard/dist/assets/{EventTable-CGfJU7e1.js.map → EventTable-BqDAyXyc.js.map} +1 -1
  47. package/dashboard/dist/assets/EventTopicPill-CnHFBglc.js +2 -0
  48. package/dashboard/dist/assets/{EventTopicPill-xJJnxvlP.js.map → EventTopicPill-CnHFBglc.js.map} +1 -1
  49. package/dashboard/dist/assets/FilterBar-TYiTtUgv.js +2 -0
  50. package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-TYiTtUgv.js.map} +1 -1
  51. package/dashboard/dist/assets/HomePage-fterfLKH.js +2 -0
  52. package/dashboard/dist/assets/{HomePage-BIzUcGW9.js.map → HomePage-fterfLKH.js.map} +1 -1
  53. package/dashboard/dist/assets/ListToolbar-BO5Igi6v.js +2 -0
  54. package/dashboard/dist/assets/{ListToolbar-DNAGFe14.js.map → ListToolbar-BO5Igi6v.js.map} +1 -1
  55. package/dashboard/dist/assets/McpOverview-BQokGg0z.js +2 -0
  56. package/dashboard/dist/assets/{McpOverview-BpYk21es.js.map → McpOverview-BQokGg0z.js.map} +1 -1
  57. package/dashboard/dist/assets/McpQueryDetailPage-0WOp2n_j.js +5 -0
  58. package/dashboard/dist/assets/{McpQueryDetailPage-DlrZiSuL.js.map → McpQueryDetailPage-0WOp2n_j.js.map} +1 -1
  59. package/dashboard/dist/assets/McpQueryPage-DUey_h9J.js +2 -0
  60. package/dashboard/dist/assets/{McpQueryPage-COfPssO7.js.map → McpQueryPage-DUey_h9J.js.map} +1 -1
  61. package/dashboard/dist/assets/McpRunDetailPage-Cv4qyr91.js +2 -0
  62. package/dashboard/dist/assets/{McpRunDetailPage-Cra0nQSw.js.map → McpRunDetailPage-Cv4qyr91.js.map} +1 -1
  63. package/dashboard/dist/assets/McpRunsPage-B3R6KZ61.js +2 -0
  64. package/dashboard/dist/assets/{McpRunsPage-BlgcGN3k.js.map → McpRunsPage-B3R6KZ61.js.map} +1 -1
  65. package/dashboard/dist/assets/Modal-Qe8lW7gQ.js +2 -0
  66. package/dashboard/dist/assets/{Modal-DEODGeqx.js.map → Modal-Qe8lW7gQ.js.map} +1 -1
  67. package/dashboard/dist/assets/OperatorDashboard-dldvzjcg.js +2 -0
  68. package/dashboard/dist/assets/{OperatorDashboard-BbO6cWzb.js.map → OperatorDashboard-dldvzjcg.js.map} +1 -1
  69. package/dashboard/dist/assets/PageHeader-DF4BeEm4.js +2 -0
  70. package/dashboard/dist/assets/{PageHeader-B_gV_jKk.js.map → PageHeader-DF4BeEm4.js.map} +1 -1
  71. package/dashboard/dist/assets/PageHeaderWithStats-BQZw6BgA.js +2 -0
  72. package/dashboard/dist/assets/{PageHeaderWithStats-D0I0nrnx.js.map → PageHeaderWithStats-BQZw6BgA.js.map} +1 -1
  73. package/dashboard/dist/assets/PriorityBadge-DMyB3WLZ.js +2 -0
  74. package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-DMyB3WLZ.js.map} +1 -1
  75. package/dashboard/dist/assets/ProcessDetailPage-Beo-QVL-.js +2 -0
  76. package/dashboard/dist/assets/{ProcessDetailPage-s_iV8ICg.js.map → ProcessDetailPage-Beo-QVL-.js.map} +1 -1
  77. package/dashboard/dist/assets/ProcessesListPage-C_ars8gp.js +2 -0
  78. package/dashboard/dist/assets/{ProcessesListPage-MnLMnxAa.js.map → ProcessesListPage-C_ars8gp.js.map} +1 -1
  79. package/dashboard/dist/assets/RolePill-DrBZ7JJj.js +2 -0
  80. package/dashboard/dist/assets/{RolePill-BOBytzrP.js.map → RolePill-DrBZ7JJj.js.map} +1 -1
  81. package/dashboard/dist/assets/RolesPage-DgSXFFGL.js +2 -0
  82. package/dashboard/dist/assets/{RolesPage-BH7KASM7.js.map → RolesPage-DgSXFFGL.js.map} +1 -1
  83. package/dashboard/dist/assets/RowActions-QcakGbVA.js +2 -0
  84. package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-QcakGbVA.js.map} +1 -1
  85. package/dashboard/dist/assets/RunAsSelector-CYMeZwrM.js +2 -0
  86. package/dashboard/dist/assets/{RunAsSelector-_QbJKhlo.js.map → RunAsSelector-CYMeZwrM.js.map} +1 -1
  87. package/dashboard/dist/assets/ServerName-D5NKD06M.js +2 -0
  88. package/dashboard/dist/assets/{ServerName-uqa4eBqm.js.map → ServerName-D5NKD06M.js.map} +1 -1
  89. package/dashboard/dist/assets/StatCard-PZQmmCHK.js +2 -0
  90. package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-PZQmmCHK.js.map} +1 -1
  91. package/dashboard/dist/assets/StatusBadge-ME2R6a7K.js +2 -0
  92. package/dashboard/dist/assets/{StatusBadge-XQlNFwmH.js.map → StatusBadge-ME2R6a7K.js.map} +1 -1
  93. package/dashboard/dist/assets/StepIndicator-CDDVahOz.js +2 -0
  94. package/dashboard/dist/assets/{StepIndicator-CuUIGxKk.js.map → StepIndicator-CDDVahOz.js.map} +1 -1
  95. package/dashboard/dist/assets/StickyPagination-Ddy93Q5I.js +2 -0
  96. package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-Ddy93Q5I.js.map} +1 -1
  97. package/dashboard/dist/assets/SwimlaneTimeline-CYYA8nd9.js +2 -0
  98. package/dashboard/dist/assets/{SwimlaneTimeline-og79Llvs.js.map → SwimlaneTimeline-CYYA8nd9.js.map} +1 -1
  99. package/dashboard/dist/assets/TagInput-B45Dm3IW.js +2 -0
  100. package/dashboard/dist/assets/{TagInput-D3f11sbM.js.map → TagInput-B45Dm3IW.js.map} +1 -1
  101. package/dashboard/dist/assets/TaskDetailPage-CoZFkJ6d.js +2 -0
  102. package/dashboard/dist/assets/TaskDetailPage-CoZFkJ6d.js.map +1 -0
  103. package/dashboard/dist/assets/TaskQueuePill-BJRUjVDv.js +2 -0
  104. package/dashboard/dist/assets/{TaskQueuePill-Bc45J7X1.js.map → TaskQueuePill-BJRUjVDv.js.map} +1 -1
  105. package/dashboard/dist/assets/TasksListPage-Czu08px3.js +2 -0
  106. package/dashboard/dist/assets/{TasksListPage-BYj3OqUi.js.map → TasksListPage-Czu08px3.js.map} +1 -1
  107. package/dashboard/dist/assets/TimeAgo-CJ56IUy6.js +2 -0
  108. package/dashboard/dist/assets/{TimeAgo-W7TdJpV-.js.map → TimeAgo-CJ56IUy6.js.map} +1 -1
  109. package/dashboard/dist/assets/TimestampCell-QtcYZ9Jx.js +2 -0
  110. package/dashboard/dist/assets/{TimestampCell-Bi2nc9Q_.js.map → TimestampCell-QtcYZ9Jx.js.map} +1 -1
  111. package/dashboard/dist/assets/ToolPill-DpDv3FwI.js +2 -0
  112. package/dashboard/dist/assets/{ToolPill-CuoXcmhv.js.map → ToolPill-DpDv3FwI.js.map} +1 -1
  113. package/dashboard/dist/assets/ToolTestPanel-BzFOwzd_.js +2 -0
  114. package/dashboard/dist/assets/{ToolTestPanel-Dl3C53zb.js.map → ToolTestPanel-BzFOwzd_.js.map} +1 -1
  115. package/dashboard/dist/assets/TopicDetailPage-DwShZbh9.js +9 -0
  116. package/dashboard/dist/assets/{TopicDetailPage-CjaZn4WP.js.map → TopicDetailPage-DwShZbh9.js.map} +1 -1
  117. package/dashboard/dist/assets/TopicsPage-DKXlpZl_.js +2 -0
  118. package/dashboard/dist/assets/{TopicsPage-BfsJEC1p.js.map → TopicsPage-DKXlpZl_.js.map} +1 -1
  119. package/dashboard/dist/assets/UserName-zlR1so37.js +2 -0
  120. package/dashboard/dist/assets/{UserName-b4baWHM_.js.map → UserName-zlR1so37.js.map} +1 -1
  121. package/dashboard/dist/assets/WorkflowExecutionPage-BMNIxeJB.js +2 -0
  122. package/dashboard/dist/assets/{WorkflowExecutionPage-BGmJnXnk.js.map → WorkflowExecutionPage-BMNIxeJB.js.map} +1 -1
  123. package/dashboard/dist/assets/WorkflowPill-B5B3yGlh.js +2 -0
  124. package/dashboard/dist/assets/{WorkflowPill-Bg2-0Hkg.js.map → WorkflowPill-B5B3yGlh.js.map} +1 -1
  125. package/dashboard/dist/assets/WorkflowsDashboard-BlAPZbQZ.js +2 -0
  126. package/dashboard/dist/assets/{WorkflowsDashboard-BzH7jMRu.js.map → WorkflowsDashboard-BlAPZbQZ.js.map} +1 -1
  127. package/dashboard/dist/assets/WorkflowsOverview-NnPi6rwS.js +2 -0
  128. package/dashboard/dist/assets/{WorkflowsOverview-BcUgBvjD.js.map → WorkflowsOverview-NnPi6rwS.js.map} +1 -1
  129. package/dashboard/dist/assets/YamlWorkflowsPage-C4mZum6x.js +2 -0
  130. package/dashboard/dist/assets/{YamlWorkflowsPage-OhpCQJ0l.js.map → YamlWorkflowsPage-C4mZum6x.js.map} +1 -1
  131. package/dashboard/dist/assets/{agents-Ce3HmPz4.js → agents-B5wvILeV.js} +2 -2
  132. package/dashboard/dist/assets/{agents-Ce3HmPz4.js.map → agents-B5wvILeV.js.map} +1 -1
  133. package/dashboard/dist/assets/{bots-B0BomNnf.js → bots-BPlouRDm.js} +2 -2
  134. package/dashboard/dist/assets/{bots-B0BomNnf.js.map → bots-BPlouRDm.js.map} +1 -1
  135. package/dashboard/dist/assets/capabilities-DkvRG09b.js +2 -0
  136. package/dashboard/dist/assets/{capabilities-t-w5N9K9.js.map → capabilities-DkvRG09b.js.map} +1 -1
  137. package/dashboard/dist/assets/{controlplane-BrtAZnJM.js → controlplane-0m_rA-UW.js} +2 -2
  138. package/dashboard/dist/assets/{controlplane-BrtAZnJM.js.map → controlplane-0m_rA-UW.js.map} +1 -1
  139. package/dashboard/dist/assets/escalation-CfIAIUg2.js +2 -0
  140. package/dashboard/dist/assets/{escalation-DilnDxw2.js.map → escalation-CfIAIUg2.js.map} +1 -1
  141. package/dashboard/dist/assets/escalation-columns-CLIdxlbe.js +2 -0
  142. package/dashboard/dist/assets/{escalation-columns-C0slywOY.js.map → escalation-columns-CLIdxlbe.js.map} +1 -1
  143. package/dashboard/dist/assets/helpers-prGqC38M.js +2 -0
  144. package/dashboard/dist/assets/{helpers-BMvPqQr8.js.map → helpers-prGqC38M.js.map} +1 -1
  145. package/dashboard/dist/assets/index-4T7Z_gQ4.js +281 -0
  146. package/dashboard/dist/assets/index-4T7Z_gQ4.js.map +1 -0
  147. package/dashboard/dist/assets/index-BR3SwTNI.js +2 -0
  148. package/dashboard/dist/assets/{index-pIMl0mYp.js.map → index-BR3SwTNI.js.map} +1 -1
  149. package/dashboard/dist/assets/index-BWKIigEk.js +2 -0
  150. package/dashboard/dist/assets/{index-qNuxC8kX.js.map → index-BWKIigEk.js.map} +1 -1
  151. package/dashboard/dist/assets/index-BgVuyWhi.js +15 -0
  152. package/dashboard/dist/assets/{index-D_wqdvG_.js.map → index-BgVuyWhi.js.map} +1 -1
  153. package/dashboard/dist/assets/index-C0sDEKdo.js +2 -0
  154. package/dashboard/dist/assets/{index-30-pN97P.js.map → index-C0sDEKdo.js.map} +1 -1
  155. package/dashboard/dist/assets/index-C2MJzu6J.js +2 -0
  156. package/dashboard/dist/assets/{index-f-0Duls3.js.map → index-C2MJzu6J.js.map} +1 -1
  157. package/dashboard/dist/assets/index-CFoddJDr.js +6 -0
  158. package/dashboard/dist/assets/{index-Ck2QdJXT.js.map → index-CFoddJDr.js.map} +1 -1
  159. package/dashboard/dist/assets/index-CrMxD5Ib.js +6 -0
  160. package/dashboard/dist/assets/{index-DPW_i3fH.js.map → index-CrMxD5Ib.js.map} +1 -1
  161. package/dashboard/dist/assets/index-CuY5hPYB.js +2 -0
  162. package/dashboard/dist/assets/{index-DnsVYMMg.js.map → index-CuY5hPYB.js.map} +1 -1
  163. package/dashboard/dist/assets/index-CwkJBn87.js +2 -0
  164. package/dashboard/dist/assets/{index-Bl9wzQ8Q.js.map → index-CwkJBn87.js.map} +1 -1
  165. package/dashboard/dist/assets/index-DeL84Cag.js +2 -0
  166. package/dashboard/dist/assets/{index-DNmlrCAp.js.map → index-DeL84Cag.js.map} +1 -1
  167. package/dashboard/dist/assets/index-DqeLbz6j.js +2 -0
  168. package/dashboard/dist/assets/{index-BxOuF0hm.js.map → index-DqeLbz6j.js.map} +1 -1
  169. package/dashboard/dist/assets/index-P9huxx3-.js +2 -0
  170. package/dashboard/dist/assets/{index-H5TlloTk.js.map → index-P9huxx3-.js.map} +1 -1
  171. package/dashboard/dist/assets/{knowledge-D01NdF5h.js → knowledge-CUZxyRCO.js} +2 -2
  172. package/dashboard/dist/assets/{knowledge-D01NdF5h.js.map → knowledge-CUZxyRCO.js.map} +1 -1
  173. package/dashboard/dist/assets/{mcp-CjXjDZI0.js → mcp-B5VQPoF3.js} +2 -2
  174. package/dashboard/dist/assets/{mcp-CjXjDZI0.js.map → mcp-B5VQPoF3.js.map} +1 -1
  175. package/dashboard/dist/assets/{mcp-query-LlKQcWLJ.js → mcp-query-Ba5Zj3yg.js} +2 -2
  176. package/dashboard/dist/assets/{mcp-query-LlKQcWLJ.js.map → mcp-query-Ba5Zj3yg.js.map} +1 -1
  177. package/dashboard/dist/assets/{mcp-runs-C0C54hU6.js → mcp-runs-CAiEr5Fc.js} +2 -2
  178. package/dashboard/dist/assets/{mcp-runs-C0C54hU6.js.map → mcp-runs-CAiEr5Fc.js.map} +1 -1
  179. package/dashboard/dist/assets/namespaces-sVr5scma.js +2 -0
  180. package/dashboard/dist/assets/{namespaces-6qWDXXJV.js.map → namespaces-sVr5scma.js.map} +1 -1
  181. package/dashboard/dist/assets/{roles-Dtj0uabn.js → roles-E_bA4e0f.js} +2 -2
  182. package/dashboard/dist/assets/{roles-Dtj0uabn.js.map → roles-E_bA4e0f.js.map} +1 -1
  183. package/dashboard/dist/assets/{tasks-BevFBjZq.js → tasks-CL6Gv8jB.js} +2 -2
  184. package/dashboard/dist/assets/{tasks-BevFBjZq.js.map → tasks-CL6Gv8jB.js.map} +1 -1
  185. package/dashboard/dist/assets/{topics-BMG5tx2g.js → topics-DbtPHERP.js} +2 -2
  186. package/dashboard/dist/assets/{topics-BMG5tx2g.js.map → topics-DbtPHERP.js.map} +1 -1
  187. package/dashboard/dist/assets/{useCollapsedSections-BU5HULGs.js → useCollapsedSections-CGNA5oKV.js} +2 -2
  188. package/dashboard/dist/assets/{useCollapsedSections-BU5HULGs.js.map → useCollapsedSections-CGNA5oKV.js.map} +1 -1
  189. package/dashboard/dist/assets/{useEventHooks-CPyvFlVR.js → useEventHooks-C6c618cj.js} +2 -2
  190. package/dashboard/dist/assets/{useEventHooks-CPyvFlVR.js.map → useEventHooks-C6c618cj.js.map} +1 -1
  191. package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js → useExpandedRows-Cg9iq6Vy.js} +2 -2
  192. package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js.map → useExpandedRows-Cg9iq6Vy.js.map} +1 -1
  193. package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js → useFilterParams-CGRYFw_A.js} +2 -2
  194. package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js.map → useFilterParams-CGRYFw_A.js.map} +1 -1
  195. package/dashboard/dist/assets/{useYamlActivityEvents-Bll8NPNQ.js → useYamlActivityEvents-eK7kIUdh.js} +2 -2
  196. package/dashboard/dist/assets/{useYamlActivityEvents-Bll8NPNQ.js.map → useYamlActivityEvents-eK7kIUdh.js.map} +1 -1
  197. package/dashboard/dist/assets/{users-XZ349b0r.js → users-CCHSIAxt.js} +2 -2
  198. package/dashboard/dist/assets/{users-XZ349b0r.js.map → users-CCHSIAxt.js.map} +1 -1
  199. package/dashboard/dist/assets/{vendor-icons-B_Yla7iD.js → vendor-icons-D8-ZINAH.js} +2 -2
  200. package/dashboard/dist/assets/{vendor-icons-B_Yla7iD.js.map → vendor-icons-D8-ZINAH.js.map} +1 -1
  201. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
  202. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
  203. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
  204. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
  205. package/dashboard/dist/assets/{workflows-Do-Eiv8f.js → workflows-BNbocg_9.js} +2 -2
  206. package/dashboard/dist/assets/{workflows-Do-Eiv8f.js.map → workflows-BNbocg_9.js.map} +1 -1
  207. package/dashboard/dist/assets/{yaml-workflows-DolGRQ5f.js → yaml-workflows-Cu1FUwrc.js} +2 -2
  208. package/dashboard/dist/assets/{yaml-workflows-DolGRQ5f.js.map → yaml-workflows-Cu1FUwrc.js.map} +1 -1
  209. package/dashboard/dist/index.html +4 -4
  210. package/package.json +1 -1
  211. package/dashboard/dist/assets/AdminDashboard-DISq0Tz8.js +0 -2
  212. package/dashboard/dist/assets/AgentConfigPage-DqaJpB3K.js +0 -16
  213. package/dashboard/dist/assets/AgentDetailPage-BPzPk2GC.js +0 -4
  214. package/dashboard/dist/assets/AgentsPage-CLcxJWjC.js +0 -2
  215. package/dashboard/dist/assets/AvailableEscalationsPage-hOcjAAIj.js +0 -2
  216. package/dashboard/dist/assets/BotPicker-DuAZgHbJ.js +0 -2
  217. package/dashboard/dist/assets/CapabilitiesPage-PRel6TXd.js +0 -2
  218. package/dashboard/dist/assets/CollapsibleSection-DnoUFQVf.js +0 -2
  219. package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +0 -2
  220. package/dashboard/dist/assets/CopyableId-D0SQ39nR.js +0 -2
  221. package/dashboard/dist/assets/CredentialsPage-CqedUU7b.js +0 -2
  222. package/dashboard/dist/assets/CronLabel-CPEjE-mH.js +0 -2
  223. package/dashboard/dist/assets/CustomDurationPicker-BIQWzbv0.js +0 -2
  224. package/dashboard/dist/assets/DataTable-D9yuBv0w.js +0 -2
  225. package/dashboard/dist/assets/DropZone-e5EOL5gC.js +0 -2
  226. package/dashboard/dist/assets/ElapsedCell-CzVjr74Y.js +0 -2
  227. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +0 -2
  228. package/dashboard/dist/assets/EscalationsOverview-Bcrb44xJ.js +0 -2
  229. package/dashboard/dist/assets/EventTable-CGfJU7e1.js +0 -2
  230. package/dashboard/dist/assets/EventTopicPill-xJJnxvlP.js +0 -2
  231. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
  232. package/dashboard/dist/assets/HomePage-BIzUcGW9.js +0 -2
  233. package/dashboard/dist/assets/ListToolbar-DNAGFe14.js +0 -2
  234. package/dashboard/dist/assets/McpOverview-BpYk21es.js +0 -2
  235. package/dashboard/dist/assets/McpQueryDetailPage-DlrZiSuL.js +0 -5
  236. package/dashboard/dist/assets/McpQueryPage-COfPssO7.js +0 -2
  237. package/dashboard/dist/assets/McpRunDetailPage-Cra0nQSw.js +0 -2
  238. package/dashboard/dist/assets/McpRunsPage-BlgcGN3k.js +0 -2
  239. package/dashboard/dist/assets/Modal-DEODGeqx.js +0 -2
  240. package/dashboard/dist/assets/OperatorDashboard-BbO6cWzb.js +0 -2
  241. package/dashboard/dist/assets/PageHeader-B_gV_jKk.js +0 -2
  242. package/dashboard/dist/assets/PageHeaderWithStats-D0I0nrnx.js +0 -2
  243. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
  244. package/dashboard/dist/assets/ProcessDetailPage-s_iV8ICg.js +0 -2
  245. package/dashboard/dist/assets/ProcessesListPage-MnLMnxAa.js +0 -2
  246. package/dashboard/dist/assets/RolePill-BOBytzrP.js +0 -2
  247. package/dashboard/dist/assets/RolesPage-BH7KASM7.js +0 -2
  248. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
  249. package/dashboard/dist/assets/RunAsSelector-_QbJKhlo.js +0 -2
  250. package/dashboard/dist/assets/ServerName-uqa4eBqm.js +0 -2
  251. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
  252. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +0 -2
  253. package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +0 -2
  254. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
  255. package/dashboard/dist/assets/SwimlaneTimeline-og79Llvs.js +0 -2
  256. package/dashboard/dist/assets/TagInput-D3f11sbM.js +0 -2
  257. package/dashboard/dist/assets/TaskDetailPage-DPV4ySd9.js +0 -2
  258. package/dashboard/dist/assets/TaskDetailPage-DPV4ySd9.js.map +0 -1
  259. package/dashboard/dist/assets/TaskQueuePill-Bc45J7X1.js +0 -2
  260. package/dashboard/dist/assets/TasksListPage-BYj3OqUi.js +0 -2
  261. package/dashboard/dist/assets/TimeAgo-W7TdJpV-.js +0 -2
  262. package/dashboard/dist/assets/TimestampCell-Bi2nc9Q_.js +0 -2
  263. package/dashboard/dist/assets/ToolPill-CuoXcmhv.js +0 -2
  264. package/dashboard/dist/assets/ToolTestPanel-Dl3C53zb.js +0 -2
  265. package/dashboard/dist/assets/TopicDetailPage-CjaZn4WP.js +0 -9
  266. package/dashboard/dist/assets/TopicsPage-BfsJEC1p.js +0 -2
  267. package/dashboard/dist/assets/UserName-b4baWHM_.js +0 -2
  268. package/dashboard/dist/assets/WorkflowExecutionPage-BGmJnXnk.js +0 -2
  269. package/dashboard/dist/assets/WorkflowPill-Bg2-0Hkg.js +0 -2
  270. package/dashboard/dist/assets/WorkflowsDashboard-BzH7jMRu.js +0 -2
  271. package/dashboard/dist/assets/WorkflowsOverview-BcUgBvjD.js +0 -2
  272. package/dashboard/dist/assets/YamlWorkflowsPage-OhpCQJ0l.js +0 -2
  273. package/dashboard/dist/assets/capabilities-t-w5N9K9.js +0 -2
  274. package/dashboard/dist/assets/escalation-DilnDxw2.js +0 -2
  275. package/dashboard/dist/assets/escalation-columns-C0slywOY.js +0 -2
  276. package/dashboard/dist/assets/helpers-BMvPqQr8.js +0 -2
  277. package/dashboard/dist/assets/index-30-pN97P.js +0 -2
  278. package/dashboard/dist/assets/index-Bl9wzQ8Q.js +0 -2
  279. package/dashboard/dist/assets/index-BxOuF0hm.js +0 -2
  280. package/dashboard/dist/assets/index-Ck2QdJXT.js +0 -6
  281. package/dashboard/dist/assets/index-DNmlrCAp.js +0 -2
  282. package/dashboard/dist/assets/index-DPW_i3fH.js +0 -6
  283. package/dashboard/dist/assets/index-DZX-E_3q.js +0 -63
  284. package/dashboard/dist/assets/index-DZX-E_3q.js.map +0 -1
  285. package/dashboard/dist/assets/index-D_wqdvG_.js +0 -15
  286. package/dashboard/dist/assets/index-DnsVYMMg.js +0 -2
  287. package/dashboard/dist/assets/index-H5TlloTk.js +0 -2
  288. package/dashboard/dist/assets/index-f-0Duls3.js +0 -2
  289. package/dashboard/dist/assets/index-pIMl0mYp.js +0 -2
  290. package/dashboard/dist/assets/index-qNuxC8kX.js +0 -2
  291. package/dashboard/dist/assets/namespaces-6qWDXXJV.js +0 -2
  292. package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
  293. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
  294. package/dashboard/dist/assets/vendor-react-CX88sFS5.js +0 -22
  295. package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{b as F,j as e}from"./index-4T7Z_gQ4.js";import{u as I,c as O,a as n,b as re}from"./vendor-query-DLp59M9_.js";import{f as le,a as te}from"./vendor-react-Co3Y8ikm.js";import{P as ne}from"./PageHeader-DF4BeEm4.js";import{F as oe,a as me}from"./FilterBar-TYiTtUgv.js";import{L as ce}from"./ListToolbar-BO5Igi6v.js";import{E as ue}from"./EmptyState-DMldv8c5.js";import{D as de}from"./DropZone-vNcqMd05.js";import{F as pe,m as H,K as X,O as be,k as fe,as as he,at as Ne,au as xe,av as ge,aw as ve,X as we,ax as Fe,a3 as Pe,ay as Ve,n as Ee,az as G,aA as je,l as De}from"./vendor-icons-D8-ZINAH.js";import{T as Q}from"./TimeAgo-CJ56IUy6.js";function ye(s,r=100,l){const a=new URLSearchParams;s&&a.set("prefix",s),a.set("pageSize",String(r)),l&&a.set("continuationToken",l);const o=a.toString();return I({queryKey:["fileBrowse",s,r,l],queryFn:()=>F(`/file-browser/browse?${o}`)})}function ke(s){return I({queryKey:["fileMetadata",s],queryFn:()=>F(`/file-browser/metadata/${s}`),enabled:!!s})}function Ce(){return O({mutationFn:s=>F("/file-browser/signed-url",{method:"POST",body:JSON.stringify(s)})})}function Se(){return O({mutationFn:s=>F(`/file-browser/delete/${s}`,{method:"DELETE"})})}function Le(){return O({mutationFn:async({path:s,file:r})=>{const l=await r.arrayBuffer();return F(`/file-browser/upload?path=${encodeURIComponent(s)}`,{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:l})}})}function Te(s){return I({queryKey:["filePreviewUrl",s],queryFn:async()=>(await F("/file-browser/signed-url",{method:"POST",body:JSON.stringify({path:s,expiresIn:3600})})).url,enabled:!!s,staleTime:3e3*1e3})}function $e({prefix:s,onNavigate:r}){const l=s?s.replace(/\/+$/,"").split("/").filter(Boolean):[];return e.jsxDEV("nav",{className:"flex items-center gap-1 text-sm mb-6 min-h-[28px]",children:[e.jsxDEV("button",{onClick:()=>r(""),className:`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${l.length===0?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:[e.jsxDEV(pe,{className:"w-4 h-4 text-accent/75",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:21,columnNumber:9},this),e.jsxDEV("span",{children:"Root"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:22,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:13,columnNumber:7},this),l.map((a,o)=>{const t=o===l.length-1,u=l.slice(0,o+1).join("/")+"/";return e.jsxDEV("span",{className:"flex items-center gap-1",children:[e.jsxDEV(H,{className:"w-3.5 h-3.5 text-text-tertiary"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:30,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>r(u),className:`px-1.5 py-0.5 rounded transition-colors ${t?"text-text-primary font-medium":"text-text-secondary hover:text-text-primary hover:bg-surface-hover"}`,children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:31,columnNumber:13},this)]},u,!0,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:29,columnNumber:11},this)})]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileBreadcrumbs.tsx",lineNumber:12,columnNumber:5},this)}function Ue(s){return s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:s<1024*1024*1024?`${(s/(1024*1024)).toFixed(1)} MB`:`${(s/(1024*1024*1024)).toFixed(1)} GB`}function E(s){return s.split("/").pop()||s}function R({label:s,value:r,mono:l,children:a}){return e.jsxDEV("div",{children:[e.jsxDEV("dt",{className:"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:31,columnNumber:7},this),e.jsxDEV("dd",{className:`text-sm text-text-secondary ${l?"font-mono text-xs break-all":""}`,children:a||r},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:32,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:30,columnNumber:5},this)}function Be({url:s}){const[r,l]=n.useState(null),[a,o]=n.useState(!1);return r===null&&!a&&fetch(s).then(t=>{if(!t.ok)throw new Error;return t.text()}).then(t=>l(t.slice(0,1e5))).catch(()=>o(!0)),a?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Could not load preview"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:53,columnNumber:21},this):r===null?e.jsxDEV("div",{className:"animate-pulse h-32 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:55,columnNumber:12},this):e.jsxDEV("pre",{className:"font-mono text-xs text-text-secondary bg-surface-sunken rounded-md p-3 overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap break-words",children:r},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:59,columnNumber:5},this)}function Re({metadata:s}){const[r,l]=n.useState(null);async function a(o,t){await navigator.clipboard.writeText(o),l(t),setTimeout(()=>l(null),2e3)}return e.jsxDEV("div",{className:"space-y-3",children:[e.jsxDEV("div",{children:[e.jsxDEV("dt",{className:"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5",children:"Path"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:79,columnNumber:9},this),e.jsxDEV("dd",{onClick:()=>a(s.path,"path"),className:"group flex items-center gap-1.5 text-xs font-mono text-text-secondary break-all cursor-pointer hover:text-text-primary transition-colors",title:"Click to copy",children:[e.jsxDEV("span",{className:"flex-1",children:s.path},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:85,columnNumber:11},this),r==="path"?e.jsxDEV(X,{className:"w-3.5 h-3.5 text-status-success shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:87,columnNumber:15},this):e.jsxDEV(be,{className:"w-3.5 h-3.5 opacity-0 group-hover:opacity-100 text-text-tertiary shrink-0 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:88,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:80,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:78,columnNumber:7},this),e.jsxDEV(R,{label:"Type",value:s.content_type},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:91,columnNumber:7},this),e.jsxDEV(R,{label:"Size",value:Ue(s.size)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:92,columnNumber:7},this),e.jsxDEV(R,{label:"Modified",children:e.jsxDEV(Q,{date:s.modified_at},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:94,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:93,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewContent.tsx",lineNumber:77,columnNumber:5},this)}async function Ie(s,r){const a=await(await fetch(s)).blob(),o=URL.createObjectURL(a),t=document.createElement("a");t.href=o,t.download=r,t.style.display="none",document.body.appendChild(t),t.click(),document.body.removeChild(t),URL.revokeObjectURL(o)}function Oe(s){return s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:s<1024*1024*1024?`${(s/(1024*1024)).toFixed(1)} MB`:`${(s/(1024*1024*1024)).toFixed(1)} GB`}function _e(s){var l;const r=((l=s.split(".").pop())==null?void 0:l.toLowerCase())||"";return["png","jpg","jpeg","gif","svg","webp"].includes(r)?e.jsxDEV(he,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:22,columnNumber:12},this):["json"].includes(r)?e.jsxDEV(Ne,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:25,columnNumber:12},this):["csv","xlsx","xls"].includes(r)?e.jsxDEV(xe,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:28,columnNumber:12},this):["txt","md","html","xml","yaml","yml","css","js","ts"].includes(r)?e.jsxDEV(ge,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:31,columnNumber:12},this):e.jsxDEV(ve,{className:"w-4 h-4 text-accent/60",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:33,columnNumber:10},this)}function ze(s){var l;const r=((l=s.split(".").pop())==null?void 0:l.toLowerCase())||"";return["png","jpg","jpeg","gif","svg","webp"].includes(r)}function Me(s){const r=s.replace(/\/+$/,"");return r.split("/").pop()||r}function qe(s){return s.split("/").pop()||s}function We({directories:s,files:r,onNavigate:l,onSelect:a,selectedFile:o}){return e.jsxDEV("table",{className:"w-full mt-2",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"text-left text-[10px] uppercase tracking-wider text-text-tertiary",children:[e.jsxDEV("th",{className:"pb-2 pl-2 font-medium",children:"Name"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:63,columnNumber:11},this),e.jsxDEV("th",{className:"pb-2 font-medium w-24 text-right",children:"Size"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:64,columnNumber:11},this),e.jsxDEV("th",{className:"pb-2 pr-2 font-medium w-40 text-right",children:"Modified"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:65,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:62,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:61,columnNumber:7},this),e.jsxDEV("tbody",{children:[s.map(t=>e.jsxDEV("tr",{onClick:()=>l(t),className:"row-hover cursor-pointer group",children:[e.jsxDEV("td",{className:"py-2 pl-2",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[e.jsxDEV(fe,{className:"w-4 h-4 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:77,columnNumber:17},this),e.jsxDEV("span",{className:"text-sm text-text-primary group-hover:text-accent transition-colors",children:Me(t)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:78,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:76,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:75,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:83,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:84,columnNumber:13},this)]},t,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:70,columnNumber:11},this)),r.map(t=>e.jsxDEV("tr",{onClick:()=>a(t.path),className:`row-hover cursor-pointer group ${o===t.path?"bg-surface-hover":""}`,children:[e.jsxDEV("td",{className:"py-2 pl-2",children:e.jsxDEV("span",{className:"flex items-center gap-2.5",children:[_e(t.path),e.jsxDEV("span",{className:"text-sm text-text-primary truncate",children:qe(t.path)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:98,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:96,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:95,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 text-right text-xs text-text-secondary tabular-nums",children:Oe(t.size)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:103,columnNumber:13},this),e.jsxDEV("td",{className:"py-2 pr-2 text-right text-xs text-text-secondary",children:e.jsxDEV(Q,{date:t.modified_at},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:107,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:106,columnNumber:13},this)]},t.path,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:88,columnNumber:11},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:68,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FileListViews.tsx",lineNumber:60,columnNumber:5},this)}const Ae=[{label:"1 hour",value:3600},{label:"6 hours",value:21600},{label:"24 hours",value:86400},{label:"7 days",value:604800},{label:"30 days",value:2592e3}];function Ke({filePath:s,onClose:r,onDeleted:l}){var x,V;const{data:a,isLoading:o}=ke(s),t=Ce(),u=Se(),[P,h]=n.useState(!1),[g,j]=n.useState(!1),[v,f]=n.useState(!1),{data:d}=Te(s),N=((x=a==null?void 0:a.content_type)==null?void 0:x.startsWith("image/"))||ze(s),D=/\.(ts|tsx|js|jsx|json|md|yaml|yml|toml|xml|csv|sql|sh|py|rb|go|rs|java|c|cpp|h|css|scss|html|txt|log|env|ini|cfg|conf)$/i,p=((V=a==null?void 0:a.content_type)==null?void 0:V.startsWith("text/"))||(a==null?void 0:a.content_type)==="application/json"||(a==null?void 0:a.content_type)==="application/xml"||(a==null?void 0:a.content_type)==="application/octet-stream"&&D.test(s),S=(a==null?void 0:a.content_type)==="application/pdf";async function L(){try{const m=await t.mutateAsync({path:s,expiresIn:3600}),c=m.url.startsWith("http")?m.url:`${window.location.origin}${m.url}`;Ie(c,E(s))}catch{}}async function y(m){h(!1);try{const c=await t.mutateAsync({path:s,expiresIn:m}),w=c.url.startsWith("http")?c.url:`${window.location.origin}${c.url}`;await navigator.clipboard.writeText(w),j(!0),setTimeout(()=>j(!1),2e3)}catch{}}return e.jsxDEV(e.Fragment,{children:e.jsxDEV("div",{className:"w-[380px] shrink-0 border-l border-surface-border bg-surface overflow-y-auto",children:[e.jsxDEV("div",{className:"sticky top-0 bg-surface z-10 px-5 pt-5 pb-3 border-b border-surface-border",children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-3",children:[e.jsxDEV("h3",{className:"text-sm font-medium text-text-primary truncate pr-2",title:E(s),children:E(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:81,columnNumber:13},this),e.jsxDEV("button",{onClick:r,className:"text-text-tertiary hover:text-text-primary shrink-0",children:e.jsxDEV(we,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:85,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:84,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:80,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-1 flex-wrap",children:[e.jsxDEV("button",{onClick:L,className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Download",children:[e.jsxDEV(Fe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:96,columnNumber:15},this),e.jsxDEV("span",{children:"Download"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:97,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:91,columnNumber:13},this),e.jsxDEV("a",{href:d,target:"_blank",rel:"noopener noreferrer",className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Open in new tab",children:[e.jsxDEV(Pe,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:107,columnNumber:15},this),e.jsxDEV("span",{children:"Open"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:108,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:100,columnNumber:13},this),e.jsxDEV("div",{className:"relative",children:[e.jsxDEV("button",{onClick:()=>h(m=>!m),className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs",title:"Share with signed URL",children:[g?e.jsxDEV(X,{className:"w-3.5 h-3.5 text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:117,columnNumber:27},this):e.jsxDEV(Ve,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:117,columnNumber:83},this),e.jsxDEV("span",{children:g?"Copied":"Share"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:118,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:112,columnNumber:15},this),P&&e.jsxDEV("div",{className:"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg py-1 z-20 min-w-[120px]",children:Ae.map(m=>e.jsxDEV("button",{onClick:()=>y(m.value),className:"w-full text-left px-3 py-1.5 text-xs text-text-secondary hover:bg-surface-hover hover:text-text-primary transition-colors",children:m.label},m.value,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:123,columnNumber:21},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:121,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:111,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>f(!0),className:"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs text-status-error/70 hover:text-status-error",title:"Delete file",children:[e.jsxDEV(Ee,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:140,columnNumber:15},this),e.jsxDEV("span",{children:"Delete"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:141,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:135,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:90,columnNumber:11},this),v&&e.jsxDEV("div",{className:"mt-3 p-3 bg-status-error/5 border border-status-error/20 rounded-md",children:[e.jsxDEV("p",{className:"text-xs text-text-primary mb-2",children:["Permanently delete ",e.jsxDEV("span",{className:"font-medium",children:E(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:149,columnNumber:36},this),"? This cannot be undone."]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:148,columnNumber:15},this),e.jsxDEV("div",{className:"flex gap-2",children:[e.jsxDEV("button",{onClick:()=>f(!1),className:"btn-secondary text-xs",disabled:u.isPending,children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:152,columnNumber:17},this),e.jsxDEV("button",{onClick:async()=>{try{await u.mutateAsync(s),f(!1),l==null||l()}catch{}},className:"btn-primary text-xs !bg-status-error hover:!bg-status-error/90",disabled:u.isPending,children:u.isPending?"Deleting...":"Delete"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:159,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:151,columnNumber:15},this),u.isError&&e.jsxDEV("p",{className:"text-xs text-status-error mt-2",children:u.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:176,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:147,columnNumber:13},this),t.isError&&e.jsxDEV("p",{className:"text-xs text-status-error mt-2",children:t.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:182,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:79,columnNumber:9},this),e.jsxDEV("div",{className:"p-5",children:o?e.jsxDEV("div",{className:"animate-pulse space-y-3",children:[e.jsxDEV("div",{className:"h-48 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:190,columnNumber:15},this),e.jsxDEV("div",{className:"h-4 bg-surface-sunken rounded w-2/3"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:191,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:189,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[N&&d&&e.jsxDEV("div",{className:"mb-5 rounded-md border border-surface-border bg-surface-sunken overflow-hidden",style:{maxHeight:"400px"},children:e.jsxDEV("img",{src:d,alt:E(s),className:"w-full object-cover object-top",style:{maxHeight:"400px"}},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:200,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:196,columnNumber:17},this),p&&d&&e.jsxDEV("div",{className:"mb-5",children:e.jsxDEV(Be,{url:d},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:211,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:210,columnNumber:17},this),S&&d&&e.jsxDEV("div",{className:"mb-5 p-4 bg-surface-sunken rounded-md text-center",children:e.jsxDEV("a",{href:d,target:"_blank",rel:"noopener noreferrer",className:"text-accent hover:text-accent-hover text-sm font-medium",children:"Open PDF in new tab"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:217,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:216,columnNumber:17},this),a&&e.jsxDEV(Re,{metadata:a},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:229,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:194,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:187,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:77,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilePreviewPanel.tsx",lineNumber:73,columnNumber:5},this)}const Ge=[25,50,100,200];function rs(){const[s,r]=le(),l=s.get("prefix")||"",[a,o]=n.useState(""),[t,u]=n.useState(""),[P,h]=n.useState(null),[g,j]=n.useState(100),[v,f]=n.useState([]),[d,N]=n.useState();n.useEffect(()=>{const i=setTimeout(()=>{u(a),N(void 0),f([])},300);return()=>clearTimeout(i)},[a]);const D=t?`${l}${t}`:l,{data:p,isLoading:S,isFetching:L,refetch:y}=ye(D,g,d),x=Le(),V=re(),m=n.useRef(null),[c,w]=n.useState(null),[k,_]=n.useState(""),z=n.useCallback(i=>{w(i),_(l)},[l]),[M,q]=n.useState(""),J=n.useCallback(()=>{if(!c)return;q("");let i=c.length;for(const b of c){const A=`${k}${b.name}`;x.mutate({path:A,file:b},{onSuccess:()=>{i--,V.invalidateQueries({queryKey:["fileBrowse"]}),i<=0&&w(null)},onError:K=>{i--,q(K.message),console.error("[Upload] failed:",A,K)}})}},[c,k,x,V]),T=(p==null?void 0:p.directories)??[],C=(p==null?void 0:p.files)??[],$=p==null?void 0:p.nextToken,W=n.useCallback(i=>{o(""),u(""),h(null),N(void 0),f([]),r(i?{prefix:i}:{})},[r]);function Z(){$&&(f(i=>[...i,d||""]),N($))}function Y(){if(v.length===0)return;const i=[...v],b=i.pop();f(i),N(b||void 0)}function ee(i){j(i),N(void 0),f([])}const se=T.length===0&&C.length===0,ae=v.length+1,U=!!$,B=v.length>0,ie=`/file-browser/browse?prefix=${encodeURIComponent(D)}&pageSize=${g}${d?`&continuationToken=${encodeURIComponent(d)}`:""}`;return e.jsxDEV(de,{onDrop:z,label:"Drop files to upload",children:[e.jsxDEV("div",{className:"flex gap-0",children:[e.jsxDEV("input",{ref:m,type:"file",multiple:!0,className:"hidden",onChange:i=>{const b=Array.from(i.target.files||[]);b.length&&z(b),i.target.value=""}},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:131,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 min-w-0 overflow-hidden",children:[e.jsxDEV(ne,{title:"Files",docsHash:"#docs:dashboard.md:files",actions:e.jsxDEV("button",{onClick:()=>{var i;return(i=m.current)==null?void 0:i.click()},disabled:x.isPending,className:"btn-primary text-xs inline-flex items-center gap-1.5",children:[e.jsxDEV(G,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:154,columnNumber:15},this),x.isPending?"Uploading...":"Upload"]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:149,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:145,columnNumber:9},this),e.jsxDEV($e,{prefix:l,onNavigate:W},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:160,columnNumber:9},this),e.jsxDEV(oe,{actions:e.jsxDEV(ce,{onRefresh:()=>y(),isFetching:L,apiPath:ie},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:163,columnNumber:11},this),children:e.jsxDEV(me,{label:"Search",value:a,onChange:o,placeholder:"Filter by prefix..."},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:169,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:162,columnNumber:9},this),S?e.jsxDEV("div",{className:"animate-pulse space-y-2 mt-4",children:Array.from({length:6}).map((i,b)=>e.jsxDEV("div",{className:"h-10 bg-surface-sunken rounded"},b,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:180,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:178,columnNumber:11},this):se?e.jsxDEV("div",{className:"cursor-pointer",onClick:()=>{var i;return(i=m.current)==null?void 0:i.click()},children:e.jsxDEV(ue,{icon:je,title:a?"No matching files":"No files yet",description:a?void 0:"Drop files here or click to upload"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:185,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:184,columnNumber:11},this):e.jsxDEV(We,{directories:T,files:C,onNavigate:W,onSelect:h,selectedFile:P},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:192,columnNumber:11},this),(B||U||C.length>0)&&e.jsxDEV("div",{className:"flex items-center justify-between pt-4 pb-2",children:[e.jsxDEV("div",{className:"flex items-center gap-4",children:[e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:["Page ",ae," · ",C.length+T.length," items"]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:205,columnNumber:15},this),e.jsxDEV("select",{value:g,onChange:i=>ee(parseInt(i.target.value)),className:"select text-xs py-1",children:Ge.map(i=>e.jsxDEV("option",{value:i,children:[i," / page"]},i,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:214,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:208,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:204,columnNumber:13},this),(B||U)&&e.jsxDEV("div",{className:"flex items-center gap-1",children:[e.jsxDEV("button",{onClick:Y,disabled:!B,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1",children:[e.jsxDEV(De,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:225,columnNumber:19},this),"Previous"]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:220,columnNumber:17},this),e.jsxDEV("button",{onClick:Z,disabled:!U,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1",children:["Next",e.jsxDEV(H,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:234,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:228,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:219,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:203,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:144,columnNumber:7},this),P&&e.jsxDEV(Ke,{filePath:P,onClose:()=>h(null),onDeleted:()=>{h(null),y()}},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:244,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:129,columnNumber:5},this),c&&te.createPortal(e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"fixed inset-0 z-40 bg-black/30",onClick:()=>w(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:254,columnNumber:9},this),e.jsxDEV("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-4",children:e.jsxDEV("div",{className:"bg-surface-raised border border-surface-border rounded-lg shadow-lg w-full max-w-sm",children:[e.jsxDEV("div",{className:"px-5 py-4 border-b border-surface-border",children:e.jsxDEV("h3",{className:"text-sm font-medium text-text-primary",children:["Upload ",c.length," file",c.length>1?"s":""]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:258,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:257,columnNumber:13},this),e.jsxDEV("div",{className:"px-5 py-4 space-y-3",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Destination folder"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:262,columnNumber:17},this),e.jsxDEV("input",{type:"text",value:k,onChange:i=>_(i.target.value),placeholder:"e.g., images/ or leave empty for root",className:"input text-xs w-full font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:263,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:261,columnNumber:15},this),e.jsxDEV("div",{className:"text-[10px] text-text-quaternary space-y-0.5",children:c.map((i,b)=>e.jsxDEV("p",{className:"truncate",children:[k,i.name," ",e.jsxDEV("span",{className:"text-text-tertiary",children:["(",(i.size/1024).toFixed(1)," KB)"]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:273,columnNumber:74},this)]},b,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:273,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:271,columnNumber:15},this),M&&e.jsxDEV("p",{className:"text-xs text-status-error",children:M},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:276,columnNumber:31},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:260,columnNumber:13},this),e.jsxDEV("div",{className:"flex justify-end gap-2 px-5 py-3 border-t border-surface-border",children:[e.jsxDEV("button",{onClick:()=>w(null),className:"btn-ghost text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:279,columnNumber:15},this),e.jsxDEV("button",{onClick:J,className:"btn-primary text-xs",children:[e.jsxDEV(G,{className:"w-3.5 h-3.5 mr-1.5 inline"},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:281,columnNumber:17},this),"Upload"]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:280,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:278,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:256,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:255,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:253,columnNumber:7},this),document.body)]},void 0,!0,{fileName:"/app/dashboard/src/pages/files/FilesPage.tsx",lineNumber:128,columnNumber:5},this)}export{rs as FilesPage};
2
+ //# sourceMappingURL=index-CuY5hPYB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-DnsVYMMg.js","sources":["../../src/api/files.ts","../../src/pages/files/FileBreadcrumbs.tsx","../../src/pages/files/FilePreviewContent.tsx","../../src/pages/files/FileListViews.tsx","../../src/pages/files/FilePreviewPanel.tsx","../../src/pages/files/FilesPage.tsx"],"sourcesContent":["import { useQuery, useMutation } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface FileEntry {\n path: string;\n size: number;\n modified_at: string;\n}\n\nexport interface BrowseResponse {\n files: FileEntry[];\n directories: string[];\n nextToken?: string;\n}\n\nexport interface FileMetadata {\n path: string;\n size: number;\n modified_at: string;\n content_type: string;\n}\n\nexport interface SignedUrlResponse {\n url: string;\n expiresAt: string;\n}\n\nexport function useFileBrowse(prefix: string, pageSize = 100, continuationToken?: string) {\n const params = new URLSearchParams();\n if (prefix) params.set('prefix', prefix);\n params.set('pageSize', String(pageSize));\n if (continuationToken) params.set('continuationToken', continuationToken);\n const qs = params.toString();\n\n return useQuery<BrowseResponse>({\n queryKey: ['fileBrowse', prefix, pageSize, continuationToken],\n queryFn: () => apiFetch(`/file-browser/browse?${qs}`),\n });\n}\n\nexport function useFileMetadata(filePath: string | null) {\n return useQuery<FileMetadata>({\n queryKey: ['fileMetadata', filePath],\n queryFn: () => apiFetch(`/file-browser/metadata/${filePath}`),\n enabled: !!filePath,\n });\n}\n\nexport function useGenerateSignedUrl() {\n return useMutation<SignedUrlResponse, Error, { path: string; expiresIn: number }>({\n mutationFn: (data) =>\n apiFetch('/file-browser/signed-url', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n });\n}\n\nexport function useDeleteFile() {\n return useMutation<{ deleted: boolean; path: string }, Error, string>({\n mutationFn: (filePath) =>\n apiFetch(`/file-browser/delete/${filePath}`, { method: 'DELETE' }),\n });\n}\n\nexport function useUploadFile() {\n return useMutation<{ path: string; size: number; content_type: string }, Error, { path: string; file: File }>({\n mutationFn: async ({ path, file }) => {\n const buffer = await file.arrayBuffer();\n // Always send as octet-stream to bypass Express JSON body parser\n return apiFetch(`/file-browser/upload?path=${encodeURIComponent(path)}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/octet-stream' },\n body: buffer,\n });\n },\n });\n}\n\nexport function useFilePreviewUrl(filePath: string | null) {\n return useQuery<string>({\n queryKey: ['filePreviewUrl', filePath],\n queryFn: async () => {\n const result = await apiFetch<SignedUrlResponse>('/file-browser/signed-url', {\n method: 'POST',\n body: JSON.stringify({ path: filePath, expiresIn: 3600 }),\n });\n return result.url;\n },\n enabled: !!filePath,\n staleTime: 50 * 60 * 1000, // cache for 50 min (token valid for 60)\n });\n}\n\n/** @deprecated Use useFilePreviewUrl() for signed access */\nexport function getFilePreviewUrl(filePath: string): string {\n return `/api/files/${filePath.replace(/^\\/+/, '')}`;\n}\n\nexport function getFileDownloadUrl(filePath: string): string {\n return `/api/file-browser/download/${filePath.replace(/^\\/+/, '')}`;\n}\n","import { ChevronRight, FolderOpen } from 'lucide-react';\n\ninterface FileBreadcrumbsProps {\n prefix: string;\n onNavigate: (prefix: string) => void;\n}\n\nexport function FileBreadcrumbs({ prefix, onNavigate }: FileBreadcrumbsProps) {\n const segments = prefix ? prefix.replace(/\\/+$/, '').split('/').filter(Boolean) : [];\n\n return (\n <nav className=\"flex items-center gap-1 text-sm mb-6 min-h-[28px]\">\n <button\n onClick={() => onNavigate('')}\n className={`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${\n segments.length === 0\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n <FolderOpen className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>Root</span>\n </button>\n\n {segments.map((segment, i) => {\n const isLast = i === segments.length - 1;\n const targetPrefix = segments.slice(0, i + 1).join('/') + '/';\n return (\n <span key={targetPrefix} className=\"flex items-center gap-1\">\n <ChevronRight className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <button\n onClick={() => onNavigate(targetPrefix)}\n className={`px-1.5 py-0.5 rounded transition-colors ${\n isLast\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n {segment}\n </button>\n </span>\n );\n })}\n </nav>\n );\n}\n","import { useState } from 'react';\nimport { Copy, Check } from 'lucide-react';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\n\ninterface FileMetadata {\n path: string;\n content_type: string;\n size: number;\n modified_at: string;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nexport function fileName(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\nexport function MetaRow({ label, value, mono, children }: {\n label: string;\n value?: string;\n mono?: boolean;\n children?: React.ReactNode;\n}) {\n return (\n <div>\n <dt className=\"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5\">{label}</dt>\n <dd className={`text-sm text-text-secondary ${mono ? 'font-mono text-xs break-all' : ''}`}>\n {children || value}\n </dd>\n </div>\n );\n}\n\nexport function TextPreview({ url }: { url: string }) {\n const [content, setContent] = useState<string | null>(null);\n const [error, setError] = useState(false);\n\n if (content === null && !error) {\n fetch(url)\n .then((res) => {\n if (!res.ok) throw new Error();\n return res.text();\n })\n .then((text) => setContent(text.slice(0, 100_000)))\n .catch(() => setError(true));\n }\n\n if (error) return <p className=\"text-xs text-text-tertiary\">Could not load preview</p>;\n if (content === null) {\n return <div className=\"animate-pulse h-32 bg-surface-sunken rounded\" />;\n }\n\n return (\n <pre className=\"font-mono text-xs text-text-secondary bg-surface-sunken rounded-md p-3 overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap break-words\">\n {content}\n </pre>\n );\n}\n\nexport function FileMetadataDisplay({ metadata }: {\n metadata: FileMetadata;\n}) {\n const [copied, setCopied] = useState<string | null>(null);\n\n async function copyToClipboard(text: string, label: string) {\n await navigator.clipboard.writeText(text);\n setCopied(label);\n setTimeout(() => setCopied(null), 2000);\n }\n\n return (\n <div className=\"space-y-3\">\n <div>\n <dt className=\"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5\">Path</dt>\n <dd\n onClick={() => copyToClipboard(metadata.path, 'path')}\n className=\"group flex items-center gap-1.5 text-xs font-mono text-text-secondary break-all cursor-pointer hover:text-text-primary transition-colors\"\n title=\"Click to copy\"\n >\n <span className=\"flex-1\">{metadata.path}</span>\n {copied === 'path'\n ? <Check className=\"w-3.5 h-3.5 text-status-success shrink-0\" />\n : <Copy className=\"w-3.5 h-3.5 opacity-0 group-hover:opacity-100 text-text-tertiary shrink-0 transition-opacity\" />}\n </dd>\n </div>\n <MetaRow label=\"Type\" value={metadata.content_type} />\n <MetaRow label=\"Size\" value={formatSize(metadata.size)} />\n <MetaRow label=\"Modified\">\n <TimeAgo date={metadata.modified_at} />\n </MetaRow>\n </div>\n );\n}\n\nexport async function triggerDownload(url: string, name: string) {\n const res = await fetch(url);\n const blob = await res.blob();\n const blobUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = blobUrl;\n a.download = name;\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(blobUrl);\n}\n","import {\n Folder,\n File,\n Image,\n FileText,\n FileJson2,\n FileSpreadsheet,\n} from 'lucide-react';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { getFilePreviewUrl } from '../../api/files';\n\nexport function formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nexport function fileIcon(filePath: string) {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n if (['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext)) {\n return <Image className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['json'].includes(ext)) {\n return <FileJson2 className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['csv', 'xlsx', 'xls'].includes(ext)) {\n return <FileSpreadsheet className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['txt', 'md', 'html', 'xml', 'yaml', 'yml', 'css', 'js', 'ts'].includes(ext)) {\n return <FileText className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n return <File className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n}\n\nexport function isImagePath(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n return ['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext);\n}\n\nexport function dirName(dirPath: string): string {\n const stripped = dirPath.replace(/\\/+$/, '');\n return stripped.split('/').pop() || stripped;\n}\n\nexport function fileNameFromPath(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\ninterface ViewProps {\n directories: string[];\n files: Array<{ path: string; size: number; modified_at: string }>;\n onNavigate: (prefix: string) => void;\n onSelect: (path: string) => void;\n selectedFile: string | null;\n}\n\nexport function ListView({ directories, files, onNavigate, onSelect, selectedFile }: ViewProps) {\n return (\n <table className=\"w-full mt-2\">\n <thead>\n <tr className=\"text-left text-[10px] uppercase tracking-wider text-text-tertiary\">\n <th className=\"pb-2 pl-2 font-medium\">Name</th>\n <th className=\"pb-2 font-medium w-24 text-right\">Size</th>\n <th className=\"pb-2 pr-2 font-medium w-40 text-right\">Modified</th>\n </tr>\n </thead>\n <tbody>\n {directories.map((dir) => (\n <tr\n key={dir}\n onClick={() => onNavigate(dir)}\n className=\"row-hover cursor-pointer group\"\n >\n <td className=\"py-2 pl-2\">\n <span className=\"flex items-center gap-2.5\">\n <Folder className=\"w-4 h-4 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-sm text-text-primary group-hover:text-accent transition-colors\">\n {dirName(dir)}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-tertiary\">&mdash;</td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-tertiary\">&mdash;</td>\n </tr>\n ))}\n {files.map((file) => (\n <tr\n key={file.path}\n onClick={() => onSelect(file.path)}\n className={`row-hover cursor-pointer group ${\n selectedFile === file.path ? 'bg-surface-hover' : ''\n }`}\n >\n <td className=\"py-2 pl-2\">\n <span className=\"flex items-center gap-2.5\">\n {fileIcon(file.path)}\n <span className=\"text-sm text-text-primary truncate\">\n {fileNameFromPath(file.path)}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-secondary tabular-nums\">\n {formatSize(file.size)}\n </td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-secondary\">\n <TimeAgo date={file.modified_at} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\nexport function GridView({ directories, files, onNavigate, onSelect, selectedFile }: ViewProps) {\n return (\n <div className=\"mt-4\">\n {/* Directories as compact list */}\n {directories.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mb-6\">\n {directories.map((dir) => (\n <button\n key={dir}\n onClick={() => onNavigate(dir)}\n className=\"flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors\"\n >\n <Folder className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>{dirName(dir)}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Files as thumbnail grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3\">\n {files.map((file) => {\n const isImg = isImagePath(file.path);\n return (\n <button\n key={file.path}\n onClick={() => onSelect(file.path)}\n className={`group text-left rounded-lg overflow-hidden transition-all ${\n selectedFile === file.path\n ? 'ring-2 ring-accent/40 bg-surface-hover'\n : 'hover:bg-surface-hover'\n }`}\n >\n <div className=\"aspect-square bg-surface-sunken flex items-center justify-center overflow-hidden\">\n {isImg ? (\n <img\n src={getFilePreviewUrl(file.path)}\n alt={fileNameFromPath(file.path)}\n loading=\"lazy\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center gap-2 text-text-tertiary\">\n {fileIcon(file.path)}\n <span className=\"text-[10px] uppercase tracking-wider\">\n {file.path.split('.').pop()?.toUpperCase()}\n </span>\n </div>\n )}\n </div>\n <div className=\"px-2 py-1.5\">\n <p className=\"text-xs text-text-primary truncate\" title={fileNameFromPath(file.path)}>\n {fileNameFromPath(file.path)}\n </p>\n <p className=\"text-[10px] text-text-tertiary tabular-nums\">\n {formatSize(file.size)}\n </p>\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport {\n X,\n Download,\n ExternalLink,\n Link,\n Check,\n Trash2,\n} from 'lucide-react';\nimport { useFileMetadata, useFilePreviewUrl, useGenerateSignedUrl, useDeleteFile } from '../../api/files';\nimport { fileName, triggerDownload, TextPreview, FileMetadataDisplay } from './FilePreviewContent';\nimport { isImagePath } from './FileListViews';\n\ninterface FilePreviewPanelProps {\n filePath: string;\n onClose: () => void;\n onDeleted?: () => void;\n}\n\nconst EXPIRY_OPTIONS = [\n { label: '1 hour', value: 3600 },\n { label: '6 hours', value: 21600 },\n { label: '24 hours', value: 86400 },\n { label: '7 days', value: 604800 },\n { label: '30 days', value: 2592000 },\n];\n\nexport function FilePreviewPanel({ filePath, onClose, onDeleted }: FilePreviewPanelProps) {\n const { data: metadata, isLoading } = useFileMetadata(filePath);\n const signedUrlMutation = useGenerateSignedUrl();\n const deleteMutation = useDeleteFile();\n const [showShareMenu, setShowShareMenu] = useState(false);\n const [copied, setCopied] = useState(false);\n const [confirmDelete, setConfirmDelete] = useState(false);\n\n const { data: previewUrl } = useFilePreviewUrl(filePath);\n const isImage = metadata?.content_type?.startsWith('image/') || isImagePath(filePath);\n const TEXT_EXTENSIONS = /\\.(ts|tsx|js|jsx|json|md|yaml|yml|toml|xml|csv|sql|sh|py|rb|go|rs|java|c|cpp|h|css|scss|html|txt|log|env|ini|cfg|conf)$/i;\n const isText = metadata?.content_type?.startsWith('text/')\n || metadata?.content_type === 'application/json'\n || metadata?.content_type === 'application/xml'\n || (metadata?.content_type === 'application/octet-stream' && TEXT_EXTENSIONS.test(filePath));\n const isPdf = metadata?.content_type === 'application/pdf';\n\n async function handleDownload() {\n try {\n const result = await signedUrlMutation.mutateAsync({ path: filePath, expiresIn: 3600 });\n const fullUrl = result.url.startsWith('http')\n ? result.url\n : `${window.location.origin}${result.url}`;\n triggerDownload(fullUrl, fileName(filePath));\n } catch {\n // handled by mutation state\n }\n }\n\n async function handleShare(expiresIn: number) {\n setShowShareMenu(false);\n try {\n const result = await signedUrlMutation.mutateAsync({ path: filePath, expiresIn });\n const fullUrl = result.url.startsWith('http')\n ? result.url\n : `${window.location.origin}${result.url}`;\n await navigator.clipboard.writeText(fullUrl);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // handled by mutation state\n }\n }\n\n return (\n <>\n {/* Fullscreen — opens image in a new tab */}\n\n {/* Panel */}\n <div className=\"w-[380px] shrink-0 border-l border-surface-border bg-surface overflow-y-auto\">\n {/* Header */}\n <div className=\"sticky top-0 bg-surface z-10 px-5 pt-5 pb-3 border-b border-surface-border\">\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-medium text-text-primary truncate pr-2\" title={fileName(filePath)}>\n {fileName(filePath)}\n </h3>\n <button onClick={onClose} className=\"text-text-tertiary hover:text-text-primary shrink-0\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-1 flex-wrap\">\n <button\n onClick={handleDownload}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Download\"\n >\n <Download className=\"w-3.5 h-3.5\" />\n <span>Download</span>\n </button>\n\n <a\n href={previewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Open in new tab\"\n >\n <ExternalLink className=\"w-3.5 h-3.5\" />\n <span>Open</span>\n </a>\n\n <div className=\"relative\">\n <button\n onClick={() => setShowShareMenu((v) => !v)}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Share with signed URL\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-status-success\" /> : <Link className=\"w-3.5 h-3.5\" />}\n <span>{copied ? 'Copied' : 'Share'}</span>\n </button>\n {showShareMenu && (\n <div className=\"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg py-1 z-20 min-w-[120px]\">\n {EXPIRY_OPTIONS.map((opt) => (\n <button\n key={opt.value}\n onClick={() => handleShare(opt.value)}\n className=\"w-full text-left px-3 py-1.5 text-xs text-text-secondary hover:bg-surface-hover hover:text-text-primary transition-colors\"\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n\n <button\n onClick={() => setConfirmDelete(true)}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs text-status-error/70 hover:text-status-error\"\n title=\"Delete file\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n <span>Delete</span>\n </button>\n </div>\n\n {/* Delete confirmation */}\n {confirmDelete && (\n <div className=\"mt-3 p-3 bg-status-error/5 border border-status-error/20 rounded-md\">\n <p className=\"text-xs text-text-primary mb-2\">\n Permanently delete <span className=\"font-medium\">{fileName(filePath)}</span>? This cannot be undone.\n </p>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirmDelete(false)}\n className=\"btn-secondary text-xs\"\n disabled={deleteMutation.isPending}\n >\n Cancel\n </button>\n <button\n onClick={async () => {\n try {\n await deleteMutation.mutateAsync(filePath);\n setConfirmDelete(false);\n onDeleted?.();\n } catch {\n // error shown below\n }\n }}\n className=\"btn-primary text-xs !bg-status-error hover:!bg-status-error/90\"\n disabled={deleteMutation.isPending}\n >\n {deleteMutation.isPending ? 'Deleting...' : 'Delete'}\n </button>\n </div>\n {deleteMutation.isError && (\n <p className=\"text-xs text-status-error mt-2\">{deleteMutation.error.message}</p>\n )}\n </div>\n )}\n\n {signedUrlMutation.isError && (\n <p className=\"text-xs text-status-error mt-2\">{signedUrlMutation.error.message}</p>\n )}\n </div>\n\n {/* Preview area */}\n <div className=\"p-5\">\n {isLoading ? (\n <div className=\"animate-pulse space-y-3\">\n <div className=\"h-48 bg-surface-sunken rounded\" />\n <div className=\"h-4 bg-surface-sunken rounded w-2/3\" />\n </div>\n ) : (\n <>\n {isImage && previewUrl && (\n <div\n className=\"mb-5 rounded-md border border-surface-border bg-surface-sunken overflow-hidden\"\n style={{ maxHeight: '400px' }}\n >\n <img\n src={previewUrl}\n alt={fileName(filePath)}\n className=\"w-full object-cover object-top\"\n style={{ maxHeight: '400px' }}\n />\n </div>\n )}\n\n {isText && previewUrl && (\n <div className=\"mb-5\">\n <TextPreview url={previewUrl} />\n </div>\n )}\n\n {isPdf && previewUrl && (\n <div className=\"mb-5 p-4 bg-surface-sunken rounded-md text-center\">\n <a\n href={previewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-accent hover:text-accent-hover text-sm font-medium\"\n >\n Open PDF in new tab\n </a>\n </div>\n )}\n\n {metadata && (\n <FileMetadataDisplay metadata={metadata} />\n )}\n </>\n )}\n </div>\n </div>\n </>\n );\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n ChevronLeft,\n ChevronRight,\n Upload,\n UploadCloud,\n} from 'lucide-react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterInput } from '../../components/common/data/FilterBar';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { DropZone } from '../../components/common/DropZone';\nimport { useFileBrowse, useUploadFile } from '../../api/files';\nimport { FileBreadcrumbs } from './FileBreadcrumbs';\nimport { FilePreviewPanel } from './FilePreviewPanel';\nimport { ListView } from './FileListViews';\n\nconst PAGE_SIZES = [25, 50, 100, 200];\n\nexport function FilesPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const prefix = searchParams.get('prefix') || '';\n const [search, setSearch] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const [pageSize, setPageSize] = useState(100);\n const [tokenStack, setTokenStack] = useState<string[]>([]);\n const [currentToken, setCurrentToken] = useState<string | undefined>();\n\n // Debounce search — refines the prefix sent to S3\n useEffect(() => {\n const t = setTimeout(() => {\n setDebouncedSearch(search);\n setCurrentToken(undefined);\n setTokenStack([]);\n }, 300);\n return () => clearTimeout(t);\n }, [search]);\n\n const effectivePrefix = debouncedSearch\n ? `${prefix}${debouncedSearch}`\n : prefix;\n\n const { data, isLoading, isFetching, refetch } = useFileBrowse(effectivePrefix, pageSize, currentToken);\n const uploadMutation = useUploadFile();\n const queryClient = useQueryClient();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const [pendingFiles, setPendingFiles] = useState<File[] | null>(null);\n const [uploadPrefix, setUploadPrefix] = useState('');\n\n const handleUploadFiles = useCallback((files: File[]) => {\n setPendingFiles(files);\n setUploadPrefix(prefix);\n }, [prefix]);\n\n const [uploadError, setUploadError] = useState('');\n\n const confirmUpload = useCallback(() => {\n if (!pendingFiles) return;\n setUploadError('');\n let remaining = pendingFiles.length;\n for (const file of pendingFiles) {\n const targetPath = `${uploadPrefix}${file.name}`;\n uploadMutation.mutate({ path: targetPath, file }, {\n onSuccess: () => {\n remaining--;\n queryClient.invalidateQueries({ queryKey: ['fileBrowse'] });\n if (remaining <= 0) setPendingFiles(null);\n },\n onError: (err) => {\n remaining--;\n setUploadError(err.message);\n console.error('[Upload] failed:', targetPath, err);\n },\n });\n }\n }, [pendingFiles, uploadPrefix, uploadMutation, queryClient]);\n\n const directories = data?.directories ?? [];\n const files = data?.files ?? [];\n const nextToken = data?.nextToken;\n\n const navigateTo = useCallback((newPrefix: string) => {\n setSearch('');\n setDebouncedSearch('');\n setSelectedFile(null);\n setCurrentToken(undefined);\n setTokenStack([]);\n if (newPrefix) {\n setSearchParams({ prefix: newPrefix });\n } else {\n setSearchParams({});\n }\n }, [setSearchParams]);\n\n function goNextPage() {\n if (!nextToken) return;\n setTokenStack((prev) => [...prev, currentToken || '']);\n setCurrentToken(nextToken);\n }\n\n function goPrevPage() {\n if (tokenStack.length === 0) return;\n const prev = [...tokenStack];\n const token = prev.pop()!;\n setTokenStack(prev);\n setCurrentToken(token || undefined);\n }\n\n function changePageSize(size: number) {\n setPageSize(size);\n setCurrentToken(undefined);\n setTokenStack([]);\n }\n\n const isEmpty = directories.length === 0 && files.length === 0;\n const pageNum = tokenStack.length + 1;\n const hasNextPage = !!nextToken;\n const hasPrevPage = tokenStack.length > 0;\n\n const apiPath = `/file-browser/browse?prefix=${encodeURIComponent(effectivePrefix)}&pageSize=${pageSize}${currentToken ? `&continuationToken=${encodeURIComponent(currentToken)}` : ''}`;\n\n return (\n <DropZone onDrop={handleUploadFiles} label=\"Drop files to upload\">\n <div className=\"flex gap-0\">\n {/* Hidden file input for button-triggered upload */}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n const files = Array.from(e.target.files || []);\n if (files.length) handleUploadFiles(files);\n e.target.value = '';\n }}\n />\n\n {/* Main content */}\n <div className=\"flex-1 min-w-0 overflow-hidden\">\n <PageHeader\n title=\"Files\"\n docsHash=\"#docs:dashboard.md:files\"\n actions={\n <button\n onClick={() => fileInputRef.current?.click()}\n disabled={uploadMutation.isPending}\n className=\"btn-primary text-xs inline-flex items-center gap-1.5\"\n >\n <Upload className=\"w-3.5 h-3.5\" />\n {uploadMutation.isPending ? 'Uploading...' : 'Upload'}\n </button>\n }\n />\n\n <FileBreadcrumbs prefix={prefix} onNavigate={navigateTo} />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={apiPath}\n />\n }>\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder=\"Filter by prefix...\"\n />\n </FilterBar>\n\n {isLoading ? (\n <div className=\"animate-pulse space-y-2 mt-4\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-10 bg-surface-sunken rounded\" />\n ))}\n </div>\n ) : isEmpty ? (\n <div className=\"cursor-pointer\" onClick={() => fileInputRef.current?.click()}>\n <EmptyState\n icon={UploadCloud}\n title={search ? 'No matching files' : 'No files yet'}\n description={search ? undefined : 'Drop files here or click to upload'}\n />\n </div>\n ) : (\n <ListView\n directories={directories}\n files={files}\n onNavigate={navigateTo}\n onSelect={setSelectedFile}\n selectedFile={selectedFile}\n />\n )}\n\n {/* Cursor-based pagination */}\n {(hasPrevPage || hasNextPage || files.length > 0) && (\n <div className=\"flex items-center justify-between pt-4 pb-2\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs text-text-tertiary\">\n Page {pageNum} &middot; {files.length + directories.length} items\n </p>\n <select\n value={pageSize}\n onChange={(e) => changePageSize(parseInt(e.target.value))}\n className=\"select text-xs py-1\"\n >\n {PAGE_SIZES.map((size) => (\n <option key={size} value={size}>{size} / page</option>\n ))}\n </select>\n </div>\n {(hasPrevPage || hasNextPage) && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={goPrevPage}\n disabled={!hasPrevPage}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1\"\n >\n <ChevronLeft className=\"w-3.5 h-3.5\" />\n Previous\n </button>\n <button\n onClick={goNextPage}\n disabled={!hasNextPage}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1\"\n >\n Next\n <ChevronRight className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Preview panel */}\n {selectedFile && (\n <FilePreviewPanel\n filePath={selectedFile}\n onClose={() => setSelectedFile(null)}\n onDeleted={() => { setSelectedFile(null); refetch(); }}\n />\n )}\n </div>\n {/* Upload confirmation dialog */}\n {pendingFiles && createPortal(\n <>\n <div className=\"fixed inset-0 z-40 bg-black/30\" onClick={() => setPendingFiles(null)} />\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n <div className=\"bg-surface-raised border border-surface-border rounded-lg shadow-lg w-full max-w-sm\">\n <div className=\"px-5 py-4 border-b border-surface-border\">\n <h3 className=\"text-sm font-medium text-text-primary\">Upload {pendingFiles.length} file{pendingFiles.length > 1 ? 's' : ''}</h3>\n </div>\n <div className=\"px-5 py-4 space-y-3\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Destination folder</label>\n <input\n type=\"text\"\n value={uploadPrefix}\n onChange={(e) => setUploadPrefix(e.target.value)}\n placeholder=\"e.g., images/ or leave empty for root\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div className=\"text-[10px] text-text-quaternary space-y-0.5\">\n {pendingFiles.map((f, i) => (\n <p key={i} className=\"truncate\">{uploadPrefix}{f.name} <span className=\"text-text-tertiary\">({(f.size / 1024).toFixed(1)} KB)</span></p>\n ))}\n </div>\n {uploadError && <p className=\"text-xs text-status-error\">{uploadError}</p>}\n </div>\n <div className=\"flex justify-end gap-2 px-5 py-3 border-t border-surface-border\">\n <button onClick={() => setPendingFiles(null)} className=\"btn-ghost text-xs\">Cancel</button>\n <button onClick={confirmUpload} className=\"btn-primary text-xs\">\n <Upload className=\"w-3.5 h-3.5 mr-1.5 inline\" />\n Upload\n </button>\n </div>\n </div>\n </div>\n </>,\n document.body,\n )}\n </DropZone>\n );\n}\n"],"names":["useFileBrowse","prefix","pageSize","continuationToken","params","qs","useQuery","apiFetch","useFileMetadata","filePath","useGenerateSignedUrl","useMutation","data","useDeleteFile","useUploadFile","path","file","buffer","useFilePreviewUrl","FileBreadcrumbs","onNavigate","segments","jsxs","jsx","FolderOpen","segment","i","isLast","targetPrefix","ChevronRight","formatSize","bytes","fileName","MetaRow","label","value","mono","children","TextPreview","url","content","setContent","useState","error","setError","res","text","FileMetadataDisplay","metadata","copied","setCopied","copyToClipboard","Check","Copy","TimeAgo","triggerDownload","name","blob","blobUrl","a","fileIcon","ext","_a","Image","FileJson2","FileSpreadsheet","FileText","File","isImagePath","dirName","dirPath","stripped","fileNameFromPath","ListView","directories","files","onSelect","selectedFile","dir","Folder","EXPIRY_OPTIONS","FilePreviewPanel","onClose","onDeleted","isLoading","signedUrlMutation","deleteMutation","showShareMenu","setShowShareMenu","confirmDelete","setConfirmDelete","previewUrl","isImage","TEXT_EXTENSIONS","isText","_b","isPdf","handleDownload","result","fullUrl","handleShare","expiresIn","Fragment","X","Download","ExternalLink","v","Link","opt","Trash2","PAGE_SIZES","FilesPage","searchParams","setSearchParams","useSearchParams","search","setSearch","debouncedSearch","setDebouncedSearch","setSelectedFile","setPageSize","tokenStack","setTokenStack","currentToken","setCurrentToken","useEffect","t","effectivePrefix","isFetching","refetch","uploadMutation","queryClient","useQueryClient","fileInputRef","useRef","pendingFiles","setPendingFiles","uploadPrefix","setUploadPrefix","handleUploadFiles","useCallback","uploadError","setUploadError","confirmUpload","remaining","targetPath","err","nextToken","navigateTo","newPrefix","goNextPage","prev","goPrevPage","token","changePageSize","size","isEmpty","pageNum","hasNextPage","hasPrevPage","apiPath","DropZone","e","PageHeader","Upload","FilterBar","ListToolbar","FilterInput","_","EmptyState","UploadCloud","ChevronLeft","createPortal","f"],"mappings":"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"}
1
+ {"version":3,"file":"index-CuY5hPYB.js","sources":["../../src/api/files.ts","../../src/pages/files/FileBreadcrumbs.tsx","../../src/pages/files/FilePreviewContent.tsx","../../src/pages/files/FileListViews.tsx","../../src/pages/files/FilePreviewPanel.tsx","../../src/pages/files/FilesPage.tsx"],"sourcesContent":["import { useQuery, useMutation } from '@tanstack/react-query';\nimport { apiFetch } from './client';\n\nexport interface FileEntry {\n path: string;\n size: number;\n modified_at: string;\n}\n\nexport interface BrowseResponse {\n files: FileEntry[];\n directories: string[];\n nextToken?: string;\n}\n\nexport interface FileMetadata {\n path: string;\n size: number;\n modified_at: string;\n content_type: string;\n}\n\nexport interface SignedUrlResponse {\n url: string;\n expiresAt: string;\n}\n\nexport function useFileBrowse(prefix: string, pageSize = 100, continuationToken?: string) {\n const params = new URLSearchParams();\n if (prefix) params.set('prefix', prefix);\n params.set('pageSize', String(pageSize));\n if (continuationToken) params.set('continuationToken', continuationToken);\n const qs = params.toString();\n\n return useQuery<BrowseResponse>({\n queryKey: ['fileBrowse', prefix, pageSize, continuationToken],\n queryFn: () => apiFetch(`/file-browser/browse?${qs}`),\n });\n}\n\nexport function useFileMetadata(filePath: string | null) {\n return useQuery<FileMetadata>({\n queryKey: ['fileMetadata', filePath],\n queryFn: () => apiFetch(`/file-browser/metadata/${filePath}`),\n enabled: !!filePath,\n });\n}\n\nexport function useGenerateSignedUrl() {\n return useMutation<SignedUrlResponse, Error, { path: string; expiresIn: number }>({\n mutationFn: (data) =>\n apiFetch('/file-browser/signed-url', {\n method: 'POST',\n body: JSON.stringify(data),\n }),\n });\n}\n\nexport function useDeleteFile() {\n return useMutation<{ deleted: boolean; path: string }, Error, string>({\n mutationFn: (filePath) =>\n apiFetch(`/file-browser/delete/${filePath}`, { method: 'DELETE' }),\n });\n}\n\nexport function useUploadFile() {\n return useMutation<{ path: string; size: number; content_type: string }, Error, { path: string; file: File }>({\n mutationFn: async ({ path, file }) => {\n const buffer = await file.arrayBuffer();\n // Always send as octet-stream to bypass Express JSON body parser\n return apiFetch(`/file-browser/upload?path=${encodeURIComponent(path)}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/octet-stream' },\n body: buffer,\n });\n },\n });\n}\n\nexport function useFilePreviewUrl(filePath: string | null) {\n return useQuery<string>({\n queryKey: ['filePreviewUrl', filePath],\n queryFn: async () => {\n const result = await apiFetch<SignedUrlResponse>('/file-browser/signed-url', {\n method: 'POST',\n body: JSON.stringify({ path: filePath, expiresIn: 3600 }),\n });\n return result.url;\n },\n enabled: !!filePath,\n staleTime: 50 * 60 * 1000, // cache for 50 min (token valid for 60)\n });\n}\n\n/** @deprecated Use useFilePreviewUrl() for signed access */\nexport function getFilePreviewUrl(filePath: string): string {\n return `/api/files/${filePath.replace(/^\\/+/, '')}`;\n}\n\nexport function getFileDownloadUrl(filePath: string): string {\n return `/api/file-browser/download/${filePath.replace(/^\\/+/, '')}`;\n}\n","import { ChevronRight, FolderOpen } from 'lucide-react';\n\ninterface FileBreadcrumbsProps {\n prefix: string;\n onNavigate: (prefix: string) => void;\n}\n\nexport function FileBreadcrumbs({ prefix, onNavigate }: FileBreadcrumbsProps) {\n const segments = prefix ? prefix.replace(/\\/+$/, '').split('/').filter(Boolean) : [];\n\n return (\n <nav className=\"flex items-center gap-1 text-sm mb-6 min-h-[28px]\">\n <button\n onClick={() => onNavigate('')}\n className={`flex items-center gap-1.5 px-1.5 py-0.5 rounded transition-colors ${\n segments.length === 0\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n <FolderOpen className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>Root</span>\n </button>\n\n {segments.map((segment, i) => {\n const isLast = i === segments.length - 1;\n const targetPrefix = segments.slice(0, i + 1).join('/') + '/';\n return (\n <span key={targetPrefix} className=\"flex items-center gap-1\">\n <ChevronRight className=\"w-3.5 h-3.5 text-text-tertiary\" />\n <button\n onClick={() => onNavigate(targetPrefix)}\n className={`px-1.5 py-0.5 rounded transition-colors ${\n isLast\n ? 'text-text-primary font-medium'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n {segment}\n </button>\n </span>\n );\n })}\n </nav>\n );\n}\n","import { useState } from 'react';\nimport { Copy, Check } from 'lucide-react';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\n\ninterface FileMetadata {\n path: string;\n content_type: string;\n size: number;\n modified_at: string;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nexport function fileName(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\nexport function MetaRow({ label, value, mono, children }: {\n label: string;\n value?: string;\n mono?: boolean;\n children?: React.ReactNode;\n}) {\n return (\n <div>\n <dt className=\"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5\">{label}</dt>\n <dd className={`text-sm text-text-secondary ${mono ? 'font-mono text-xs break-all' : ''}`}>\n {children || value}\n </dd>\n </div>\n );\n}\n\nexport function TextPreview({ url }: { url: string }) {\n const [content, setContent] = useState<string | null>(null);\n const [error, setError] = useState(false);\n\n if (content === null && !error) {\n fetch(url)\n .then((res) => {\n if (!res.ok) throw new Error();\n return res.text();\n })\n .then((text) => setContent(text.slice(0, 100_000)))\n .catch(() => setError(true));\n }\n\n if (error) return <p className=\"text-xs text-text-tertiary\">Could not load preview</p>;\n if (content === null) {\n return <div className=\"animate-pulse h-32 bg-surface-sunken rounded\" />;\n }\n\n return (\n <pre className=\"font-mono text-xs text-text-secondary bg-surface-sunken rounded-md p-3 overflow-x-auto max-h-[400px] overflow-y-auto whitespace-pre-wrap break-words\">\n {content}\n </pre>\n );\n}\n\nexport function FileMetadataDisplay({ metadata }: {\n metadata: FileMetadata;\n}) {\n const [copied, setCopied] = useState<string | null>(null);\n\n async function copyToClipboard(text: string, label: string) {\n await navigator.clipboard.writeText(text);\n setCopied(label);\n setTimeout(() => setCopied(null), 2000);\n }\n\n return (\n <div className=\"space-y-3\">\n <div>\n <dt className=\"text-[10px] uppercase tracking-wider text-text-tertiary mb-0.5\">Path</dt>\n <dd\n onClick={() => copyToClipboard(metadata.path, 'path')}\n className=\"group flex items-center gap-1.5 text-xs font-mono text-text-secondary break-all cursor-pointer hover:text-text-primary transition-colors\"\n title=\"Click to copy\"\n >\n <span className=\"flex-1\">{metadata.path}</span>\n {copied === 'path'\n ? <Check className=\"w-3.5 h-3.5 text-status-success shrink-0\" />\n : <Copy className=\"w-3.5 h-3.5 opacity-0 group-hover:opacity-100 text-text-tertiary shrink-0 transition-opacity\" />}\n </dd>\n </div>\n <MetaRow label=\"Type\" value={metadata.content_type} />\n <MetaRow label=\"Size\" value={formatSize(metadata.size)} />\n <MetaRow label=\"Modified\">\n <TimeAgo date={metadata.modified_at} />\n </MetaRow>\n </div>\n );\n}\n\nexport async function triggerDownload(url: string, name: string) {\n const res = await fetch(url);\n const blob = await res.blob();\n const blobUrl = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = blobUrl;\n a.download = name;\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(blobUrl);\n}\n","import {\n Folder,\n File,\n Image,\n FileText,\n FileJson2,\n FileSpreadsheet,\n} from 'lucide-react';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { getFilePreviewUrl } from '../../api/files';\n\nexport function formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nexport function fileIcon(filePath: string) {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n if (['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext)) {\n return <Image className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['json'].includes(ext)) {\n return <FileJson2 className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['csv', 'xlsx', 'xls'].includes(ext)) {\n return <FileSpreadsheet className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n if (['txt', 'md', 'html', 'xml', 'yaml', 'yml', 'css', 'js', 'ts'].includes(ext)) {\n return <FileText className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n }\n return <File className=\"w-4 h-4 text-accent/60\" strokeWidth={1.5} />;\n}\n\nexport function isImagePath(filePath: string): boolean {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n return ['png', 'jpg', 'jpeg', 'gif', 'svg', 'webp'].includes(ext);\n}\n\nexport function dirName(dirPath: string): string {\n const stripped = dirPath.replace(/\\/+$/, '');\n return stripped.split('/').pop() || stripped;\n}\n\nexport function fileNameFromPath(filePath: string): string {\n return filePath.split('/').pop() || filePath;\n}\n\ninterface ViewProps {\n directories: string[];\n files: Array<{ path: string; size: number; modified_at: string }>;\n onNavigate: (prefix: string) => void;\n onSelect: (path: string) => void;\n selectedFile: string | null;\n}\n\nexport function ListView({ directories, files, onNavigate, onSelect, selectedFile }: ViewProps) {\n return (\n <table className=\"w-full mt-2\">\n <thead>\n <tr className=\"text-left text-[10px] uppercase tracking-wider text-text-tertiary\">\n <th className=\"pb-2 pl-2 font-medium\">Name</th>\n <th className=\"pb-2 font-medium w-24 text-right\">Size</th>\n <th className=\"pb-2 pr-2 font-medium w-40 text-right\">Modified</th>\n </tr>\n </thead>\n <tbody>\n {directories.map((dir) => (\n <tr\n key={dir}\n onClick={() => onNavigate(dir)}\n className=\"row-hover cursor-pointer group\"\n >\n <td className=\"py-2 pl-2\">\n <span className=\"flex items-center gap-2.5\">\n <Folder className=\"w-4 h-4 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-sm text-text-primary group-hover:text-accent transition-colors\">\n {dirName(dir)}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-tertiary\">&mdash;</td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-tertiary\">&mdash;</td>\n </tr>\n ))}\n {files.map((file) => (\n <tr\n key={file.path}\n onClick={() => onSelect(file.path)}\n className={`row-hover cursor-pointer group ${\n selectedFile === file.path ? 'bg-surface-hover' : ''\n }`}\n >\n <td className=\"py-2 pl-2\">\n <span className=\"flex items-center gap-2.5\">\n {fileIcon(file.path)}\n <span className=\"text-sm text-text-primary truncate\">\n {fileNameFromPath(file.path)}\n </span>\n </span>\n </td>\n <td className=\"py-2 text-right text-xs text-text-secondary tabular-nums\">\n {formatSize(file.size)}\n </td>\n <td className=\"py-2 pr-2 text-right text-xs text-text-secondary\">\n <TimeAgo date={file.modified_at} />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n}\n\nexport function GridView({ directories, files, onNavigate, onSelect, selectedFile }: ViewProps) {\n return (\n <div className=\"mt-4\">\n {/* Directories as compact list */}\n {directories.length > 0 && (\n <div className=\"flex flex-wrap gap-2 mb-6\">\n {directories.map((dir) => (\n <button\n key={dir}\n onClick={() => onNavigate(dir)}\n className=\"flex items-center gap-2 px-3 py-1.5 rounded-md text-sm text-text-secondary hover:text-text-primary hover:bg-surface-hover transition-colors\"\n >\n <Folder className=\"w-4 h-4 text-accent/75\" strokeWidth={1.5} />\n <span>{dirName(dir)}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Files as thumbnail grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3\">\n {files.map((file) => {\n const isImg = isImagePath(file.path);\n return (\n <button\n key={file.path}\n onClick={() => onSelect(file.path)}\n className={`group text-left rounded-lg overflow-hidden transition-all ${\n selectedFile === file.path\n ? 'ring-2 ring-accent/40 bg-surface-hover'\n : 'hover:bg-surface-hover'\n }`}\n >\n <div className=\"aspect-square bg-surface-sunken flex items-center justify-center overflow-hidden\">\n {isImg ? (\n <img\n src={getFilePreviewUrl(file.path)}\n alt={fileNameFromPath(file.path)}\n loading=\"lazy\"\n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"flex flex-col items-center gap-2 text-text-tertiary\">\n {fileIcon(file.path)}\n <span className=\"text-[10px] uppercase tracking-wider\">\n {file.path.split('.').pop()?.toUpperCase()}\n </span>\n </div>\n )}\n </div>\n <div className=\"px-2 py-1.5\">\n <p className=\"text-xs text-text-primary truncate\" title={fileNameFromPath(file.path)}>\n {fileNameFromPath(file.path)}\n </p>\n <p className=\"text-[10px] text-text-tertiary tabular-nums\">\n {formatSize(file.size)}\n </p>\n </div>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport {\n X,\n Download,\n ExternalLink,\n Link,\n Check,\n Trash2,\n} from 'lucide-react';\nimport { useFileMetadata, useFilePreviewUrl, useGenerateSignedUrl, useDeleteFile } from '../../api/files';\nimport { fileName, triggerDownload, TextPreview, FileMetadataDisplay } from './FilePreviewContent';\nimport { isImagePath } from './FileListViews';\n\ninterface FilePreviewPanelProps {\n filePath: string;\n onClose: () => void;\n onDeleted?: () => void;\n}\n\nconst EXPIRY_OPTIONS = [\n { label: '1 hour', value: 3600 },\n { label: '6 hours', value: 21600 },\n { label: '24 hours', value: 86400 },\n { label: '7 days', value: 604800 },\n { label: '30 days', value: 2592000 },\n];\n\nexport function FilePreviewPanel({ filePath, onClose, onDeleted }: FilePreviewPanelProps) {\n const { data: metadata, isLoading } = useFileMetadata(filePath);\n const signedUrlMutation = useGenerateSignedUrl();\n const deleteMutation = useDeleteFile();\n const [showShareMenu, setShowShareMenu] = useState(false);\n const [copied, setCopied] = useState(false);\n const [confirmDelete, setConfirmDelete] = useState(false);\n\n const { data: previewUrl } = useFilePreviewUrl(filePath);\n const isImage = metadata?.content_type?.startsWith('image/') || isImagePath(filePath);\n const TEXT_EXTENSIONS = /\\.(ts|tsx|js|jsx|json|md|yaml|yml|toml|xml|csv|sql|sh|py|rb|go|rs|java|c|cpp|h|css|scss|html|txt|log|env|ini|cfg|conf)$/i;\n const isText = metadata?.content_type?.startsWith('text/')\n || metadata?.content_type === 'application/json'\n || metadata?.content_type === 'application/xml'\n || (metadata?.content_type === 'application/octet-stream' && TEXT_EXTENSIONS.test(filePath));\n const isPdf = metadata?.content_type === 'application/pdf';\n\n async function handleDownload() {\n try {\n const result = await signedUrlMutation.mutateAsync({ path: filePath, expiresIn: 3600 });\n const fullUrl = result.url.startsWith('http')\n ? result.url\n : `${window.location.origin}${result.url}`;\n triggerDownload(fullUrl, fileName(filePath));\n } catch {\n // handled by mutation state\n }\n }\n\n async function handleShare(expiresIn: number) {\n setShowShareMenu(false);\n try {\n const result = await signedUrlMutation.mutateAsync({ path: filePath, expiresIn });\n const fullUrl = result.url.startsWith('http')\n ? result.url\n : `${window.location.origin}${result.url}`;\n await navigator.clipboard.writeText(fullUrl);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // handled by mutation state\n }\n }\n\n return (\n <>\n {/* Fullscreen — opens image in a new tab */}\n\n {/* Panel */}\n <div className=\"w-[380px] shrink-0 border-l border-surface-border bg-surface overflow-y-auto\">\n {/* Header */}\n <div className=\"sticky top-0 bg-surface z-10 px-5 pt-5 pb-3 border-b border-surface-border\">\n <div className=\"flex items-center justify-between mb-3\">\n <h3 className=\"text-sm font-medium text-text-primary truncate pr-2\" title={fileName(filePath)}>\n {fileName(filePath)}\n </h3>\n <button onClick={onClose} className=\"text-text-tertiary hover:text-text-primary shrink-0\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Actions */}\n <div className=\"flex items-center gap-1 flex-wrap\">\n <button\n onClick={handleDownload}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Download\"\n >\n <Download className=\"w-3.5 h-3.5\" />\n <span>Download</span>\n </button>\n\n <a\n href={previewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Open in new tab\"\n >\n <ExternalLink className=\"w-3.5 h-3.5\" />\n <span>Open</span>\n </a>\n\n <div className=\"relative\">\n <button\n onClick={() => setShowShareMenu((v) => !v)}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs\"\n title=\"Share with signed URL\"\n >\n {copied ? <Check className=\"w-3.5 h-3.5 text-status-success\" /> : <Link className=\"w-3.5 h-3.5\" />}\n <span>{copied ? 'Copied' : 'Share'}</span>\n </button>\n {showShareMenu && (\n <div className=\"absolute top-full left-0 mt-1 bg-surface-raised border border-surface-border rounded-md shadow-lg py-1 z-20 min-w-[120px]\">\n {EXPIRY_OPTIONS.map((opt) => (\n <button\n key={opt.value}\n onClick={() => handleShare(opt.value)}\n className=\"w-full text-left px-3 py-1.5 text-xs text-text-secondary hover:bg-surface-hover hover:text-text-primary transition-colors\"\n >\n {opt.label}\n </button>\n ))}\n </div>\n )}\n </div>\n\n <button\n onClick={() => setConfirmDelete(true)}\n className=\"btn-ghost flex items-center gap-1.5 !px-2.5 !py-1.5 text-xs text-status-error/70 hover:text-status-error\"\n title=\"Delete file\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n <span>Delete</span>\n </button>\n </div>\n\n {/* Delete confirmation */}\n {confirmDelete && (\n <div className=\"mt-3 p-3 bg-status-error/5 border border-status-error/20 rounded-md\">\n <p className=\"text-xs text-text-primary mb-2\">\n Permanently delete <span className=\"font-medium\">{fileName(filePath)}</span>? This cannot be undone.\n </p>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirmDelete(false)}\n className=\"btn-secondary text-xs\"\n disabled={deleteMutation.isPending}\n >\n Cancel\n </button>\n <button\n onClick={async () => {\n try {\n await deleteMutation.mutateAsync(filePath);\n setConfirmDelete(false);\n onDeleted?.();\n } catch {\n // error shown below\n }\n }}\n className=\"btn-primary text-xs !bg-status-error hover:!bg-status-error/90\"\n disabled={deleteMutation.isPending}\n >\n {deleteMutation.isPending ? 'Deleting...' : 'Delete'}\n </button>\n </div>\n {deleteMutation.isError && (\n <p className=\"text-xs text-status-error mt-2\">{deleteMutation.error.message}</p>\n )}\n </div>\n )}\n\n {signedUrlMutation.isError && (\n <p className=\"text-xs text-status-error mt-2\">{signedUrlMutation.error.message}</p>\n )}\n </div>\n\n {/* Preview area */}\n <div className=\"p-5\">\n {isLoading ? (\n <div className=\"animate-pulse space-y-3\">\n <div className=\"h-48 bg-surface-sunken rounded\" />\n <div className=\"h-4 bg-surface-sunken rounded w-2/3\" />\n </div>\n ) : (\n <>\n {isImage && previewUrl && (\n <div\n className=\"mb-5 rounded-md border border-surface-border bg-surface-sunken overflow-hidden\"\n style={{ maxHeight: '400px' }}\n >\n <img\n src={previewUrl}\n alt={fileName(filePath)}\n className=\"w-full object-cover object-top\"\n style={{ maxHeight: '400px' }}\n />\n </div>\n )}\n\n {isText && previewUrl && (\n <div className=\"mb-5\">\n <TextPreview url={previewUrl} />\n </div>\n )}\n\n {isPdf && previewUrl && (\n <div className=\"mb-5 p-4 bg-surface-sunken rounded-md text-center\">\n <a\n href={previewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-accent hover:text-accent-hover text-sm font-medium\"\n >\n Open PDF in new tab\n </a>\n </div>\n )}\n\n {metadata && (\n <FileMetadataDisplay metadata={metadata} />\n )}\n </>\n )}\n </div>\n </div>\n </>\n );\n}\n","import { useState, useEffect, useCallback, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useSearchParams } from 'react-router-dom';\nimport {\n ChevronLeft,\n ChevronRight,\n Upload,\n UploadCloud,\n} from 'lucide-react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterInput } from '../../components/common/data/FilterBar';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { EmptyState } from '../../components/common/display/EmptyState';\nimport { DropZone } from '../../components/common/DropZone';\nimport { useFileBrowse, useUploadFile } from '../../api/files';\nimport { FileBreadcrumbs } from './FileBreadcrumbs';\nimport { FilePreviewPanel } from './FilePreviewPanel';\nimport { ListView } from './FileListViews';\n\nconst PAGE_SIZES = [25, 50, 100, 200];\n\nexport function FilesPage() {\n const [searchParams, setSearchParams] = useSearchParams();\n const prefix = searchParams.get('prefix') || '';\n const [search, setSearch] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const [selectedFile, setSelectedFile] = useState<string | null>(null);\n const [pageSize, setPageSize] = useState(100);\n const [tokenStack, setTokenStack] = useState<string[]>([]);\n const [currentToken, setCurrentToken] = useState<string | undefined>();\n\n // Debounce search — refines the prefix sent to S3\n useEffect(() => {\n const t = setTimeout(() => {\n setDebouncedSearch(search);\n setCurrentToken(undefined);\n setTokenStack([]);\n }, 300);\n return () => clearTimeout(t);\n }, [search]);\n\n const effectivePrefix = debouncedSearch\n ? `${prefix}${debouncedSearch}`\n : prefix;\n\n const { data, isLoading, isFetching, refetch } = useFileBrowse(effectivePrefix, pageSize, currentToken);\n const uploadMutation = useUploadFile();\n const queryClient = useQueryClient();\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n const [pendingFiles, setPendingFiles] = useState<File[] | null>(null);\n const [uploadPrefix, setUploadPrefix] = useState('');\n\n const handleUploadFiles = useCallback((files: File[]) => {\n setPendingFiles(files);\n setUploadPrefix(prefix);\n }, [prefix]);\n\n const [uploadError, setUploadError] = useState('');\n\n const confirmUpload = useCallback(() => {\n if (!pendingFiles) return;\n setUploadError('');\n let remaining = pendingFiles.length;\n for (const file of pendingFiles) {\n const targetPath = `${uploadPrefix}${file.name}`;\n uploadMutation.mutate({ path: targetPath, file }, {\n onSuccess: () => {\n remaining--;\n queryClient.invalidateQueries({ queryKey: ['fileBrowse'] });\n if (remaining <= 0) setPendingFiles(null);\n },\n onError: (err) => {\n remaining--;\n setUploadError(err.message);\n console.error('[Upload] failed:', targetPath, err);\n },\n });\n }\n }, [pendingFiles, uploadPrefix, uploadMutation, queryClient]);\n\n const directories = data?.directories ?? [];\n const files = data?.files ?? [];\n const nextToken = data?.nextToken;\n\n const navigateTo = useCallback((newPrefix: string) => {\n setSearch('');\n setDebouncedSearch('');\n setSelectedFile(null);\n setCurrentToken(undefined);\n setTokenStack([]);\n if (newPrefix) {\n setSearchParams({ prefix: newPrefix });\n } else {\n setSearchParams({});\n }\n }, [setSearchParams]);\n\n function goNextPage() {\n if (!nextToken) return;\n setTokenStack((prev) => [...prev, currentToken || '']);\n setCurrentToken(nextToken);\n }\n\n function goPrevPage() {\n if (tokenStack.length === 0) return;\n const prev = [...tokenStack];\n const token = prev.pop()!;\n setTokenStack(prev);\n setCurrentToken(token || undefined);\n }\n\n function changePageSize(size: number) {\n setPageSize(size);\n setCurrentToken(undefined);\n setTokenStack([]);\n }\n\n const isEmpty = directories.length === 0 && files.length === 0;\n const pageNum = tokenStack.length + 1;\n const hasNextPage = !!nextToken;\n const hasPrevPage = tokenStack.length > 0;\n\n const apiPath = `/file-browser/browse?prefix=${encodeURIComponent(effectivePrefix)}&pageSize=${pageSize}${currentToken ? `&continuationToken=${encodeURIComponent(currentToken)}` : ''}`;\n\n return (\n <DropZone onDrop={handleUploadFiles} label=\"Drop files to upload\">\n <div className=\"flex gap-0\">\n {/* Hidden file input for button-triggered upload */}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n const files = Array.from(e.target.files || []);\n if (files.length) handleUploadFiles(files);\n e.target.value = '';\n }}\n />\n\n {/* Main content */}\n <div className=\"flex-1 min-w-0 overflow-hidden\">\n <PageHeader\n title=\"Files\"\n docsHash=\"#docs:dashboard.md:files\"\n actions={\n <button\n onClick={() => fileInputRef.current?.click()}\n disabled={uploadMutation.isPending}\n className=\"btn-primary text-xs inline-flex items-center gap-1.5\"\n >\n <Upload className=\"w-3.5 h-3.5\" />\n {uploadMutation.isPending ? 'Uploading...' : 'Upload'}\n </button>\n }\n />\n\n <FileBreadcrumbs prefix={prefix} onNavigate={navigateTo} />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={apiPath}\n />\n }>\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder=\"Filter by prefix...\"\n />\n </FilterBar>\n\n {isLoading ? (\n <div className=\"animate-pulse space-y-2 mt-4\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-10 bg-surface-sunken rounded\" />\n ))}\n </div>\n ) : isEmpty ? (\n <div className=\"cursor-pointer\" onClick={() => fileInputRef.current?.click()}>\n <EmptyState\n icon={UploadCloud}\n title={search ? 'No matching files' : 'No files yet'}\n description={search ? undefined : 'Drop files here or click to upload'}\n />\n </div>\n ) : (\n <ListView\n directories={directories}\n files={files}\n onNavigate={navigateTo}\n onSelect={setSelectedFile}\n selectedFile={selectedFile}\n />\n )}\n\n {/* Cursor-based pagination */}\n {(hasPrevPage || hasNextPage || files.length > 0) && (\n <div className=\"flex items-center justify-between pt-4 pb-2\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs text-text-tertiary\">\n Page {pageNum} &middot; {files.length + directories.length} items\n </p>\n <select\n value={pageSize}\n onChange={(e) => changePageSize(parseInt(e.target.value))}\n className=\"select text-xs py-1\"\n >\n {PAGE_SIZES.map((size) => (\n <option key={size} value={size}>{size} / page</option>\n ))}\n </select>\n </div>\n {(hasPrevPage || hasNextPage) && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={goPrevPage}\n disabled={!hasPrevPage}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1\"\n >\n <ChevronLeft className=\"w-3.5 h-3.5\" />\n Previous\n </button>\n <button\n onClick={goNextPage}\n disabled={!hasNextPage}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed flex items-center gap-1\"\n >\n Next\n <ChevronRight className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Preview panel */}\n {selectedFile && (\n <FilePreviewPanel\n filePath={selectedFile}\n onClose={() => setSelectedFile(null)}\n onDeleted={() => { setSelectedFile(null); refetch(); }}\n />\n )}\n </div>\n {/* Upload confirmation dialog */}\n {pendingFiles && createPortal(\n <>\n <div className=\"fixed inset-0 z-40 bg-black/30\" onClick={() => setPendingFiles(null)} />\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n <div className=\"bg-surface-raised border border-surface-border rounded-lg shadow-lg w-full max-w-sm\">\n <div className=\"px-5 py-4 border-b border-surface-border\">\n <h3 className=\"text-sm font-medium text-text-primary\">Upload {pendingFiles.length} file{pendingFiles.length > 1 ? 's' : ''}</h3>\n </div>\n <div className=\"px-5 py-4 space-y-3\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Destination folder</label>\n <input\n type=\"text\"\n value={uploadPrefix}\n onChange={(e) => setUploadPrefix(e.target.value)}\n placeholder=\"e.g., images/ or leave empty for root\"\n className=\"input text-xs w-full font-mono\"\n />\n </div>\n <div className=\"text-[10px] text-text-quaternary space-y-0.5\">\n {pendingFiles.map((f, i) => (\n <p key={i} className=\"truncate\">{uploadPrefix}{f.name} <span className=\"text-text-tertiary\">({(f.size / 1024).toFixed(1)} KB)</span></p>\n ))}\n </div>\n {uploadError && <p className=\"text-xs text-status-error\">{uploadError}</p>}\n </div>\n <div className=\"flex justify-end gap-2 px-5 py-3 border-t border-surface-border\">\n <button onClick={() => setPendingFiles(null)} className=\"btn-ghost text-xs\">Cancel</button>\n <button onClick={confirmUpload} className=\"btn-primary text-xs\">\n <Upload className=\"w-3.5 h-3.5 mr-1.5 inline\" />\n Upload\n </button>\n </div>\n </div>\n </div>\n </>,\n document.body,\n )}\n </DropZone>\n );\n}\n"],"names":["useFileBrowse","prefix","pageSize","continuationToken","params","qs","useQuery","apiFetch","useFileMetadata","filePath","useGenerateSignedUrl","useMutation","data","useDeleteFile","useUploadFile","path","file","buffer","useFilePreviewUrl","FileBreadcrumbs","onNavigate","segments","jsxDEV","FolderOpen","segment","i","isLast","targetPrefix","ChevronRight","formatSize","bytes","fileName","MetaRow","label","value","mono","children","TextPreview","url","content","setContent","useState","error","setError","res","text","FileMetadataDisplay","metadata","copied","setCopied","copyToClipboard","Check","Copy","TimeAgo","triggerDownload","name","blob","blobUrl","a","fileIcon","ext","_a","Image","FileJson2","FileSpreadsheet","FileText","File","isImagePath","dirName","dirPath","stripped","fileNameFromPath","ListView","directories","files","onSelect","selectedFile","dir","Folder","EXPIRY_OPTIONS","FilePreviewPanel","onClose","onDeleted","isLoading","signedUrlMutation","deleteMutation","showShareMenu","setShowShareMenu","confirmDelete","setConfirmDelete","previewUrl","isImage","TEXT_EXTENSIONS","isText","_b","isPdf","handleDownload","result","fullUrl","handleShare","expiresIn","Fragment","X","Download","ExternalLink","v","Link","opt","Trash2","PAGE_SIZES","FilesPage","searchParams","setSearchParams","useSearchParams","search","setSearch","debouncedSearch","setDebouncedSearch","setSelectedFile","setPageSize","tokenStack","setTokenStack","currentToken","setCurrentToken","useEffect","t","effectivePrefix","isFetching","refetch","uploadMutation","queryClient","useQueryClient","fileInputRef","useRef","pendingFiles","setPendingFiles","uploadPrefix","setUploadPrefix","handleUploadFiles","useCallback","uploadError","setUploadError","confirmUpload","remaining","targetPath","err","nextToken","navigateTo","newPrefix","goNextPage","prev","goPrevPage","token","changePageSize","size","isEmpty","pageNum","hasNextPage","hasPrevPage","apiPath","DropZone","e","PageHeader","Upload","FilterBar","ListToolbar","FilterInput","_","EmptyState","UploadCloud","ChevronLeft","createPortal","f"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{b as w,j as a,S as n,J as F,d as T}from"./index-4T7Z_gQ4.js";import{u as C,a as N}from"./vendor-query-DLp59M9_.js";import{a as $}from"./vendor-react-Co3Y8ikm.js";import{a as R}from"./controlplane-0m_rA-UW.js";import{u as A}from"./useFilterParams-CGRYFw_A.js";import{D as L}from"./DataTable-DGerT2ZM.js";import{S as O}from"./StickyPagination-Ddy93Q5I.js";import{F as z,b as g,a as I}from"./FilterBar-TYiTtUgv.js";import{T as x}from"./TimestampCell-QtcYZ9Jx.js";import{P as J}from"./PageHeader-DF4BeEm4.js";import{L as q}from"./ListToolbar-BO5Igi6v.js";import{r as U,X as v}from"./vendor-icons-D8-ZINAH.js";import"./EmptyState-DMldv8c5.js";function W(e){const s=new URLSearchParams;return s.set("namespace",e.namespace),s.set("source",e.source),e.limit&&s.set("limit",String(e.limit)),e.offset&&s.set("offset",String(e.offset)),e.sort_by&&s.set("sort_by",e.sort_by),e.order&&s.set("order",e.order),e.status&&s.set("status",e.status),e.stream_name&&s.set("stream_name",e.stream_name),e.msg_type&&s.set("msg_type",e.msg_type),e.topic&&s.set("topic",e.topic),e.workflow_name&&s.set("workflow_name",e.workflow_name),e.jid&&s.set("jid",e.jid),e.aid&&s.set("aid",e.aid),w(`/controlplane/stream-messages?${s}`)}function B(e){return C({queryKey:["controlplane","stream-messages",e],queryFn:()=>W(e),enabled:!!e.namespace,staleTime:15e3})}const D={pending:"bg-text-tertiary",claimed:"bg-status-warning",processed:"bg-status-success",dead_lettered:"bg-status-error"},S={pending:"Pending",claimed:"Claimed",processed:"Processed",dead_lettered:"Dead Lettered"},y="inline-block px-1.5 py-0.5 text-[10px] font-mono rounded bg-surface-sunken text-text-secondary",H=[{value:"pending",label:"Pending"},{value:"claimed",label:"Claimed"},{value:"processed",label:"Processed"},{value:"dead_lettered",label:"Dead Lettered"}],K=[{value:"engine",label:"Engine"},{value:"worker",label:"Worker"}];function u({label:e,value:s}){return s?a.jsxDEV("div",{children:[a.jsxDEV("span",{className:"text-text-tertiary",children:e},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:12,columnNumber:7},this),a.jsxDEV("div",{className:"mt-0.5",children:a.jsxDEV(T,{date:s,format:"datetime"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:14,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:13,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:11,columnNumber:5},this):null}function c({label:e,value:s}){return s?a.jsxDEV("div",{children:[a.jsxDEV("span",{className:"text-text-tertiary",children:e},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:24,columnNumber:7},this),a.jsxDEV("p",{className:"text-xs text-text-primary font-mono break-all",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:25,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:23,columnNumber:5},this):null}function m({label:e,value:s,onFilter:r}){return s?a.jsxDEV("div",{children:[a.jsxDEV("span",{className:"text-text-tertiary",children:e},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:39,columnNumber:7},this),a.jsxDEV("button",{onClick:()=>r==null?void 0:r(s),className:"flex items-center gap-1 group text-left w-full",title:`Filter by ${e.toLowerCase()}: ${s}`,children:[a.jsxDEV("p",{className:"text-xs text-text-primary font-mono break-all group-hover:text-accent transition-colors",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:45,columnNumber:9},this),a.jsxDEV(U,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary opacity-0 group-hover:opacity-100 transition-opacity"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:46,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:40,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:38,columnNumber:5},this):null}function G({message:e,filters:s}){return e?a.jsxDEV("div",{className:"space-y-5 text-[11px]",children:[a.jsxDEV("div",{children:[a.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[a.jsxDEV("span",{className:`w-2 h-2 rounded-full shrink-0 ${D[e.status]}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:81,columnNumber:11},this),a.jsxDEV(m,{label:"",value:S[e.status],onFilter:()=>{var r;return(r=s==null?void 0:s.onFilterStatus)==null?void 0:r.call(s,e.status)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:82,columnNumber:11},this),a.jsxDEV("span",{className:y,children:e.source},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:87,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:80,columnNumber:9},this),a.jsxDEV(m,{label:"",value:e.stream_name,onFilter:()=>{var r;return(r=s==null?void 0:s.onFilterStreamName)==null?void 0:r.call(s,e.stream_name)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:89,columnNumber:9},this),a.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:["ID: ",e.id]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:94,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:79,columnNumber:7},this),a.jsxDEV("div",{className:"space-y-2",children:[a.jsxDEV(n,{children:"Timestamps"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:99,columnNumber:9},this),a.jsxDEV("div",{className:"grid grid-cols-1 gap-2",children:[a.jsxDEV(u,{label:"Created",value:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:101,columnNumber:11},this),a.jsxDEV(u,{label:"Reserved",value:e.reserved_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:102,columnNumber:11},this),a.jsxDEV(u,{label:"Processed",value:e.expired_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:103,columnNumber:11},this),a.jsxDEV(u,{label:"Dead-lettered",value:e.dead_lettered_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:104,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:100,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:98,columnNumber:7},this),a.jsxDEV("div",{className:"space-y-2",children:[a.jsxDEV(n,{children:"Metadata"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:110,columnNumber:9},this),a.jsxDEV("div",{className:"grid grid-cols-2 gap-2",children:[a.jsxDEV(c,{label:"Priority",value:String(e.priority)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:112,columnNumber:11},this),a.jsxDEV(c,{label:"Retries",value:`${e.retry_attempt} / ${e.max_retry_attempts}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:113,columnNumber:11},this),a.jsxDEV(c,{label:"Reserved by",value:e.reserved_by},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:114,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:111,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:109,columnNumber:7},this),e.jid&&a.jsxDEV("div",{className:"space-y-2",children:[a.jsxDEV(n,{children:"Job"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:121,columnNumber:11},this),a.jsxDEV("div",{className:"grid grid-cols-1 gap-2",children:a.jsxDEV(m,{label:"Job ID",value:e.jid,onFilter:s==null?void 0:s.onFilterJid},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:123,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:122,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:120,columnNumber:9},this),e.source==="worker"&&a.jsxDEV("div",{className:"space-y-2",children:[a.jsxDEV(n,{children:"Worker Details"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:131,columnNumber:11},this),a.jsxDEV("div",{className:"grid grid-cols-1 gap-2",children:[a.jsxDEV(m,{label:"Workflow",value:e.workflow_name,onFilter:s==null?void 0:s.onFilterWorkflow},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:133,columnNumber:13},this),a.jsxDEV(m,{label:"Activity",value:e.aid,onFilter:s==null?void 0:s.onFilterAid},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:134,columnNumber:13},this),a.jsxDEV(c,{label:"Dimension",value:e.dad},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:135,columnNumber:13},this),a.jsxDEV(m,{label:"Type",value:e.msg_type,onFilter:s==null?void 0:s.onFilterMsgType},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:136,columnNumber:13},this),a.jsxDEV(m,{label:"Topic",value:e.topic,onFilter:s==null?void 0:s.onFilterTopic},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:137,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:132,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:130,columnNumber:9},this),a.jsxDEV("div",{className:"space-y-2",children:a.jsxDEV(F,{data:e.message,label:"Payload",defaultCollapsed:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:144,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:143,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessageDetail.tsx",lineNumber:77,columnNumber:5},this):null}function oe(){const{filters:e,setFilter:s,pagination:r,sort:p,setSort:j}=A({filters:{namespace:"durable",source:"worker",status:"",stream_name:"",msg_type:"",topic:"",workflow_name:"",jid:"",aid:""}}),[l,h]=N.useState(null),{data:o}=R(),M=N.useMemo(()=>((o==null?void 0:o.apps)??[]).map(t=>({value:t.appId,label:t.appId})),[o]),{data:i,isLoading:E,refetch:V,isFetching:_}=B({namespace:e.namespace||"durable",source:e.source||"worker",limit:r.pageSize,offset:r.offset,sort_by:p.sort_by||"created_at",order:p.order||"desc",status:e.status||void 0,stream_name:e.stream_name||void 0,msg_type:e.msg_type||void 0,topic:e.topic||void 0,workflow_name:e.workflow_name||void 0,jid:e.jid||void 0,aid:e.aid||void 0}),b=(i==null?void 0:i.messages)??[],f=(i==null?void 0:i.total)??0,d=N.useMemo(()=>l?b.find(t=>t.id===l.id&&t.source===l.source)??l:null,[b,l]),P=!!d,k=[{key:"status",label:"Status",render:t=>a.jsxDEV("div",{className:"flex items-center gap-2",children:[a.jsxDEV("span",{className:`w-2 h-2 rounded-full shrink-0 ${D[t.status]}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:61,columnNumber:11},this),a.jsxDEV("span",{className:"text-xs",children:S[t.status]},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:62,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:60,columnNumber:9},this),className:"w-28"},{key:"source",label:"Source",render:t=>a.jsxDEV("span",{className:y,children:t.source},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:70,columnNumber:24},this),className:"w-20"},{key:"stream_name",label:"Stream",sortable:!0,render:t=>a.jsxDEV("span",{className:"font-mono text-xs text-text-secondary truncate block max-w-[240px]",title:t.stream_name,children:t.stream_name},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:78,columnNumber:9},this)},{key:"msg_type",label:"Type",render:t=>a.jsxDEV("span",{className:"text-xs text-text-secondary",children:t.msg_type||"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:87,columnNumber:9},this),className:"w-24"},{key:"created_at",label:"Created",sortable:!0,render:t=>a.jsxDEV(x,{date:t.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:95,columnNumber:24},this),className:"w-44"},{key:"reserved_at",label:"Reserved",render:t=>t.reserved_at?a.jsxDEV(x,{date:t.reserved_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:101,columnNumber:42},this):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:101,columnNumber:85},this),className:"w-44"},{key:"expired_at",label:"Processed",render:t=>t.expired_at?a.jsxDEV(x,{date:t.expired_at},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:107,columnNumber:41},this):a.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:107,columnNumber:83},this),className:"w-44"},{key:"priority",label:"Pri",sortable:!0,render:t=>a.jsxDEV("span",{className:"text-xs text-text-secondary",children:t.priority},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:114,columnNumber:24},this),className:"w-12 text-right"},{key:"retry_attempt",label:"Retries",render:t=>a.jsxDEV("span",{className:"text-xs text-text-secondary",children:[t.retry_attempt,"/",t.max_retry_attempts]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:121,columnNumber:9},this),className:"w-16"}];return a.jsxDEV("div",{children:[a.jsxDEV(J,{title:"Messages",docsHash:"#docs:dashboard.md:messages"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:131,columnNumber:7},this),a.jsxDEV(z,{actions:a.jsxDEV(q,{onRefresh:()=>V(),isFetching:_,apiPath:`/controlplane/stream-messages?namespace=${e.namespace||"durable"}&source=${e.source||"worker"}&limit=${r.pageSize}&offset=${r.offset}${e.status?`&status=${e.status}`:""}${e.stream_name?`&stream_name=${e.stream_name}`:""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:134,columnNumber:9},this),children:[a.jsxDEV(g,{label:"Namespace",value:e.namespace,onChange:t=>s("namespace",t),options:M,required:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:140,columnNumber:9},this),a.jsxDEV(g,{label:"Source",value:e.source,onChange:t=>s("source",t),options:K,required:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:147,columnNumber:9},this),a.jsxDEV(g,{label:"Status",value:e.status,onChange:t=>s("status",t),options:H},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:154,columnNumber:9},this),a.jsxDEV(I,{label:"Stream",value:e.stream_name,onChange:t=>s("stream_name",t),placeholder:"Filter by stream name…"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:160,columnNumber:9},this),[{key:"topic",label:"Topic",value:e.topic},{key:"workflow_name",label:"Workflow",value:e.workflow_name},{key:"jid",label:"Job",value:e.jid},{key:"aid",label:"Activity",value:e.aid},{key:"msg_type",label:"Type",value:e.msg_type}].filter(t=>t.value).map(t=>a.jsxDEV("button",{onClick:()=>s(t.key,""),className:"inline-flex items-center gap-1 px-2 py-0.5 text-[10px] font-mono rounded-full bg-accent/15 text-accent hover:bg-accent/25 transition-colors",title:`Clear ${t.label} filter`,children:[t.label,": ",t.value,a.jsxDEV(v,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:181,columnNumber:13},this)]},t.key,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:174,columnNumber:11},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:133,columnNumber:7},this),a.jsxDEV(L,{columns:k,data:b,keyFn:t=>`${t.source}:${t.id}`,isLoading:E,emptyMessage:"No stream messages found",onRowClick:t=>h(t),activeRowKey:d?`${d.source}:${d.id}`:null,sort:p,onSort:j},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:186,columnNumber:7},this),a.jsxDEV(O,{page:r.page,totalPages:r.totalPages(f),onPageChange:r.setPage,total:f,pageSize:r.pageSize,onPageSizeChange:r.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:198,columnNumber:7},this),P&&$.createPortal(a.jsxDEV("div",{className:"fixed right-0 bottom-0 w-[400px] z-40 border-l border-surface-border bg-surface overflow-y-auto shadow-lg",style:{top:"3.5rem"},children:[a.jsxDEV("div",{className:"sticky top-0 z-10 flex items-center justify-between px-4 py-3 bg-surface border-b border-surface-border/50",children:[a.jsxDEV("span",{className:"text-xs font-medium text-text-primary",children:"Message Detail"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:211,columnNumber:13},this),a.jsxDEV("button",{onClick:()=>h(null),className:"p-1 rounded hover:bg-surface-hover text-text-tertiary hover:text-text-primary transition-colors",title:"Close",children:a.jsxDEV(v,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:217,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:212,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:210,columnNumber:11},this),a.jsxDEV("div",{className:"px-4 py-4",children:a.jsxDEV(G,{message:d,filters:{onFilterStatus:t=>s("status",t),onFilterStreamName:t=>s("stream_name",t),onFilterMsgType:t=>s("msg_type",t),onFilterTopic:t=>s("topic",t),onFilterWorkflow:t=>s("workflow_name",t),onFilterJid:t=>s("jid",t),onFilterAid:t=>s("aid",t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:221,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:220,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:209,columnNumber:9},this),document.body)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/streams/StreamMessagesPage.tsx",lineNumber:130,columnNumber:5},this)}export{oe as StreamMessagesPage};
2
+ //# sourceMappingURL=index-CwkJBn87.js.map