@hotmeshio/long-tail 0.3.0 → 0.3.2

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 (314) hide show
  1. package/build/api/topics.d.ts +22 -0
  2. package/build/api/topics.js +104 -0
  3. package/build/index.d.ts +3 -1
  4. package/build/index.js +7 -2
  5. package/build/lib/db/schemas/001_schema.sql +3 -3
  6. package/build/lib/db/schemas/006_agent_sub_unique.sql +1 -0
  7. package/build/lib/db/schemas/007_topic_catalog.sql +27 -0
  8. package/build/routes/index.js +2 -0
  9. package/build/routes/topics.d.ts +2 -0
  10. package/build/routes/topics.js +90 -0
  11. package/build/services/topics/index.d.ts +77 -0
  12. package/build/services/topics/index.js +116 -0
  13. package/build/services/topics/sql.d.ts +10 -0
  14. package/build/services/topics/sql.js +80 -0
  15. package/build/services/topics/system-topics.d.ts +11 -0
  16. package/build/services/topics/system-topics.js +270 -0
  17. package/build/start/workers.js +5 -0
  18. package/build/system/mcp-servers/events.js +73 -1
  19. package/build/system/seed/tool-manifests-events.d.ts +75 -0
  20. package/build/system/seed/tool-manifests-events.js +27 -0
  21. package/build/tsconfig.tsbuildinfo +1 -1
  22. package/build/types/index.d.ts +2 -2
  23. package/build/types/startup.d.ts +27 -0
  24. package/dashboard/dist/assets/AdminDashboard-CbeSejVX.js +2 -0
  25. package/dashboard/dist/assets/{AdminDashboard-Bb6zouF5.js.map → AdminDashboard-CbeSejVX.js.map} +1 -1
  26. package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js +13 -0
  27. package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js.map +1 -0
  28. package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js +4 -0
  29. package/dashboard/dist/assets/{AgentDetailPage-WwA573u9.js.map → AgentDetailPage-Dbx2t-Uk.js.map} +1 -1
  30. package/dashboard/dist/assets/AgentsPage-Bz61Nl-x.js +2 -0
  31. package/dashboard/dist/assets/{AgentsPage-BZkZ_hXN.js.map → AgentsPage-Bz61Nl-x.js.map} +1 -1
  32. package/dashboard/dist/assets/AvailableEscalationsPage-DdrzePy4.js +2 -0
  33. package/dashboard/dist/assets/{AvailableEscalationsPage-C-Df3ZsZ.js.map → AvailableEscalationsPage-DdrzePy4.js.map} +1 -1
  34. package/dashboard/dist/assets/BotPicker-kKBifD1w.js +2 -0
  35. package/dashboard/dist/assets/{BotPicker-CwfVVWxh.js.map → BotPicker-kKBifD1w.js.map} +1 -1
  36. package/dashboard/dist/assets/CapabilitiesPage-Ch5qY0I7.js +2 -0
  37. package/dashboard/dist/assets/{CapabilitiesPage-DJEQ_5dV.js.map → CapabilitiesPage-Ch5qY0I7.js.map} +1 -1
  38. package/dashboard/dist/assets/CollapsibleSection-kYTBL7dT.js +2 -0
  39. package/dashboard/dist/assets/{CollapsibleSection-DaFQGU6S.js.map → CollapsibleSection-kYTBL7dT.js.map} +1 -1
  40. package/dashboard/dist/assets/ConfirmDeleteModal-CcaAapMl.js +2 -0
  41. package/dashboard/dist/assets/{ConfirmDeleteModal-dOxidrSR.js.map → ConfirmDeleteModal-CcaAapMl.js.map} +1 -1
  42. package/dashboard/dist/assets/CopyableId-B4CL12pv.js +2 -0
  43. package/dashboard/dist/assets/{CopyableId-DmLF-RqZ.js.map → CopyableId-B4CL12pv.js.map} +1 -1
  44. package/dashboard/dist/assets/CredentialsPage-D1VAlwid.js +2 -0
  45. package/dashboard/dist/assets/{CredentialsPage-D-tkqdhu.js.map → CredentialsPage-D1VAlwid.js.map} +1 -1
  46. package/dashboard/dist/assets/CronLabel-DRmO5rH0.js +2 -0
  47. package/dashboard/dist/assets/{CronLabel-C6iCjsXd.js.map → CronLabel-DRmO5rH0.js.map} +1 -1
  48. package/dashboard/dist/assets/CustomDurationPicker-C06QDDir.js +2 -0
  49. package/dashboard/dist/assets/{CustomDurationPicker--wCtBkmT.js.map → CustomDurationPicker-C06QDDir.js.map} +1 -1
  50. package/dashboard/dist/assets/DataTable-J5R6mepB.js +2 -0
  51. package/dashboard/dist/assets/{DataTable-D9yuBv0w.js.map → DataTable-J5R6mepB.js.map} +1 -1
  52. package/dashboard/dist/assets/DropZone-DwNj3GiG.js +2 -0
  53. package/dashboard/dist/assets/{DropZone-2mGyDo1P.js.map → DropZone-DwNj3GiG.js.map} +1 -1
  54. package/dashboard/dist/assets/ElapsedCell-ChyMzl9n.js +2 -0
  55. package/dashboard/dist/assets/{ElapsedCell-DKoH0bqR.js.map → ElapsedCell-ChyMzl9n.js.map} +1 -1
  56. package/dashboard/dist/assets/EmptyState-BXGvOADa.js +2 -0
  57. package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js.map → EmptyState-BXGvOADa.js.map} +1 -1
  58. package/dashboard/dist/assets/EscalationsOverview-DM6zmE4g.js +2 -0
  59. package/dashboard/dist/assets/{EscalationsOverview-C6A4Q9Ne.js.map → EscalationsOverview-DM6zmE4g.js.map} +1 -1
  60. package/dashboard/dist/assets/EventTable-CvJ98E8s.js +2 -0
  61. package/dashboard/dist/assets/{EventTable-DWxH0vMp.js.map → EventTable-CvJ98E8s.js.map} +1 -1
  62. package/dashboard/dist/assets/EventTopicPill-CB_rIGlL.js +2 -0
  63. package/dashboard/dist/assets/{EventTopicPill-BUxxvpNg.js.map → EventTopicPill-CB_rIGlL.js.map} +1 -1
  64. package/dashboard/dist/assets/FilterBar-Bdssa-Xn.js +2 -0
  65. package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-Bdssa-Xn.js.map} +1 -1
  66. package/dashboard/dist/assets/HomePage-BuZkdXZt.js +2 -0
  67. package/dashboard/dist/assets/{HomePage-Tlu1j8fK.js.map → HomePage-BuZkdXZt.js.map} +1 -1
  68. package/dashboard/dist/assets/ListToolbar-jy8NL6ll.js +2 -0
  69. package/dashboard/dist/assets/{ListToolbar-DuON-br0.js.map → ListToolbar-jy8NL6ll.js.map} +1 -1
  70. package/dashboard/dist/assets/McpOverview-xkaKuHbX.js +2 -0
  71. package/dashboard/dist/assets/{McpOverview-byott48x.js.map → McpOverview-xkaKuHbX.js.map} +1 -1
  72. package/dashboard/dist/assets/McpQueryDetailPage-D5ICn6cR.js +5 -0
  73. package/dashboard/dist/assets/{McpQueryDetailPage-ieZPpcPn.js.map → McpQueryDetailPage-D5ICn6cR.js.map} +1 -1
  74. package/dashboard/dist/assets/McpQueryPage-C46fzfm5.js +2 -0
  75. package/dashboard/dist/assets/{McpQueryPage-BOO0ACYO.js.map → McpQueryPage-C46fzfm5.js.map} +1 -1
  76. package/dashboard/dist/assets/McpRunDetailPage-Znsl4Yc-.js +2 -0
  77. package/dashboard/dist/assets/{McpRunDetailPage-Di8s7-u9.js.map → McpRunDetailPage-Znsl4Yc-.js.map} +1 -1
  78. package/dashboard/dist/assets/McpRunsPage-DT-armx5.js +2 -0
  79. package/dashboard/dist/assets/{McpRunsPage-DdUVqUFi.js.map → McpRunsPage-DT-armx5.js.map} +1 -1
  80. package/dashboard/dist/assets/Modal-C6k6_5KB.js +2 -0
  81. package/dashboard/dist/assets/{Modal-DEODGeqx.js.map → Modal-C6k6_5KB.js.map} +1 -1
  82. package/dashboard/dist/assets/OperatorDashboard-e5N3_dVl.js +2 -0
  83. package/dashboard/dist/assets/{OperatorDashboard-oGmDbNYv.js.map → OperatorDashboard-e5N3_dVl.js.map} +1 -1
  84. package/dashboard/dist/assets/PageHeader-COcgWWf-.js +2 -0
  85. package/dashboard/dist/assets/{PageHeader-DLjHNYHX.js.map → PageHeader-COcgWWf-.js.map} +1 -1
  86. package/dashboard/dist/assets/PageHeaderWithStats-C0PCY3aJ.js +2 -0
  87. package/dashboard/dist/assets/{PageHeaderWithStats-Oljg3n4j.js.map → PageHeaderWithStats-C0PCY3aJ.js.map} +1 -1
  88. package/dashboard/dist/assets/PriorityBadge-BQCsYMpM.js +2 -0
  89. package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-BQCsYMpM.js.map} +1 -1
  90. package/dashboard/dist/assets/ProcessDetailPage-C03LOgI0.js +2 -0
  91. package/dashboard/dist/assets/{ProcessDetailPage-Da-miMYZ.js.map → ProcessDetailPage-C03LOgI0.js.map} +1 -1
  92. package/dashboard/dist/assets/ProcessesListPage-iyPsmlhm.js +2 -0
  93. package/dashboard/dist/assets/{ProcessesListPage-CW-2yFw_.js.map → ProcessesListPage-iyPsmlhm.js.map} +1 -1
  94. package/dashboard/dist/assets/RolePill-CHwys1f9.js +2 -0
  95. package/dashboard/dist/assets/{RolePill-Bp10-WfX.js.map → RolePill-CHwys1f9.js.map} +1 -1
  96. package/dashboard/dist/assets/RolesPage-Bmc3XaUk.js +2 -0
  97. package/dashboard/dist/assets/{RolesPage-Bg_hEu9H.js.map → RolesPage-Bmc3XaUk.js.map} +1 -1
  98. package/dashboard/dist/assets/RowActions-Bs4PF-Gd.js +2 -0
  99. package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-Bs4PF-Gd.js.map} +1 -1
  100. package/dashboard/dist/assets/RunAsSelector-DXzAr2WW.js +2 -0
  101. package/dashboard/dist/assets/{RunAsSelector-hYP59xHH.js.map → RunAsSelector-DXzAr2WW.js.map} +1 -1
  102. package/dashboard/dist/assets/ServerName-BIdLC1Ay.js +2 -0
  103. package/dashboard/dist/assets/{ServerName-C9lUCFYb.js.map → ServerName-BIdLC1Ay.js.map} +1 -1
  104. package/dashboard/dist/assets/StatCard-OKzRSSx4.js +2 -0
  105. package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-OKzRSSx4.js.map} +1 -1
  106. package/dashboard/dist/assets/StatusBadge-CQlF46RR.js +2 -0
  107. package/dashboard/dist/assets/{StatusBadge-XQlNFwmH.js.map → StatusBadge-CQlF46RR.js.map} +1 -1
  108. package/dashboard/dist/assets/StepIndicator-CP7eycjI.js +2 -0
  109. package/dashboard/dist/assets/{StepIndicator-CuUIGxKk.js.map → StepIndicator-CP7eycjI.js.map} +1 -1
  110. package/dashboard/dist/assets/StickyPagination-CGk8VAKt.js +2 -0
  111. package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CGk8VAKt.js.map} +1 -1
  112. package/dashboard/dist/assets/SwimlaneTimeline-MEUPc3yJ.js +2 -0
  113. package/dashboard/dist/assets/{SwimlaneTimeline-2JHwAM2f.js.map → SwimlaneTimeline-MEUPc3yJ.js.map} +1 -1
  114. package/dashboard/dist/assets/TagInput-BGxXKiWD.js +2 -0
  115. package/dashboard/dist/assets/{TagInput-Dkljw_WI.js.map → TagInput-BGxXKiWD.js.map} +1 -1
  116. package/dashboard/dist/assets/TaskDetailPage-pN5BXzYA.js +2 -0
  117. package/dashboard/dist/assets/TaskDetailPage-pN5BXzYA.js.map +1 -0
  118. package/dashboard/dist/assets/TaskQueuePill-bw8ieKsf.js +2 -0
  119. package/dashboard/dist/assets/{TaskQueuePill-DPwm25Cc.js.map → TaskQueuePill-bw8ieKsf.js.map} +1 -1
  120. package/dashboard/dist/assets/TasksListPage-D1INzcrA.js +2 -0
  121. package/dashboard/dist/assets/{TasksListPage-kCH4r-70.js.map → TasksListPage-D1INzcrA.js.map} +1 -1
  122. package/dashboard/dist/assets/TimeAgo-CywLVIBA.js +2 -0
  123. package/dashboard/dist/assets/{TimeAgo-RPbch7Te.js.map → TimeAgo-CywLVIBA.js.map} +1 -1
  124. package/dashboard/dist/assets/TimestampCell-B4Pc6f3A.js +2 -0
  125. package/dashboard/dist/assets/{TimestampCell-Dgpl-lKv.js.map → TimestampCell-B4Pc6f3A.js.map} +1 -1
  126. package/dashboard/dist/assets/ToolPill-DdLN3JOT.js +2 -0
  127. package/dashboard/dist/assets/{ToolPill-D_DIWFJ5.js.map → ToolPill-DdLN3JOT.js.map} +1 -1
  128. package/dashboard/dist/assets/ToolTestPanel-DusbUka5.js +2 -0
  129. package/dashboard/dist/assets/{ToolTestPanel-D1TWdZQi.js.map → ToolTestPanel-DusbUka5.js.map} +1 -1
  130. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js +9 -0
  131. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js.map +1 -0
  132. package/dashboard/dist/assets/TopicsPage-DbtrnQON.js +2 -0
  133. package/dashboard/dist/assets/TopicsPage-DbtrnQON.js.map +1 -0
  134. package/dashboard/dist/assets/UserName-CLbusknU.js +2 -0
  135. package/dashboard/dist/assets/{UserName-BXZGXJsU.js.map → UserName-CLbusknU.js.map} +1 -1
  136. package/dashboard/dist/assets/WorkflowExecutionPage-C61R-3Gg.js +2 -0
  137. package/dashboard/dist/assets/{WorkflowExecutionPage-DWlNYb2M.js.map → WorkflowExecutionPage-C61R-3Gg.js.map} +1 -1
  138. package/dashboard/dist/assets/WorkflowPill-7vt2F6wR.js +2 -0
  139. package/dashboard/dist/assets/{WorkflowPill-BbgVTGgI.js.map → WorkflowPill-7vt2F6wR.js.map} +1 -1
  140. package/dashboard/dist/assets/WorkflowsDashboard-BWiUNvyl.js +2 -0
  141. package/dashboard/dist/assets/{WorkflowsDashboard-Dgq8RcD6.js.map → WorkflowsDashboard-BWiUNvyl.js.map} +1 -1
  142. package/dashboard/dist/assets/WorkflowsOverview-DA2ZOs7D.js +2 -0
  143. package/dashboard/dist/assets/{WorkflowsOverview-DnInrUPO.js.map → WorkflowsOverview-DA2ZOs7D.js.map} +1 -1
  144. package/dashboard/dist/assets/YamlWorkflowsPage-CLebf2eL.js +2 -0
  145. package/dashboard/dist/assets/{YamlWorkflowsPage-z1Z9J-mc.js.map → YamlWorkflowsPage-CLebf2eL.js.map} +1 -1
  146. package/dashboard/dist/assets/{agents-C9RLPt1z.js → agents-Dga6NU7U.js} +2 -2
  147. package/dashboard/dist/assets/{agents-C9RLPt1z.js.map → agents-Dga6NU7U.js.map} +1 -1
  148. package/dashboard/dist/assets/{bots-zyUDnQhH.js → bots-CtU4i4OQ.js} +2 -2
  149. package/dashboard/dist/assets/{bots-zyUDnQhH.js.map → bots-CtU4i4OQ.js.map} +1 -1
  150. package/dashboard/dist/assets/{controlplane-v-5KV6pl.js → controlplane-BVoALhbL.js} +2 -2
  151. package/dashboard/dist/assets/{controlplane-v-5KV6pl.js.map → controlplane-BVoALhbL.js.map} +1 -1
  152. package/dashboard/dist/assets/escalation-_N5GfuIi.js +2 -0
  153. package/dashboard/dist/assets/{escalation-BseAikei.js.map → escalation-_N5GfuIi.js.map} +1 -1
  154. package/dashboard/dist/assets/escalation-columns-CoTmTpHp.js +2 -0
  155. package/dashboard/dist/assets/{escalation-columns-Cs2CkkEs.js.map → escalation-columns-CoTmTpHp.js.map} +1 -1
  156. package/dashboard/dist/assets/helpers-Dz2U3Ctb.js +2 -0
  157. package/dashboard/dist/assets/{helpers-DVICI_VA.js.map → helpers-Dz2U3Ctb.js.map} +1 -1
  158. package/dashboard/dist/assets/index-6Kd78p_v.js +2 -0
  159. package/dashboard/dist/assets/{index-BzBZo8Sn.js.map → index-6Kd78p_v.js.map} +1 -1
  160. package/dashboard/dist/assets/index-B9ealjkt.js +6 -0
  161. package/dashboard/dist/assets/{index-CPpNn3z2.js.map → index-B9ealjkt.js.map} +1 -1
  162. package/dashboard/dist/assets/index-BIUHY2Jz.css +1 -0
  163. package/dashboard/dist/assets/index-BWHDW_CF.js +2 -0
  164. package/dashboard/dist/assets/{index-XCEX7Zof.js.map → index-BWHDW_CF.js.map} +1 -1
  165. package/dashboard/dist/assets/index-BYwPVJv0.js +15 -0
  166. package/dashboard/dist/assets/{index-M17tP_HX.js.map → index-BYwPVJv0.js.map} +1 -1
  167. package/dashboard/dist/assets/index-CCOSf1PY.js +281 -0
  168. package/dashboard/dist/assets/index-CCOSf1PY.js.map +1 -0
  169. package/dashboard/dist/assets/index-CS61sh5q.js +2 -0
  170. package/dashboard/dist/assets/{index-BP76o_S8.js.map → index-CS61sh5q.js.map} +1 -1
  171. package/dashboard/dist/assets/index-CtbG3UN-.js +5 -0
  172. package/dashboard/dist/assets/{index-DVFm5329.js.map → index-CtbG3UN-.js.map} +1 -1
  173. package/dashboard/dist/assets/index-DWUunWxh.js +2 -0
  174. package/dashboard/dist/assets/{index-DyqdoZPY.js.map → index-DWUunWxh.js.map} +1 -1
  175. package/dashboard/dist/assets/index-D_H_Prht.js +2 -0
  176. package/dashboard/dist/assets/{index-C0TSBQw8.js.map → index-D_H_Prht.js.map} +1 -1
  177. package/dashboard/dist/assets/index-Dpjguclc.js +2 -0
  178. package/dashboard/dist/assets/{index-DDFK1A8T.js.map → index-Dpjguclc.js.map} +1 -1
  179. package/dashboard/dist/assets/index-QicYdUsl.js +2 -0
  180. package/dashboard/dist/assets/{index-tK8lfgAj.js.map → index-QicYdUsl.js.map} +1 -1
  181. package/dashboard/dist/assets/index-dM-OgCY3.js +2 -0
  182. package/dashboard/dist/assets/{index-D2tDlpuv.js.map → index-dM-OgCY3.js.map} +1 -1
  183. package/dashboard/dist/assets/{knowledge-BhK8xuod.js → knowledge-DJlebU82.js} +2 -2
  184. package/dashboard/dist/assets/{knowledge-BhK8xuod.js.map → knowledge-DJlebU82.js.map} +1 -1
  185. package/dashboard/dist/assets/{mcp-CWFliwjc.js → mcp-CsLJ5SRm.js} +2 -2
  186. package/dashboard/dist/assets/{mcp-CWFliwjc.js.map → mcp-CsLJ5SRm.js.map} +1 -1
  187. package/dashboard/dist/assets/{mcp-query-Dm7_m5Fi.js → mcp-query-WNK1ItRV.js} +2 -2
  188. package/dashboard/dist/assets/{mcp-query-Dm7_m5Fi.js.map → mcp-query-WNK1ItRV.js.map} +1 -1
  189. package/dashboard/dist/assets/{mcp-runs-aBDudwEi.js → mcp-runs-DtTTsuPH.js} +2 -2
  190. package/dashboard/dist/assets/{mcp-runs-aBDudwEi.js.map → mcp-runs-DtTTsuPH.js.map} +1 -1
  191. package/dashboard/dist/assets/namespaces-iRejH3_A.js +2 -0
  192. package/dashboard/dist/assets/{namespaces-C45c4uoO.js.map → namespaces-iRejH3_A.js.map} +1 -1
  193. package/dashboard/dist/assets/{roles-BMAzzeHR.js → roles-3Jm5KtKc.js} +2 -2
  194. package/dashboard/dist/assets/{roles-BMAzzeHR.js.map → roles-3Jm5KtKc.js.map} +1 -1
  195. package/dashboard/dist/assets/settings-DmN2I-c6.js +2 -0
  196. package/dashboard/dist/assets/{settings-D0v7RI3o.js.map → settings-DmN2I-c6.js.map} +1 -1
  197. package/dashboard/dist/assets/{tasks-DwEUQ6my.js → tasks-Cc-QoITQ.js} +2 -2
  198. package/dashboard/dist/assets/{tasks-DwEUQ6my.js.map → tasks-Cc-QoITQ.js.map} +1 -1
  199. package/dashboard/dist/assets/topics-p8anbgi0.js +2 -0
  200. package/dashboard/dist/assets/topics-p8anbgi0.js.map +1 -0
  201. package/dashboard/dist/assets/{useEventHooks-BccPxFR6.js → useEventHooks-VaJ52jMm.js} +2 -2
  202. package/dashboard/dist/assets/{useEventHooks-BccPxFR6.js.map → useEventHooks-VaJ52jMm.js.map} +1 -1
  203. package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js → useExpandedRows-Cg9iq6Vy.js} +2 -2
  204. package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js.map → useExpandedRows-Cg9iq6Vy.js.map} +1 -1
  205. package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js → useFilterParams-CGRYFw_A.js} +2 -2
  206. package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js.map → useFilterParams-CGRYFw_A.js.map} +1 -1
  207. package/dashboard/dist/assets/{useYamlActivityEvents-BBioXSKA.js → useYamlActivityEvents-BU4Uhksl.js} +2 -2
  208. package/dashboard/dist/assets/{useYamlActivityEvents-BBioXSKA.js.map → useYamlActivityEvents-BU4Uhksl.js.map} +1 -1
  209. package/dashboard/dist/assets/{users-CCHT00of.js → users-oXOlnold.js} +2 -2
  210. package/dashboard/dist/assets/{users-CCHT00of.js.map → users-oXOlnold.js.map} +1 -1
  211. package/dashboard/dist/assets/{vendor-icons-E6836lXZ.js → vendor-icons-CBOM6Es0.js} +100 -95
  212. package/dashboard/dist/assets/vendor-icons-CBOM6Es0.js.map +1 -0
  213. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
  214. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
  215. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
  216. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
  217. package/dashboard/dist/assets/{workflows-DNZf6Pmq.js → workflows-Yq7cK-vR.js} +2 -2
  218. package/dashboard/dist/assets/{workflows-DNZf6Pmq.js.map → workflows-Yq7cK-vR.js.map} +1 -1
  219. package/dashboard/dist/assets/{yaml-workflows-BKZdGciI.js → yaml-workflows-Ch53yD43.js} +2 -2
  220. package/dashboard/dist/assets/{yaml-workflows-BKZdGciI.js.map → yaml-workflows-Ch53yD43.js.map} +1 -1
  221. package/dashboard/dist/index.html +5 -5
  222. package/docs/agents.md +6 -0
  223. package/docs/api/http/topics.md +164 -0
  224. package/docs/api/sdk/topics.md +204 -0
  225. package/docs/dashboard.md +22 -0
  226. package/docs/events.md +7 -0
  227. package/docs/sdk.md +15 -0
  228. package/docs/topics.md +154 -0
  229. package/package.json +2 -2
  230. package/dashboard/dist/assets/AdminDashboard-Bb6zouF5.js +0 -2
  231. package/dashboard/dist/assets/AgentConfigPage-DqHEK73E.js +0 -13
  232. package/dashboard/dist/assets/AgentConfigPage-DqHEK73E.js.map +0 -1
  233. package/dashboard/dist/assets/AgentDetailPage-WwA573u9.js +0 -4
  234. package/dashboard/dist/assets/AgentsPage-BZkZ_hXN.js +0 -2
  235. package/dashboard/dist/assets/AvailableEscalationsPage-C-Df3ZsZ.js +0 -2
  236. package/dashboard/dist/assets/BotPicker-CwfVVWxh.js +0 -2
  237. package/dashboard/dist/assets/CapabilitiesPage-DJEQ_5dV.js +0 -2
  238. package/dashboard/dist/assets/CollapsibleSection-DaFQGU6S.js +0 -2
  239. package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +0 -2
  240. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +0 -2
  241. package/dashboard/dist/assets/CredentialsPage-D-tkqdhu.js +0 -2
  242. package/dashboard/dist/assets/CronLabel-C6iCjsXd.js +0 -2
  243. package/dashboard/dist/assets/CustomDurationPicker--wCtBkmT.js +0 -2
  244. package/dashboard/dist/assets/DataTable-D9yuBv0w.js +0 -2
  245. package/dashboard/dist/assets/DropZone-2mGyDo1P.js +0 -2
  246. package/dashboard/dist/assets/ElapsedCell-DKoH0bqR.js +0 -2
  247. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +0 -2
  248. package/dashboard/dist/assets/EscalationsOverview-C6A4Q9Ne.js +0 -2
  249. package/dashboard/dist/assets/EventTable-DWxH0vMp.js +0 -2
  250. package/dashboard/dist/assets/EventTopicPill-BUxxvpNg.js +0 -2
  251. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
  252. package/dashboard/dist/assets/HomePage-Tlu1j8fK.js +0 -2
  253. package/dashboard/dist/assets/ListToolbar-DuON-br0.js +0 -2
  254. package/dashboard/dist/assets/McpOverview-byott48x.js +0 -2
  255. package/dashboard/dist/assets/McpQueryDetailPage-ieZPpcPn.js +0 -5
  256. package/dashboard/dist/assets/McpQueryPage-BOO0ACYO.js +0 -2
  257. package/dashboard/dist/assets/McpRunDetailPage-Di8s7-u9.js +0 -2
  258. package/dashboard/dist/assets/McpRunsPage-DdUVqUFi.js +0 -2
  259. package/dashboard/dist/assets/Modal-DEODGeqx.js +0 -2
  260. package/dashboard/dist/assets/OperatorDashboard-oGmDbNYv.js +0 -2
  261. package/dashboard/dist/assets/PageHeader-DLjHNYHX.js +0 -2
  262. package/dashboard/dist/assets/PageHeaderWithStats-Oljg3n4j.js +0 -2
  263. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
  264. package/dashboard/dist/assets/ProcessDetailPage-Da-miMYZ.js +0 -2
  265. package/dashboard/dist/assets/ProcessesListPage-CW-2yFw_.js +0 -2
  266. package/dashboard/dist/assets/RolePill-Bp10-WfX.js +0 -2
  267. package/dashboard/dist/assets/RolesPage-Bg_hEu9H.js +0 -2
  268. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
  269. package/dashboard/dist/assets/RunAsSelector-hYP59xHH.js +0 -2
  270. package/dashboard/dist/assets/ServerName-C9lUCFYb.js +0 -2
  271. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
  272. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +0 -2
  273. package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +0 -2
  274. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
  275. package/dashboard/dist/assets/SwimlaneTimeline-2JHwAM2f.js +0 -2
  276. package/dashboard/dist/assets/TagInput-Dkljw_WI.js +0 -2
  277. package/dashboard/dist/assets/TaskDetailPage--9FEVeTB.js +0 -2
  278. package/dashboard/dist/assets/TaskDetailPage--9FEVeTB.js.map +0 -1
  279. package/dashboard/dist/assets/TaskQueuePill-DPwm25Cc.js +0 -2
  280. package/dashboard/dist/assets/TasksListPage-kCH4r-70.js +0 -2
  281. package/dashboard/dist/assets/TimeAgo-RPbch7Te.js +0 -2
  282. package/dashboard/dist/assets/TimestampCell-Dgpl-lKv.js +0 -2
  283. package/dashboard/dist/assets/ToolPill-D_DIWFJ5.js +0 -2
  284. package/dashboard/dist/assets/ToolTestPanel-D1TWdZQi.js +0 -2
  285. package/dashboard/dist/assets/UserName-BXZGXJsU.js +0 -2
  286. package/dashboard/dist/assets/WorkflowExecutionPage-DWlNYb2M.js +0 -2
  287. package/dashboard/dist/assets/WorkflowPill-BbgVTGgI.js +0 -2
  288. package/dashboard/dist/assets/WorkflowsDashboard-Dgq8RcD6.js +0 -2
  289. package/dashboard/dist/assets/WorkflowsOverview-DnInrUPO.js +0 -2
  290. package/dashboard/dist/assets/YamlWorkflowsPage-z1Z9J-mc.js +0 -2
  291. package/dashboard/dist/assets/escalation-BseAikei.js +0 -2
  292. package/dashboard/dist/assets/escalation-columns-Cs2CkkEs.js +0 -2
  293. package/dashboard/dist/assets/helpers-DVICI_VA.js +0 -2
  294. package/dashboard/dist/assets/index-BMIU7Im5.js +0 -63
  295. package/dashboard/dist/assets/index-BMIU7Im5.js.map +0 -1
  296. package/dashboard/dist/assets/index-BP76o_S8.js +0 -2
  297. package/dashboard/dist/assets/index-BciXgS35.css +0 -1
  298. package/dashboard/dist/assets/index-BzBZo8Sn.js +0 -2
  299. package/dashboard/dist/assets/index-C0TSBQw8.js +0 -2
  300. package/dashboard/dist/assets/index-CPpNn3z2.js +0 -6
  301. package/dashboard/dist/assets/index-D2tDlpuv.js +0 -2
  302. package/dashboard/dist/assets/index-DDFK1A8T.js +0 -2
  303. package/dashboard/dist/assets/index-DVFm5329.js +0 -5
  304. package/dashboard/dist/assets/index-DyqdoZPY.js +0 -2
  305. package/dashboard/dist/assets/index-M17tP_HX.js +0 -15
  306. package/dashboard/dist/assets/index-XCEX7Zof.js +0 -2
  307. package/dashboard/dist/assets/index-tK8lfgAj.js +0 -2
  308. package/dashboard/dist/assets/namespaces-C45c4uoO.js +0 -2
  309. package/dashboard/dist/assets/settings-D0v7RI3o.js +0 -2
  310. package/dashboard/dist/assets/vendor-icons-E6836lXZ.js.map +0 -1
  311. package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
  312. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
  313. package/dashboard/dist/assets/vendor-react-CX88sFS5.js +0 -22
  314. package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RolesPage-Bg_hEu9H.js","sources":["../../src/pages/admin/roles/CreateRoleModal.tsx","../../src/pages/admin/roles/EscalationPanel.tsx","../../src/pages/admin/roles/RoleColumns.tsx","../../src/pages/admin/roles/RolesPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useCreateRole } from '../../../api/roles';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateRoleModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createRole = useCreateRole();\n const [roleName, setRoleName] = useState('');\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) {\n setRoleName('');\n createRole.reset();\n }\n }\n\n const handleCreate = () => {\n const trimmed = roleName.trim().toLowerCase();\n if (!trimmed) return;\n createRole.mutate(trimmed, { onSuccess: onClose });\n };\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create Role\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Role Name (required)\n </label>\n <input\n type=\"text\"\n value={roleName}\n onChange={(e) => setRoleName(e.target.value)}\n placeholder=\"e.g., reviewer\"\n className=\"input text-xs w-full\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreate();\n }}\n />\n <p className=\"text-[10px] text-text-tertiary mt-1\">\n Lowercase letters, numbers, hyphens, and underscores only.\n </p>\n </div>\n\n {createRole.error && (\n <p className=\"text-xs text-status-error\">{(createRole.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!roleName.trim() || createRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {createRole.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState, useMemo } from 'react';\nimport {\n useEscalationChains,\n useAddEscalationChain,\n useRemoveEscalationChain,\n} from '../../../api/roles';\n\nexport function EscalationPanel({\n selectedRole,\n allRoles,\n}: {\n selectedRole: string | null;\n allRoles: string[];\n}) {\n const { data: chainsData } = useEscalationChains();\n const addChain = useAddEscalationChain();\n const removeChain = useRemoveEscalationChain();\n const [newTarget, setNewTarget] = useState('');\n\n const chains = chainsData?.chains ?? [];\n\n const targets = useMemo(() => {\n if (!selectedRole) return [];\n return chains.filter((c) => c.source_role === selectedRole).map((c) => c.target_role);\n }, [chains, selectedRole]);\n\n const available = useMemo(() => {\n if (!selectedRole) return [];\n return allRoles.filter((r) => r !== selectedRole && r !== 'superadmin' && !targets.includes(r));\n }, [allRoles, selectedRole, targets]);\n\n const handleAdd = () => {\n if (!selectedRole || !newTarget.trim()) return;\n addChain.mutate(\n { source_role: selectedRole, target_role: newTarget.trim() },\n { onSuccess: () => setNewTarget('') },\n );\n };\n\n const handleRemove = (target: string) => {\n if (!selectedRole) return;\n removeChain.mutate({ source_role: selectedRole, target_role: target });\n };\n\n const isSuperAdmin = selectedRole === 'superadmin';\n\n return (\n <div className=\"border-l border-surface-border pl-6 min-h-[300px]\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4\">\n Escalation Routing\n </p>\n\n {!selectedRole ? (\n <p className=\"text-xs text-text-tertiary\">\n Select a role to manage its escalation targets.\n </p>\n ) : isSuperAdmin ? (\n <div>\n <p className=\"text-sm font-mono text-text-primary mb-2\">{selectedRole}</p>\n <p className=\"text-xs text-text-tertiary\">\n Superadmins can escalate to any role implicitly.\n </p>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm font-mono text-text-primary\">{selectedRole}</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">Can escalate to:</p>\n </div>\n\n {targets.length === 0 ? (\n <p className=\"text-xs text-text-tertiary\">\n No escalation targets configured.\n </p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {targets.map((target) => (\n <span\n key={target}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary font-mono\"\n >\n {target}\n <button\n onClick={() => handleRemove(target)}\n className=\"text-text-tertiary hover:text-status-error transition-colors\"\n title={`Remove ${target}`}\n >\n &times;\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"pt-3 border-t border-surface-border\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">\n Add Target\n </p>\n <div className=\"flex items-center gap-2\">\n <select\n value={newTarget}\n onChange={(e) => setNewTarget(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <button\n onClick={handleAdd}\n disabled={!newTarget || addChain.isPending}\n className=\"btn-primary text-xs\"\n >\n {addChain.isPending ? 'Adding...' : 'Add'}\n </button>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { Trash2 } from 'lucide-react';\nimport { type RoleDetail } from '../../../api/roles';\nimport { type Column } from '../../../components/common/data/DataTable';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\n\nexport function getRoleColumns(\n onDelete: (row: RoleDetail) => void,\n): Column<RoleDetail>[] {\n return [\n {\n key: 'role',\n label: 'Role',\n render: (row) => <RolePill role={row.role} />,\n },\n {\n key: 'user_count',\n label: 'Users',\n render: (row) =>\n row.user_count > 0\n ? <span className=\"text-text-primary\">{row.user_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-24 text-right',\n },\n {\n key: 'chain_count',\n label: 'Escalations',\n render: (row) =>\n row.chain_count > 0\n ? <span className=\"text-text-primary\">{row.chain_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-28 text-right',\n },\n {\n key: 'workflow_count',\n label: 'Workflows',\n render: (row) =>\n row.workflow_count > 0\n ? <span className=\"text-text-primary\">{row.workflow_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-28 text-right',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => {\n const inUse = row.user_count > 0 || row.chain_count > 0 || row.workflow_count > 0;\n if (inUse) return null;\n return (\n <RowActionGroup>\n <RowAction\n icon={Trash2}\n title=\"Delete role\"\n onClick={() => onDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n );\n },\n className: 'w-16 text-right',\n },\n ];\n}\n","import { useState, useMemo } from 'react';\nimport { useRoleDetails, useDeleteRole, type RoleDetail } from '../../../api/roles';\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { CreateRoleModal } from './CreateRoleModal';\nimport { EscalationPanel } from './EscalationPanel';\nimport { getRoleColumns } from './RoleColumns';\n\nexport function RolesPage() {\n const { data, isLoading } = useRoleDetails();\n const deleteRole = useDeleteRole();\n\n const [showCreate, setShowCreate] = useState(false);\n const [confirmDelete, setConfirmDelete] = useState<RoleDetail | null>(null);\n const [selectedRole, setSelectedRole] = useState<string | null>(null);\n\n const roles = data?.roles ?? [];\n const allRoleNames = useMemo(() => roles.map((r) => r.role), [roles]);\n\n const columns = getRoleColumns((row) => setConfirmDelete(row));\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteRole.mutate(confirmDelete.role, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n return (\n <div>\n <PageHeader\n title=\"Roles\"\n docsHash=\"#docs:dashboard.md:roles-and-permissions\"\n actions={\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Role\n </button>\n }\n />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6\">\n <div>\n <DataTable\n columns={columns}\n data={roles}\n keyFn={(row) => row.role}\n isLoading={isLoading}\n emptyMessage=\"No roles found\"\n onRowClick={(row) => setSelectedRole(row.role)}\n activeRowKey={selectedRole}\n />\n </div>\n\n <EscalationPanel selectedRole={selectedRole} allRoles={allRoleNames} />\n </div>\n\n <CreateRoleModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete Role\"\n description={\n <>\n Delete role{' '}\n <span className=\"font-medium font-mono text-text-primary\">\n {confirmDelete?.role}\n </span>\n ? This action cannot be undone.\n </>\n }\n isPending={deleteRole.isPending}\n error={deleteRole.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["CreateRoleModal","open","onClose","createRole","useCreateRole","roleName","setRoleName","useState","prevOpen","setPrevOpen","handleCreate","trimmed","jsx","Modal","jsxs","e","EscalationPanel","selectedRole","allRoles","chainsData","useEscalationChains","addChain","useAddEscalationChain","removeChain","useRemoveEscalationChain","newTarget","setNewTarget","chains","targets","useMemo","c","available","r","handleAdd","handleRemove","target","isSuperAdmin","getRoleColumns","onDelete","row","RolePill","RowActionGroup","RowAction","Trash2","RolesPage","data","isLoading","useRoleDetails","deleteRole","useDeleteRole","showCreate","setShowCreate","confirmDelete","setConfirmDelete","setSelectedRole","roles","allRoleNames","columns","handleDelete","PageHeader","DataTable","ConfirmDeleteModal","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"RolesPage-Bmc3XaUk.js","sources":["../../src/pages/admin/roles/CreateRoleModal.tsx","../../src/pages/admin/roles/EscalationPanel.tsx","../../src/pages/admin/roles/RoleColumns.tsx","../../src/pages/admin/roles/RolesPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useCreateRole } from '../../../api/roles';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateRoleModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createRole = useCreateRole();\n const [roleName, setRoleName] = useState('');\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) {\n setRoleName('');\n createRole.reset();\n }\n }\n\n const handleCreate = () => {\n const trimmed = roleName.trim().toLowerCase();\n if (!trimmed) return;\n createRole.mutate(trimmed, { onSuccess: onClose });\n };\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create Role\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Role Name (required)\n </label>\n <input\n type=\"text\"\n value={roleName}\n onChange={(e) => setRoleName(e.target.value)}\n placeholder=\"e.g., reviewer\"\n className=\"input text-xs w-full\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreate();\n }}\n />\n <p className=\"text-[10px] text-text-tertiary mt-1\">\n Lowercase letters, numbers, hyphens, and underscores only.\n </p>\n </div>\n\n {createRole.error && (\n <p className=\"text-xs text-status-error\">{(createRole.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!roleName.trim() || createRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {createRole.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState, useMemo } from 'react';\nimport {\n useEscalationChains,\n useAddEscalationChain,\n useRemoveEscalationChain,\n} from '../../../api/roles';\n\nexport function EscalationPanel({\n selectedRole,\n allRoles,\n}: {\n selectedRole: string | null;\n allRoles: string[];\n}) {\n const { data: chainsData } = useEscalationChains();\n const addChain = useAddEscalationChain();\n const removeChain = useRemoveEscalationChain();\n const [newTarget, setNewTarget] = useState('');\n\n const chains = chainsData?.chains ?? [];\n\n const targets = useMemo(() => {\n if (!selectedRole) return [];\n return chains.filter((c) => c.source_role === selectedRole).map((c) => c.target_role);\n }, [chains, selectedRole]);\n\n const available = useMemo(() => {\n if (!selectedRole) return [];\n return allRoles.filter((r) => r !== selectedRole && r !== 'superadmin' && !targets.includes(r));\n }, [allRoles, selectedRole, targets]);\n\n const handleAdd = () => {\n if (!selectedRole || !newTarget.trim()) return;\n addChain.mutate(\n { source_role: selectedRole, target_role: newTarget.trim() },\n { onSuccess: () => setNewTarget('') },\n );\n };\n\n const handleRemove = (target: string) => {\n if (!selectedRole) return;\n removeChain.mutate({ source_role: selectedRole, target_role: target });\n };\n\n const isSuperAdmin = selectedRole === 'superadmin';\n\n return (\n <div className=\"border-l border-surface-border pl-6 min-h-[300px]\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4\">\n Escalation Routing\n </p>\n\n {!selectedRole ? (\n <p className=\"text-xs text-text-tertiary\">\n Select a role to manage its escalation targets.\n </p>\n ) : isSuperAdmin ? (\n <div>\n <p className=\"text-sm font-mono text-text-primary mb-2\">{selectedRole}</p>\n <p className=\"text-xs text-text-tertiary\">\n Superadmins can escalate to any role implicitly.\n </p>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm font-mono text-text-primary\">{selectedRole}</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">Can escalate to:</p>\n </div>\n\n {targets.length === 0 ? (\n <p className=\"text-xs text-text-tertiary\">\n No escalation targets configured.\n </p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {targets.map((target) => (\n <span\n key={target}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary font-mono\"\n >\n {target}\n <button\n onClick={() => handleRemove(target)}\n className=\"text-text-tertiary hover:text-status-error transition-colors\"\n title={`Remove ${target}`}\n >\n &times;\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"pt-3 border-t border-surface-border\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">\n Add Target\n </p>\n <div className=\"flex items-center gap-2\">\n <select\n value={newTarget}\n onChange={(e) => setNewTarget(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <button\n onClick={handleAdd}\n disabled={!newTarget || addChain.isPending}\n className=\"btn-primary text-xs\"\n >\n {addChain.isPending ? 'Adding...' : 'Add'}\n </button>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { Trash2 } from 'lucide-react';\nimport { type RoleDetail } from '../../../api/roles';\nimport { type Column } from '../../../components/common/data/DataTable';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\n\nexport function getRoleColumns(\n onDelete: (row: RoleDetail) => void,\n): Column<RoleDetail>[] {\n return [\n {\n key: 'role',\n label: 'Role',\n render: (row) => <RolePill role={row.role} />,\n },\n {\n key: 'user_count',\n label: 'Users',\n render: (row) =>\n row.user_count > 0\n ? <span className=\"text-text-primary\">{row.user_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-24 text-right',\n },\n {\n key: 'chain_count',\n label: 'Escalations',\n render: (row) =>\n row.chain_count > 0\n ? <span className=\"text-text-primary\">{row.chain_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-28 text-right',\n },\n {\n key: 'workflow_count',\n label: 'Workflows',\n render: (row) =>\n row.workflow_count > 0\n ? <span className=\"text-text-primary\">{row.workflow_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-28 text-right',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => {\n const inUse = row.user_count > 0 || row.chain_count > 0 || row.workflow_count > 0;\n if (inUse) return null;\n return (\n <RowActionGroup>\n <RowAction\n icon={Trash2}\n title=\"Delete role\"\n onClick={() => onDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n );\n },\n className: 'w-16 text-right',\n },\n ];\n}\n","import { useState, useMemo } from 'react';\nimport { useRoleDetails, useDeleteRole, type RoleDetail } from '../../../api/roles';\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { CreateRoleModal } from './CreateRoleModal';\nimport { EscalationPanel } from './EscalationPanel';\nimport { getRoleColumns } from './RoleColumns';\n\nexport function RolesPage() {\n const { data, isLoading } = useRoleDetails();\n const deleteRole = useDeleteRole();\n\n const [showCreate, setShowCreate] = useState(false);\n const [confirmDelete, setConfirmDelete] = useState<RoleDetail | null>(null);\n const [selectedRole, setSelectedRole] = useState<string | null>(null);\n\n const roles = data?.roles ?? [];\n const allRoleNames = useMemo(() => roles.map((r) => r.role), [roles]);\n\n const columns = getRoleColumns((row) => setConfirmDelete(row));\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteRole.mutate(confirmDelete.role, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n return (\n <div>\n <PageHeader\n title=\"Roles\"\n docsHash=\"#docs:dashboard.md:roles-and-permissions\"\n actions={\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Role\n </button>\n }\n />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6\">\n <div>\n <DataTable\n columns={columns}\n data={roles}\n keyFn={(row) => row.role}\n isLoading={isLoading}\n emptyMessage=\"No roles found\"\n onRowClick={(row) => setSelectedRole(row.role)}\n activeRowKey={selectedRole}\n />\n </div>\n\n <EscalationPanel selectedRole={selectedRole} allRoles={allRoleNames} />\n </div>\n\n <CreateRoleModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete Role\"\n description={\n <>\n Delete role{' '}\n <span className=\"font-medium font-mono text-text-primary\">\n {confirmDelete?.role}\n </span>\n ? This action cannot be undone.\n </>\n }\n isPending={deleteRole.isPending}\n error={deleteRole.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["CreateRoleModal","open","onClose","createRole","useCreateRole","roleName","setRoleName","useState","prevOpen","setPrevOpen","handleCreate","trimmed","jsxDEV","Modal","e","EscalationPanel","selectedRole","allRoles","chainsData","useEscalationChains","addChain","useAddEscalationChain","removeChain","useRemoveEscalationChain","newTarget","setNewTarget","chains","targets","useMemo","c","available","r","handleAdd","handleRemove","target","isSuperAdmin","getRoleColumns","onDelete","row","RolePill","RowActionGroup","RowAction","Trash2","RolesPage","data","isLoading","useRoleDetails","deleteRole","useDeleteRole","showCreate","setShowCreate","confirmDelete","setConfirmDelete","setSelectedRole","roles","allRoleNames","columns","handleDelete","PageHeader","DataTable","ConfirmDeleteModal","Fragment"],"mappings":"2hBAIO,SAASA,EAAgB,CAC9B,KAAAC,EACA,QAAAC,CACF,EAGG,CACD,MAAMC,EAAaC,EAAA,EACb,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAE,EAErC,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAASN,CAAI,EACzCA,IAASO,IACXC,EAAYR,CAAI,EACZA,IACFK,EAAY,EAAE,EACdH,EAAW,MAAA,IAIf,MAAMO,EAAe,IAAM,CACzB,MAAMC,EAAUN,EAAS,KAAA,EAAO,YAAA,EAC3BM,GACLR,EAAW,OAAOQ,EAAS,CAAE,UAAWT,EAAS,CACnD,EAEA,OACEU,EAAAA,OAACC,GAAM,KAAAZ,EAAY,QAAAC,EAAkB,MAAM,cACzC,SAAAU,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,oFAAoF,SAAA,sBAAA,EAArG,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAOP,EACP,SAAWS,GAAMR,EAAYQ,EAAE,OAAO,KAAK,EAC3C,YAAY,iBACZ,UAAU,uBACV,UAAYA,GAAM,CACZA,EAAE,MAAQ,SAASJ,EAAA,CACzB,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAUAE,SAAC,IAAA,CAAE,UAAU,sCAAsC,SAAA,4DAAA,EAAnD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAhBF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAiBA,EAECT,EAAW,OACVS,EAAAA,OAAC,IAAA,CAAE,UAAU,4BAA8B,SAAAT,EAAW,MAAgB,OAAA,EAAtE,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8E,EAGhFS,EAAAA,OAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CAAO,QAASV,EAAS,UAAU,wBAAwB,SAAA,UAA5D,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAU,EAAAA,OAAC,SAAA,CACC,QAASF,EACT,SAAU,CAACL,EAAS,KAAA,GAAUF,EAAW,UACzC,UAAU,sBAET,SAAAA,EAAW,UAAY,cAAgB,QAAA,EAL1C,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAWA,CAAA,CAAA,EAnCF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAoCA,CAAA,EArCF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAsCA,CAEJ,CC/DO,SAASY,EAAgB,CAC9B,aAAAC,EACA,SAAAC,CACF,EAGG,CACD,KAAM,CAAE,KAAMC,CAAA,EAAeC,EAAA,EACvBC,EAAWC,EAAA,EACXC,EAAcC,EAAA,EACd,CAACC,EAAWC,CAAY,EAAIlB,EAAAA,SAAS,EAAE,EAEvCmB,GAASR,GAAA,YAAAA,EAAY,SAAU,CAAA,EAE/BS,EAAUC,EAAAA,QAAQ,IACjBZ,EACEU,EAAO,OAAQG,GAAMA,EAAE,cAAgBb,CAAY,EAAE,IAAKa,GAAMA,EAAE,WAAW,EAD1D,CAAA,EAEzB,CAACH,EAAQV,CAAY,CAAC,EAEnBc,EAAYF,EAAAA,QAAQ,IACnBZ,EACEC,EAAS,OAAQc,GAAMA,IAAMf,GAAgBe,IAAM,cAAgB,CAACJ,EAAQ,SAASI,CAAC,CAAC,EADpE,CAAA,EAEzB,CAACd,EAAUD,EAAcW,CAAO,CAAC,EAE9BK,EAAY,IAAM,CAClB,CAAChB,GAAgB,CAACQ,EAAU,QAChCJ,EAAS,OACP,CAAE,YAAaJ,EAAc,YAAaQ,EAAU,MAAK,EACzD,CAAE,UAAW,IAAMC,EAAa,EAAE,CAAA,CAAE,CAExC,EAEMQ,EAAgBC,GAAmB,CAClClB,GACLM,EAAY,OAAO,CAAE,YAAaN,EAAc,YAAakB,EAAQ,CACvE,EAEMC,EAAenB,IAAiB,aAEtC,OACEJ,EAAAA,OAAC,MAAA,CAAI,UAAU,oDACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,oBAAA,EAA3F,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAEEI,EAIEmB,EACFvB,EAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,2CAA4C,SAAAI,CAAA,EAAzD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsE,EACtEJ,SAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,kDAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,EAEAA,SAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,sCAAuC,SAAAI,CAAA,EAApD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiE,EACjEJ,SAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,kBAAA,EAArD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqE,CAAA,CAAA,EAFvE,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,EAECe,EAAQ,SAAW,WACjB,IAAA,CAAE,UAAU,6BAA6B,SAAA,qCAA1C,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,WAEC,MAAA,CAAI,UAAU,uBACZ,SAAAA,EAAQ,IAAKO,GACZtB,EAAAA,OAAC,OAAA,CAEC,UAAU,oHAET,SAAA,CAAAsB,EACDtB,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMqB,EAAaC,CAAM,EAClC,UAAU,+DACV,MAAO,UAAUA,CAAM,GACxB,SAAA,GAAA,EAJD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVKA,EADP,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAaD,CAAA,EAfH,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAgBA,EAGDJ,EAAU,OAAS,GAClBlB,EAAAA,OAAC,MAAA,CAAI,UAAU,sCACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,YAAA,EAA3F,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,MAAOY,EACP,SAAWV,GAAMW,EAAaX,EAAE,OAAO,KAAK,EAC5C,UAAU,kCAEV,SAAA,CAAAF,SAAC,SAAA,CAAO,MAAM,GAAG,SAAA,kBAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiC,EAChCkB,EAAU,IAAKC,YACb,SAAA,CAAe,MAAOA,EAAI,SAAAA,GAAdA,EAAb,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6B,CAC9B,CAAA,CAAA,EARH,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAUAnB,EAAAA,OAAC,SAAA,CACC,QAASoB,EACT,SAAU,CAACR,GAAaJ,EAAS,UACjC,UAAU,sBAET,SAAAA,EAAS,UAAY,YAAc,KAAA,EALtC,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAjBF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAkBA,CAAA,CAAA,EAtBF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAuBA,CAAA,CAAA,EAtDJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAwDA,EAnEAR,EAAAA,OAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,iDAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAiEA,CAAA,EAzEJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA2EA,CAEJ,CCtHO,SAASwB,EACdC,EACsB,CACtB,MAAO,CACL,CACE,IAAK,OACL,MAAO,OACP,OAASC,YAASC,EAAA,CAAS,KAAMD,EAAI,IAAA,EAApB,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA0B,CAAA,EAE7C,CACE,IAAK,aACL,MAAO,QACP,OAASA,GACPA,EAAI,WAAa,EACb1B,EAAAA,OAAC,OAAA,CAAK,UAAU,oBAAqB,SAAA0B,EAAI,UAAA,EAAzC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoD,EACpD1B,SAAC,OAAA,CAAK,UAAU,qBAAqB,SAAA,KAArC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsC,EAC5C,UAAW,iBAAA,EAEb,CACE,IAAK,cACL,MAAO,cACP,OAAS0B,GACPA,EAAI,YAAc,EACd1B,EAAAA,OAAC,OAAA,CAAK,UAAU,oBAAqB,SAAA0B,EAAI,WAAA,EAAzC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqD,EACrD1B,SAAC,OAAA,CAAK,UAAU,qBAAqB,SAAA,KAArC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsC,EAC5C,UAAW,iBAAA,EAEb,CACE,IAAK,iBACL,MAAO,YACP,OAAS0B,GACPA,EAAI,eAAiB,EACjB1B,EAAAA,OAAC,OAAA,CAAK,UAAU,oBAAqB,SAAA0B,EAAI,cAAA,EAAzC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwD,EACxD1B,SAAC,OAAA,CAAK,UAAU,qBAAqB,SAAA,KAArC,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsC,EAC5C,UAAW,iBAAA,EAEb,CACE,IAAK,UACL,MAAO,GACP,OAAS0B,GACOA,EAAI,WAAa,GAAKA,EAAI,YAAc,GAAKA,EAAI,eAAiB,EAC9D,cAEfE,EAAA,CACC,SAAA5B,EAAAA,OAAC6B,EAAA,CACC,KAAMC,EACN,MAAM,cACN,QAAS,IAAML,EAASC,CAAG,EAC3B,WAAW,4CAAA,EAJb,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAKA,EANF,OAAA,GAAA,CAAA,SAAA,uDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAOA,EAGJ,UAAW,iBAAA,CACb,CAEJ,CCrDO,SAASK,GAAY,CAC1B,KAAM,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcC,EAAA,EACtBC,EAAaC,EAAA,EAEb,CAACC,EAAYC,CAAa,EAAI3C,EAAAA,SAAS,EAAK,EAC5C,CAAC4C,EAAeC,CAAgB,EAAI7C,EAAAA,SAA4B,IAAI,EACpE,CAACS,EAAcqC,CAAe,EAAI9C,EAAAA,SAAwB,IAAI,EAE9D+C,GAAQV,GAAA,YAAAA,EAAM,QAAS,CAAA,EACvBW,EAAe3B,EAAAA,QAAQ,IAAM0B,EAAM,IAAKvB,GAAMA,EAAE,IAAI,EAAG,CAACuB,CAAK,CAAC,EAE9DE,EAAUpB,EAAgBE,GAAQc,EAAiBd,CAAG,CAAC,EAEvDmB,EAAe,IAAM,CACpBN,GACLJ,EAAW,OAAOI,EAAc,KAAM,CACpC,UAAW,IAAMC,EAAiB,IAAI,CAAA,CACvC,CACH,EAEA,gBACG,MAAA,CACC,SAAA,CAAAxC,EAAAA,OAAC8C,EAAA,CACC,MAAM,QACN,SAAS,2CACT,QACE9C,EAAAA,OAAC,SAAA,CAAO,QAAS,IAAMsC,EAAc,EAAI,EAAG,UAAU,sBAAsB,SAAA,UAAA,EAA5E,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EANJ,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EAUAtC,EAAAA,OAAC,MAAA,CAAI,UAAU,kDACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAAA,EAAAA,OAAC+C,EAAA,CACC,QAAAH,EACA,KAAMF,EACN,MAAQhB,GAAQA,EAAI,KACpB,UAAAO,EACA,aAAa,iBACb,WAAaP,GAAQe,EAAgBf,EAAI,IAAI,EAC7C,aAActB,CAAA,EAPhB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAQA,EATF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAUA,EAEAJ,EAAAA,OAACG,EAAA,CAAgB,aAAAC,EAA4B,SAAUuC,CAAA,EAAvD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAqE,CAAA,CAAA,EAbvE,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAcA,EAEA3C,EAAAA,OAACZ,GAAgB,KAAMiD,EAAY,QAAS,IAAMC,EAAc,EAAK,GAArE,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAwE,EAExEtC,EAAAA,OAACgD,EAAA,CACC,KAAM,CAAC,CAACT,EACR,QAAS,IAAMC,EAAiB,IAAI,EACpC,UAAWK,EACX,MAAM,cACN,YACE7C,EAAAA,OAAAiD,WAAA,CAAE,SAAA,CAAA,cACY,IACZjD,SAAC,OAAA,CAAK,UAAU,0CACb,0BAAe,IAAA,EADlB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EAAO,iCAAA,CAAA,EAJT,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAMA,EAEF,UAAWmC,EAAW,UACtB,MAAOA,EAAW,KAAA,EAfpB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAgBA,CAAA,EA7CF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA8CA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as t}from"./index-CCOSf1PY.js";function r({icon:o,title:s,onClick:a,colorClass:n="text-text-tertiary hover:text-accent",alwaysVisible:i}){return t.jsxDEV("button",{onClick:e=>{e.stopPropagation(),a(e)},className:`transition-opacity ${i?"opacity-100":"opacity-0 group-hover/row:opacity-100"} ${n}`,title:s,children:t.jsxDEV(o,{className:"w-[18px] h-[18px]",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/RowActions.tsx",lineNumber:32,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/RowActions.tsx",lineNumber:22,columnNumber:5},this)}function m({children:o}){return t.jsxDEV("span",{className:"flex items-center justify-end gap-2.5",children:o},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/RowActions.tsx",lineNumber:42,columnNumber:5},this)}export{m as R,r as a};
2
+ //# sourceMappingURL=RowActions-Bs4PF-Gd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RowActions-Dg-Fsm5O.js","sources":["../../src/components/common/layout/RowActions.tsx"],"sourcesContent":["import type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\n/**\n * Ephemeral icon button that appears on row hover.\n * Uses `group-hover/row:opacity-100` to show on hover — rows must have `group/row`.\n */\nexport function RowAction({\n icon: Icon,\n title,\n onClick,\n colorClass = 'text-text-tertiary hover:text-accent',\n alwaysVisible,\n}: {\n icon: LucideIcon;\n title: string;\n onClick: (e: React.MouseEvent) => void;\n colorClass?: string;\n alwaysVisible?: boolean;\n}) {\n return (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClick(e);\n }}\n className={`transition-opacity ${\n alwaysVisible ? 'opacity-100' : 'opacity-0 group-hover/row:opacity-100'\n } ${colorClass}`}\n title={title}\n >\n <Icon className=\"w-[18px] h-[18px]\" strokeWidth={1.5} />\n </button>\n );\n}\n\n/**\n * Container for one or more RowAction icons in the last table column.\n */\nexport function RowActionGroup({ children }: { children: ReactNode }) {\n return (\n <span className=\"flex items-center justify-end gap-2.5\">\n {children}\n </span>\n );\n}\n"],"names":["RowAction","Icon","title","onClick","colorClass","alwaysVisible","jsx","e","RowActionGroup","children"],"mappings":"+CAOO,SAASA,EAAU,CACxB,KAAMC,EACN,MAAAC,EACA,QAAAC,EACA,WAAAC,EAAa,uCACb,cAAAC,CACF,EAMG,CACD,OACEC,EAAAA,IAAC,SAAA,CACC,QAAUC,GAAM,CACdA,EAAE,gBAAA,EACFJ,EAAQI,CAAC,CACX,EACA,UAAW,sBACTF,EAAgB,cAAgB,uCAClC,IAAID,CAAU,GACd,MAAAF,EAEA,SAAAI,EAAAA,IAACL,EAAA,CAAK,UAAU,oBAAoB,YAAa,GAAA,CAAK,CAAA,CAAA,CAG5D,CAKO,SAASO,EAAe,CAAE,SAAAC,GAAqC,CACpE,OACEH,EAAAA,IAAC,OAAA,CAAK,UAAU,wCACb,SAAAG,CAAA,CACH,CAEJ"}
1
+ {"version":3,"file":"RowActions-Bs4PF-Gd.js","sources":["../../src/components/common/layout/RowActions.tsx"],"sourcesContent":["import type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\n/**\n * Ephemeral icon button that appears on row hover.\n * Uses `group-hover/row:opacity-100` to show on hover — rows must have `group/row`.\n */\nexport function RowAction({\n icon: Icon,\n title,\n onClick,\n colorClass = 'text-text-tertiary hover:text-accent',\n alwaysVisible,\n}: {\n icon: LucideIcon;\n title: string;\n onClick: (e: React.MouseEvent) => void;\n colorClass?: string;\n alwaysVisible?: boolean;\n}) {\n return (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClick(e);\n }}\n className={`transition-opacity ${\n alwaysVisible ? 'opacity-100' : 'opacity-0 group-hover/row:opacity-100'\n } ${colorClass}`}\n title={title}\n >\n <Icon className=\"w-[18px] h-[18px]\" strokeWidth={1.5} />\n </button>\n );\n}\n\n/**\n * Container for one or more RowAction icons in the last table column.\n */\nexport function RowActionGroup({ children }: { children: ReactNode }) {\n return (\n <span className=\"flex items-center justify-end gap-2.5\">\n {children}\n </span>\n );\n}\n"],"names":["RowAction","Icon","title","onClick","colorClass","alwaysVisible","jsxDEV","RowActionGroup","children"],"mappings":"wCAOO,SAASA,EAAU,CACxB,KAAMC,EACN,MAAAC,EACA,QAAAC,EACA,WAAAC,EAAa,uCACb,cAAAC,CACF,EAMG,CACD,OACEC,EAAAA,OAAC,SAAA,CACC,QAAU,GAAM,CACd,EAAE,gBAAA,EACFH,EAAQ,CAAC,CACX,EACA,UAAW,sBACTE,EAAgB,cAAgB,uCAClC,IAAID,CAAU,GACd,MAAAF,EAEA,SAAAI,EAAAA,OAACL,EAAA,CAAK,UAAU,oBAAoB,YAAa,GAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAsD,CAAA,EAVxD,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAaJ,CAKO,SAASM,EAAe,CAAE,SAAAC,GAAqC,CACpE,OACEF,EAAAA,OAAC,OAAA,CAAK,UAAU,wCACb,SAAAE,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{i as a,j as e}from"./index-CCOSf1PY.js";import{B as c}from"./BotPicker-kKBifD1w.js";import{a as i,a5 as l}from"./vendor-icons-CBOM6Es0.js";function N({selected:s,onChange:m}){const{user:o,isSuperAdmin:n,hasRoleType:r}=a(),t=n||r("admin");return e.jsxDEV("div",{children:t?e.jsxDEV(c,{selected:s,onChange:m},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:17,columnNumber:9},this):e.jsxDEV("div",{className:"flex items-center gap-1.5",children:s?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(i,{className:"w-3 h-3 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:22,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-secondary",children:["Running as ",e.jsxDEV("span",{className:"font-medium text-accent font-mono",children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:24,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:23,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:21,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(l,{className:"w-3 h-3 text-accent/75 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:29,columnNumber:15},this),e.jsxDEV("span",{className:"text-[10px] text-text-secondary",children:["Running as ",e.jsxDEV("span",{className:"font-medium text-accent",children:(o==null?void 0:o.displayName)||(o==null?void 0:o.userId)||"you"},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:31,columnNumber:28},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:30,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:28,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:19,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/form/RunAsSelector.tsx",lineNumber:15,columnNumber:5},this)}export{N as R};
2
+ //# sourceMappingURL=RunAsSelector-DXzAr2WW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RunAsSelector-hYP59xHH.js","sources":["../../src/components/common/form/RunAsSelector.tsx"],"sourcesContent":["import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from './BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\n\ninterface RunAsSelectorProps {\n selected: string;\n onChange: (botExternalId: string) => void;\n}\n\nexport function RunAsSelector({ selected, onChange }: RunAsSelectorProps) {\n const { user, isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n\n return (\n <div>\n {isAdmin ? (\n <BotPicker selected={selected} onChange={onChange} />\n ) : (\n <div className=\"flex items-center gap-1.5\">\n {selected ? (\n <>\n <Bot className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent font-mono\">{selected}</span>\n </span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent\">{user?.displayName || user?.userId || 'you'}</span>\n </span>\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"names":["RunAsSelector","selected","onChange","user","isSuperAdmin","hasRoleType","useAuth","isAdmin","jsx","BotPicker","jsxs","Fragment","Bot","UserCircle"],"mappings":"0LASO,SAASA,EAAc,CAAE,SAAAC,EAAU,SAAAC,GAAgC,CACxE,KAAM,CAAE,KAAAC,EAAM,aAAAC,EAAc,YAAAC,CAAA,EAAgBC,EAAA,EACtCC,EAAUH,GAAgBC,EAAY,OAAO,EAEnD,OACEG,EAAAA,IAAC,MAAA,CACE,SAAAD,EACCC,EAAAA,IAACC,EAAA,CAAU,SAAAR,EAAoB,SAAAC,CAAA,CAAoB,EAEnDM,EAAAA,IAAC,MAAA,CAAI,UAAU,4BACZ,WACCE,EAAAA,KAAAC,WAAA,CACE,SAAA,CAAAH,EAAAA,IAACI,EAAA,CAAI,UAAU,kCAAkC,YAAa,IAAK,EACnEF,EAAAA,KAAC,OAAA,CAAK,UAAU,kCAAkC,SAAA,CAAA,cACrCF,EAAAA,IAAC,OAAA,CAAK,UAAU,oCAAqC,SAAAP,CAAA,CAAS,CAAA,CAAA,CAC3E,CAAA,CAAA,CACF,EAEAS,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAH,EAAAA,IAACK,EAAA,CAAW,UAAU,kCAAkC,YAAa,IAAK,EAC1EH,EAAAA,KAAC,OAAA,CAAK,UAAU,kCAAkC,SAAA,CAAA,cACrCF,EAAAA,IAAC,QAAK,UAAU,0BAA2B,2BAAM,eAAeL,GAAA,YAAAA,EAAM,SAAU,KAAA,CAAM,CAAA,CAAA,CACnG,CAAA,CAAA,CACF,EAEJ,EAEJ,CAEJ"}
1
+ {"version":3,"file":"RunAsSelector-DXzAr2WW.js","sources":["../../src/components/common/form/RunAsSelector.tsx"],"sourcesContent":["import { Bot, UserCircle } from 'lucide-react';\nimport { BotPicker } from './BotPicker';\nimport { useAuth } from '../../../hooks/useAuth';\n\ninterface RunAsSelectorProps {\n selected: string;\n onChange: (botExternalId: string) => void;\n}\n\nexport function RunAsSelector({ selected, onChange }: RunAsSelectorProps) {\n const { user, isSuperAdmin, hasRoleType } = useAuth();\n const isAdmin = isSuperAdmin || hasRoleType('admin');\n\n return (\n <div>\n {isAdmin ? (\n <BotPicker selected={selected} onChange={onChange} />\n ) : (\n <div className=\"flex items-center gap-1.5\">\n {selected ? (\n <>\n <Bot className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent font-mono\">{selected}</span>\n </span>\n </>\n ) : (\n <>\n <UserCircle className=\"w-3 h-3 text-accent/75 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[10px] text-text-secondary\">\n Running as <span className=\"font-medium text-accent\">{user?.displayName || user?.userId || 'you'}</span>\n </span>\n </>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"names":["RunAsSelector","selected","onChange","user","isSuperAdmin","hasRoleType","useAuth","isAdmin","jsxDEV","BotPicker","Fragment","Bot","UserCircle"],"mappings":"kJASO,SAASA,EAAc,CAAE,SAAAC,EAAU,SAAAC,GAAgC,CACxE,KAAM,CAAE,KAAAC,EAAM,aAAAC,EAAc,YAAAC,CAAA,EAAgBC,EAAA,EACtCC,EAAUH,GAAgBC,EAAY,OAAO,EAEnD,gBACG,MAAA,CACE,SAAAE,EACCC,EAAAA,OAACC,EAAA,CAAU,SAAAR,EAAoB,SAAAC,GAA/B,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAmD,EAEnDM,SAAC,MAAA,CAAI,UAAU,4BACZ,WACCA,EAAAA,OAAAE,EAAAA,SAAA,CACE,SAAA,CAAAF,SAACG,EAAA,CAAI,UAAU,kCAAkC,YAAa,GAAA,EAA9D,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmE,EACnEH,EAAAA,OAAC,OAAA,CAAK,UAAU,kCAAkC,SAAA,CAAA,cACrCA,SAAC,OAAA,CAAK,UAAU,oCAAqC,SAAAP,CAAA,EAArD,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8D,CAAA,CAAA,EAD3E,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,EAEAO,EAAAA,OAAAE,EAAAA,SAAA,CACE,SAAA,CAAAF,SAACI,EAAA,CAAW,UAAU,kCAAkC,YAAa,GAAA,EAArE,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA0E,EAC1EJ,EAAAA,OAAC,OAAA,CAAK,UAAU,kCAAkC,SAAA,CAAA,cACrCA,EAAAA,OAAC,QAAK,UAAU,0BAA2B,2BAAM,eAAeL,GAAA,YAAAA,EAAM,SAAU,KAAA,EAAhF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsF,CAAA,CAAA,EADnG,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,CAAA,EAdJ,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAgBA,CAAA,EApBJ,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAsBA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as e}from"./index-CCOSf1PY.js";import{b as a,a0 as m}from"./vendor-icons-CBOM6Es0.js";import{c as l}from"./vendor-react-Co3Y8ikm.js";function u({name:t,serverId:r,short:o=!0}){const i=l(),s=o?t.replace(/^long-tail-/,""):t;return r?e.jsxDEV("button",{onClick:n=>{n.stopPropagation(),i(`/mcp/servers/${r}`)},className:"group/srv inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary hover:text-accent transition-colors",title:t,children:[e.jsxDEV(a,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary group-hover/srv:text-accent",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/ServerName.tsx",lineNumber:27,columnNumber:9},this),s,e.jsxDEV(m,{className:"w-2 h-2 shrink-0 invisible group-hover/srv:visible text-accent",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/ServerName.tsx",lineNumber:29,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/ServerName.tsx",lineNumber:22,columnNumber:7},this):e.jsxDEV("span",{className:"inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary",title:t,children:[e.jsxDEV(a,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/ServerName.tsx",lineNumber:36,columnNumber:7},this),s]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/ServerName.tsx",lineNumber:35,columnNumber:5},this)}export{u as S};
2
+ //# sourceMappingURL=ServerName-BIdLC1Ay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServerName-C9lUCFYb.js","sources":["../../src/components/common/display/ServerName.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { Server, ExternalLink } from 'lucide-react';\n\ninterface ServerNameProps {\n name: string;\n serverId?: string;\n /** Strip the common \"long-tail-\" prefix for display */\n short?: boolean;\n}\n\n/**\n * Universal MCP server name display. Monospace with a subtle Server icon.\n * When `serverId` is provided, hovering reveals a nav icon and clicking\n * navigates to the server config page.\n */\nexport function ServerName({ name, serverId, short = true }: ServerNameProps) {\n const navigate = useNavigate();\n const display = short ? name.replace(/^long-tail-/, '') : name;\n\n if (serverId) {\n return (\n <button\n onClick={(e) => { e.stopPropagation(); navigate(`/mcp/servers/${serverId}`); }}\n className=\"group/srv inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary hover:text-accent transition-colors\"\n title={name}\n >\n <Server className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary group-hover/srv:text-accent\" strokeWidth={1.5} />\n {display}\n <ExternalLink className=\"w-2 h-2 shrink-0 invisible group-hover/srv:visible text-accent\" strokeWidth={1.5} />\n </button>\n );\n }\n\n return (\n <span className=\"inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary\" title={name}>\n <Server className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary\" strokeWidth={1.5} />\n {display}\n </span>\n );\n}\n"],"names":["ServerName","name","serverId","short","navigate","useNavigate","display","jsxs","e","jsx","Server","ExternalLink"],"mappings":"gJAeO,SAASA,EAAW,CAAE,KAAAC,EAAM,SAAAC,EAAU,MAAAC,EAAQ,IAAyB,CAC5E,MAAMC,EAAWC,EAAA,EACXC,EAAUH,EAAQF,EAAK,QAAQ,cAAe,EAAE,EAAIA,EAE1D,OAAIC,EAEAK,EAAAA,KAAC,SAAA,CACC,QAAUC,GAAM,CAAEA,EAAE,gBAAA,EAAmBJ,EAAS,gBAAgBF,CAAQ,EAAE,CAAG,EAC7E,UAAU,wHACV,MAAOD,EAEP,SAAA,CAAAQ,EAAAA,IAACC,EAAA,CAAO,UAAU,wEAAwE,YAAa,IAAK,EAC3GJ,EACDG,EAAAA,IAACE,EAAA,CAAa,UAAU,iEAAiE,YAAa,GAAA,CAAK,CAAA,CAAA,CAAA,EAM/GJ,EAAAA,KAAC,OAAA,CAAK,UAAU,0EAA0E,MAAON,EAC/F,SAAA,CAAAQ,EAAAA,IAACC,EAAA,CAAO,UAAU,4CAA4C,YAAa,IAAK,EAC/EJ,CAAA,EACH,CAEJ"}
1
+ {"version":3,"file":"ServerName-BIdLC1Ay.js","sources":["../../src/components/common/display/ServerName.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { Server, ExternalLink } from 'lucide-react';\n\ninterface ServerNameProps {\n name: string;\n serverId?: string;\n /** Strip the common \"long-tail-\" prefix for display */\n short?: boolean;\n}\n\n/**\n * Universal MCP server name display. Monospace with a subtle Server icon.\n * When `serverId` is provided, hovering reveals a nav icon and clicking\n * navigates to the server config page.\n */\nexport function ServerName({ name, serverId, short = true }: ServerNameProps) {\n const navigate = useNavigate();\n const display = short ? name.replace(/^long-tail-/, '') : name;\n\n if (serverId) {\n return (\n <button\n onClick={(e) => { e.stopPropagation(); navigate(`/mcp/servers/${serverId}`); }}\n className=\"group/srv inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary hover:text-accent transition-colors\"\n title={name}\n >\n <Server className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary group-hover/srv:text-accent\" strokeWidth={1.5} />\n {display}\n <ExternalLink className=\"w-2 h-2 shrink-0 invisible group-hover/srv:visible text-accent\" strokeWidth={1.5} />\n </button>\n );\n }\n\n return (\n <span className=\"inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary\" title={name}>\n <Server className=\"w-2.5 h-2.5 shrink-0 text-text-quaternary\" strokeWidth={1.5} />\n {display}\n </span>\n );\n}\n"],"names":["ServerName","name","serverId","short","navigate","useNavigate","display","jsxDEV","e","Server","ExternalLink"],"mappings":"8IAeO,SAASA,EAAW,CAAE,KAAAC,EAAM,SAAAC,EAAU,MAAAC,EAAQ,IAAyB,CAC5E,MAAMC,EAAWC,EAAA,EACXC,EAAUH,EAAQF,EAAK,QAAQ,cAAe,EAAE,EAAIA,EAE1D,OAAIC,EAEAK,EAAAA,OAAC,SAAA,CACC,QAAUC,GAAM,CAAEA,EAAE,gBAAA,EAAmBJ,EAAS,gBAAgBF,CAAQ,EAAE,CAAG,EAC7E,UAAU,wHACV,MAAOD,EAEP,SAAA,CAAAM,SAACE,EAAA,CAAO,UAAU,wEAAwE,YAAa,GAAA,EAAvG,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA4G,EAC3GH,EACDC,SAACG,EAAA,CAAa,UAAU,iEAAiE,YAAa,GAAA,EAAtG,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA2G,CAAA,CAAA,EAP7G,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EAaFH,EAAAA,OAAC,OAAA,CAAK,UAAU,0EAA0E,MAAON,EAC/F,SAAA,CAAAM,SAACE,EAAA,CAAO,UAAU,4CAA4C,YAAa,GAAA,EAA3E,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAgF,EAC/EH,CAAA,CAAA,EAFH,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as e}from"./index-CCOSf1PY.js";function i({label:m,value:n,sub:a,dotClass:t,colorClass:d="text-text-primary",onClick:r}){const s=e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[t&&e.jsxDEV("span",{className:`w-2 h-2 rounded-full ${t}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:21,columnNumber:22},this),e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:m},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:22,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:20,columnNumber:7},this),e.jsxDEV("p",{className:`text-2xl font-light tabular-nums ${d}`,children:n},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:26,columnNumber:7},this),a&&e.jsxDEV("p",{className:"text-xs text-text-tertiary mt-1",children:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:27,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:19,columnNumber:5},this),o="bg-surface-raised border border-surface-border rounded-md p-4 text-left";return r?e.jsxDEV("button",{onClick:r,className:`${o} hover:border-accent/40 transition-colors`,children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:35,columnNumber:7},this):e.jsxDEV("div",{className:o,children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:41,columnNumber:10},this)}export{i as S};
2
+ //# sourceMappingURL=StatCard-OKzRSSx4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatCard-DlgF0CJC.js","sources":["../../src/components/common/data/StatCard.tsx"],"sourcesContent":["interface StatCardProps {\n label: string;\n value: string | number;\n sub?: string;\n dotClass?: string;\n colorClass?: string;\n onClick?: () => void;\n}\n\nexport function StatCard({\n label,\n value,\n sub,\n dotClass,\n colorClass = 'text-text-primary',\n onClick,\n}: StatCardProps) {\n const content = (\n <>\n <div className=\"flex items-center gap-2 mb-1\">\n {dotClass && <span className={`w-2 h-2 rounded-full ${dotClass}`} />}\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n {label}\n </p>\n </div>\n <p className={`text-2xl font-light tabular-nums ${colorClass}`}>{value}</p>\n {sub && <p className=\"text-xs text-text-tertiary mt-1\">{sub}</p>}\n </>\n );\n\n const base = 'bg-surface-raised border border-surface-border rounded-md p-4 text-left';\n\n if (onClick) {\n return (\n <button onClick={onClick} className={`${base} hover:border-accent/40 transition-colors`}>\n {content}\n </button>\n );\n }\n\n return <div className={base}>{content}</div>;\n}\n"],"names":["StatCard","label","value","sub","dotClass","colorClass","onClick","content","jsxs","Fragment","jsx","base"],"mappings":"+CASO,SAASA,EAAS,CACvB,MAAAC,EACA,MAAAC,EACA,IAAAC,EACA,SAAAC,EACA,WAAAC,EAAa,oBACb,QAAAC,CACF,EAAkB,CAChB,MAAMC,EACJC,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,+BACZ,SAAA,CAAAJ,GAAYM,EAAAA,IAAC,OAAA,CAAK,UAAW,wBAAwBN,CAAQ,GAAI,EAClEM,EAAAA,IAAC,IAAA,CAAE,UAAU,yEACV,SAAAT,CAAA,CACH,CAAA,EACF,QACC,IAAA,CAAE,UAAW,oCAAoCI,CAAU,GAAK,SAAAH,EAAM,EACtEC,GAAOO,EAAAA,IAAC,IAAA,CAAE,UAAU,kCAAmC,SAAAP,CAAA,CAAI,CAAA,EAC9D,EAGIQ,EAAO,0EAEb,OAAIL,QAEC,SAAA,CAAO,QAAAA,EAAkB,UAAW,GAAGK,CAAI,4CACzC,SAAAJ,CAAA,CACH,EAIGG,EAAAA,IAAC,MAAA,CAAI,UAAWC,EAAO,SAAAJ,EAAQ,CACxC"}
1
+ {"version":3,"file":"StatCard-OKzRSSx4.js","sources":["../../src/components/common/data/StatCard.tsx"],"sourcesContent":["interface StatCardProps {\n label: string;\n value: string | number;\n sub?: string;\n dotClass?: string;\n colorClass?: string;\n onClick?: () => void;\n}\n\nexport function StatCard({\n label,\n value,\n sub,\n dotClass,\n colorClass = 'text-text-primary',\n onClick,\n}: StatCardProps) {\n const content = (\n <>\n <div className=\"flex items-center gap-2 mb-1\">\n {dotClass && <span className={`w-2 h-2 rounded-full ${dotClass}`} />}\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n {label}\n </p>\n </div>\n <p className={`text-2xl font-light tabular-nums ${colorClass}`}>{value}</p>\n {sub && <p className=\"text-xs text-text-tertiary mt-1\">{sub}</p>}\n </>\n );\n\n const base = 'bg-surface-raised border border-surface-border rounded-md p-4 text-left';\n\n if (onClick) {\n return (\n <button onClick={onClick} className={`${base} hover:border-accent/40 transition-colors`}>\n {content}\n </button>\n );\n }\n\n return <div className={base}>{content}</div>;\n}\n"],"names":["StatCard","label","value","sub","dotClass","colorClass","onClick","content","jsxDEV","Fragment","base"],"mappings":"wCASO,SAASA,EAAS,CACvB,MAAAC,EACA,MAAAC,EACA,IAAAC,EACA,SAAAC,EACA,WAAAC,EAAa,oBACb,QAAAC,CACF,EAAkB,CAChB,MAAMC,EACJC,EAAAA,OAAAC,EAAAA,SAAA,CACE,SAAA,CAAAD,EAAAA,OAAC,MAAA,CAAI,UAAU,+BACZ,SAAA,CAAAJ,GAAYI,EAAAA,OAAC,OAAA,CAAK,UAAW,wBAAwBJ,CAAQ,EAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqD,EAClEI,SAAC,IAAA,CAAE,UAAU,yEACV,SAAAP,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,WACC,IAAA,CAAE,UAAW,oCAAoCI,CAAU,GAAK,SAAAH,GAAjE,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAuE,EACtEC,GAAOK,EAAAA,OAAC,IAAA,CAAE,UAAU,kCAAmC,SAAAL,CAAA,EAAhD,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoD,CAAA,CAAA,EAR9D,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IASA,EAGIO,EAAO,0EAEb,OAAIJ,WAEC,SAAA,CAAO,QAAAA,EAAkB,UAAW,GAAGI,CAAI,4CACzC,SAAAH,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAIGC,EAAAA,OAAC,MAAA,CAAI,UAAWE,EAAO,SAAAH,CAAA,EAAvB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+B,CACxC"}
@@ -0,0 +1,2 @@
1
+ import{j as s}from"./index-CCOSf1PY.js";const a={pending:"bg-status-pending",in_progress:"bg-status-active animate-pulse",completed:"bg-status-success",resolved:"bg-status-success",needs_intervention:"bg-status-error",failed:"bg-status-error",cancelled:"bg-accent-muted",draft:"bg-status-draft",deployed:"bg-status-active",active:"bg-status-success",archived:"bg-text-tertiary",connected:"bg-status-success",registered:"bg-status-pending",disconnected:"bg-text-tertiary",error:"bg-status-error"},r={pending:"Pending",in_progress:"In Progress",completed:"Completed",resolved:"Resolved",needs_intervention:"Needs Intervention",failed:"Failed",cancelled:"Cancelled",draft:"Draft",deployed:"Deployed",active:"Active",archived:"Archived",connected:"connected",registered:"registered",disconnected:"disconnected",error:"error"};function c({status:e}){const t=a[e]??"bg-status-pending",n=r[e]??e;return s.jsxDEV("span",{className:"inline-flex items-center gap-2",children:[s.jsxDEV("span",{className:`w-2 h-2 rounded-full ${t}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/StatusBadge.tsx",lineNumber:47,columnNumber:7},this),s.jsxDEV("span",{className:"text-xs text-text-secondary",children:n},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/StatusBadge.tsx",lineNumber:48,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/StatusBadge.tsx",lineNumber:46,columnNumber:5},this)}export{c as S};
2
+ //# sourceMappingURL=StatusBadge-CQlF46RR.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBadge-XQlNFwmH.js","sources":["../../src/components/common/display/StatusBadge.tsx"],"sourcesContent":["import type { LTTaskStatus, LTEscalationStatus } from '../../../api/types';\n\ntype Status = LTTaskStatus | LTEscalationStatus | string;\n\nconst statusStyles: Record<string, string> = {\n pending: 'bg-status-pending',\n in_progress: 'bg-status-active animate-pulse',\n completed: 'bg-status-success',\n resolved: 'bg-status-success',\n needs_intervention: 'bg-status-error',\n failed: 'bg-status-error',\n cancelled: 'bg-accent-muted',\n draft: 'bg-status-draft',\n deployed: 'bg-status-active',\n active: 'bg-status-success',\n archived: 'bg-text-tertiary',\n connected: 'bg-status-success',\n registered: 'bg-status-pending',\n disconnected: 'bg-text-tertiary',\n error: 'bg-status-error',\n};\n\nconst statusLabels: Record<string, string> = {\n pending: 'Pending',\n in_progress: 'In Progress',\n completed: 'Completed',\n resolved: 'Resolved',\n needs_intervention: 'Needs Intervention',\n failed: 'Failed',\n cancelled: 'Cancelled',\n draft: 'Draft',\n deployed: 'Deployed',\n active: 'Active',\n archived: 'Archived',\n connected: 'connected',\n registered: 'registered',\n disconnected: 'disconnected',\n error: 'error',\n};\n\nexport function StatusBadge({ status }: { status: Status }) {\n const dotClass = statusStyles[status] ?? 'bg-status-pending';\n const label = statusLabels[status] ?? status;\n\n return (\n <span className=\"inline-flex items-center gap-2\">\n <span className={`w-2 h-2 rounded-full ${dotClass}`} />\n <span className=\"text-xs text-text-secondary\">{label}</span>\n </span>\n );\n}\n"],"names":["statusStyles","statusLabels","StatusBadge","status","dotClass","label","jsxs","jsx"],"mappings":"+CAIA,MAAMA,EAAuC,CAC3C,QAAS,oBACT,YAAa,iCACb,UAAW,oBACX,SAAU,oBACV,mBAAoB,kBACpB,OAAQ,kBACR,UAAW,kBACX,MAAO,kBACP,SAAU,mBACV,OAAQ,oBACR,SAAU,mBACV,UAAW,oBACX,WAAY,oBACZ,aAAc,mBACd,MAAO,iBACT,EAEMC,EAAuC,CAC3C,QAAS,UACT,YAAa,cACb,UAAW,YACX,SAAU,WACV,mBAAoB,qBACpB,OAAQ,SACR,UAAW,YACX,MAAO,QACP,SAAU,WACV,OAAQ,SACR,SAAU,WACV,UAAW,YACX,WAAY,aACZ,aAAc,eACd,MAAO,OACT,EAEO,SAASC,EAAY,CAAE,OAAAC,GAA8B,CAC1D,MAAMC,EAAWJ,EAAaG,CAAM,GAAK,oBACnCE,EAAQJ,EAAaE,CAAM,GAAKA,EAEtC,OACEG,EAAAA,KAAC,OAAA,CAAK,UAAU,iCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAW,wBAAwBH,CAAQ,GAAI,EACrDG,EAAAA,IAAC,OAAA,CAAK,UAAU,8BAA+B,SAAAF,CAAA,CAAM,CAAA,EACvD,CAEJ"}
1
+ {"version":3,"file":"StatusBadge-CQlF46RR.js","sources":["../../src/components/common/display/StatusBadge.tsx"],"sourcesContent":["import type { LTTaskStatus, LTEscalationStatus } from '../../../api/types';\n\ntype Status = LTTaskStatus | LTEscalationStatus | string;\n\nconst statusStyles: Record<string, string> = {\n pending: 'bg-status-pending',\n in_progress: 'bg-status-active animate-pulse',\n completed: 'bg-status-success',\n resolved: 'bg-status-success',\n needs_intervention: 'bg-status-error',\n failed: 'bg-status-error',\n cancelled: 'bg-accent-muted',\n draft: 'bg-status-draft',\n deployed: 'bg-status-active',\n active: 'bg-status-success',\n archived: 'bg-text-tertiary',\n connected: 'bg-status-success',\n registered: 'bg-status-pending',\n disconnected: 'bg-text-tertiary',\n error: 'bg-status-error',\n};\n\nconst statusLabels: Record<string, string> = {\n pending: 'Pending',\n in_progress: 'In Progress',\n completed: 'Completed',\n resolved: 'Resolved',\n needs_intervention: 'Needs Intervention',\n failed: 'Failed',\n cancelled: 'Cancelled',\n draft: 'Draft',\n deployed: 'Deployed',\n active: 'Active',\n archived: 'Archived',\n connected: 'connected',\n registered: 'registered',\n disconnected: 'disconnected',\n error: 'error',\n};\n\nexport function StatusBadge({ status }: { status: Status }) {\n const dotClass = statusStyles[status] ?? 'bg-status-pending';\n const label = statusLabels[status] ?? status;\n\n return (\n <span className=\"inline-flex items-center gap-2\">\n <span className={`w-2 h-2 rounded-full ${dotClass}`} />\n <span className=\"text-xs text-text-secondary\">{label}</span>\n </span>\n );\n}\n"],"names":["statusStyles","statusLabels","StatusBadge","status","dotClass","label","jsxDEV"],"mappings":"wCAIA,MAAMA,EAAuC,CAC3C,QAAS,oBACT,YAAa,iCACb,UAAW,oBACX,SAAU,oBACV,mBAAoB,kBACpB,OAAQ,kBACR,UAAW,kBACX,MAAO,kBACP,SAAU,mBACV,OAAQ,oBACR,SAAU,mBACV,UAAW,oBACX,WAAY,oBACZ,aAAc,mBACd,MAAO,iBACT,EAEMC,EAAuC,CAC3C,QAAS,UACT,YAAa,cACb,UAAW,YACX,SAAU,WACV,mBAAoB,qBACpB,OAAQ,SACR,UAAW,YACX,MAAO,QACP,SAAU,WACV,OAAQ,SACR,SAAU,WACV,UAAW,YACX,WAAY,aACZ,aAAc,eACd,MAAO,OACT,EAEO,SAASC,EAAY,CAAE,OAAAC,GAA8B,CAC1D,MAAMC,EAAWJ,EAAaG,CAAM,GAAK,oBACnCE,EAAQJ,EAAaE,CAAM,GAAKA,EAEtC,OACEG,EAAAA,OAAC,OAAA,CAAK,UAAU,iCACd,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAW,wBAAwBF,CAAQ,EAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,+DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAqD,EACrDE,SAAC,OAAA,CAAK,UAAU,8BAA+B,SAAAD,CAAA,EAA/C,OAAA,GAAA,CAAA,SAAA,+DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAqD,CAAA,CAAA,EAFvD,OAAA,GAAA,CAAA,SAAA,+DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as e}from"./index-CCOSf1PY.js";function l({steps:m,currentStep:s,onStepClick:a}){return e.jsxDEV("div",{className:"flex items-center justify-center gap-1 pb-4 border-b border-surface-border mb-4",children:m.map((n,t)=>{const c=t<s,o=t===s,r=!!a;return e.jsxDEV("div",{className:"flex items-center gap-1",children:[t>0&&e.jsxDEV("div",{className:`w-4 h-px ${c?"bg-accent":"bg-surface-border"}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:17,columnNumber:15},this),e.jsxDEV("button",{type:"button",onClick:r?()=>a(t):void 0,className:`flex items-center gap-1 ${r?"cursor-pointer":"cursor-default"}`,children:[e.jsxDEV("span",{className:`w-5 h-5 rounded-full text-[10px] font-semibold flex items-center justify-center shrink-0 transition-colors ${o?"bg-accent text-text-inverse":c?"bg-accent-muted text-accent":"bg-surface-sunken text-text-tertiary"} ${r&&!o?"hover:bg-accent-muted hover:text-accent":""}`,children:t+1},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:24,columnNumber:15},this),e.jsxDEV("span",{className:`text-[10px] font-semibold uppercase tracking-wider whitespace-nowrap transition-colors ${o?"text-text-primary":"text-text-tertiary"} ${r&&!o?"hover:text-text-primary":""}`,children:n},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:35,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:19,columnNumber:13},this)]},n,!0,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:15,columnNumber:11},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:9,columnNumber:5},this)}export{l as S};
2
+ //# sourceMappingURL=StepIndicator-CP7eycjI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StepIndicator-CuUIGxKk.js","sources":["../../src/components/common/layout/StepIndicator.tsx"],"sourcesContent":["interface StepIndicatorProps {\n steps: string[];\n currentStep: number;\n onStepClick?: (step: number) => void;\n}\n\nexport function StepIndicator({ steps, currentStep, onStepClick }: StepIndicatorProps) {\n return (\n <div className=\"flex items-center justify-center gap-1 pb-4 border-b border-surface-border mb-4\">\n {steps.map((label, i) => {\n const done = i < currentStep;\n const active = i === currentStep;\n const clickable = !!onStepClick;\n return (\n <div key={label} className=\"flex items-center gap-1\">\n {i > 0 && (\n <div className={`w-4 h-px ${done ? 'bg-accent' : 'bg-surface-border'}`} />\n )}\n <button\n type=\"button\"\n onClick={clickable ? () => onStepClick(i) : undefined}\n className={`flex items-center gap-1 ${clickable ? 'cursor-pointer' : 'cursor-default'}`}\n >\n <span\n className={`w-5 h-5 rounded-full text-[10px] font-semibold flex items-center justify-center shrink-0 transition-colors ${\n active\n ? 'bg-accent text-text-inverse'\n : done\n ? 'bg-accent-muted text-accent'\n : 'bg-surface-sunken text-text-tertiary'\n } ${clickable && !active ? 'hover:bg-accent-muted hover:text-accent' : ''}`}\n >\n {i + 1}\n </span>\n <span\n className={`text-[10px] font-semibold uppercase tracking-wider whitespace-nowrap transition-colors ${\n active ? 'text-text-primary' : 'text-text-tertiary'\n } ${clickable && !active ? 'hover:text-text-primary' : ''}`}\n >\n {label}\n </span>\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["StepIndicator","steps","currentStep","onStepClick","jsx","label","i","done","active","clickable","jsxs"],"mappings":"+CAMO,SAASA,EAAc,CAAE,MAAAC,EAAO,YAAAC,EAAa,YAAAC,GAAmC,CACrF,OACEC,MAAC,OAAI,UAAU,kFACZ,WAAM,IAAI,CAACC,EAAOC,IAAM,CACvB,MAAMC,EAAOD,EAAIJ,EACXM,EAASF,IAAMJ,EACfO,EAAY,CAAC,CAACN,EACpB,OACEO,EAAAA,KAAC,MAAA,CAAgB,UAAU,0BACxB,SAAA,CAAAJ,EAAI,SACF,MAAA,CAAI,UAAW,YAAYC,EAAO,YAAc,mBAAmB,EAAA,CAAI,EAE1EG,EAAAA,KAAC,SAAA,CACC,KAAK,SACL,QAASD,EAAY,IAAMN,EAAYG,CAAC,EAAI,OAC5C,UAAW,2BAA2BG,EAAY,iBAAmB,gBAAgB,GAErF,SAAA,CAAAL,EAAAA,IAAC,OAAA,CACC,UAAW,8GACTI,EACI,8BACAD,EACE,8BACA,sCACR,IAAIE,GAAa,CAACD,EAAS,0CAA4C,EAAE,GAExE,SAAAF,EAAI,CAAA,CAAA,EAEPF,EAAAA,IAAC,OAAA,CACC,UAAW,0FACTI,EAAS,oBAAsB,oBACjC,IAAIC,GAAa,CAACD,EAAS,0BAA4B,EAAE,GAExD,SAAAH,CAAA,CAAA,CACH,CAAA,CAAA,CACF,CAAA,EA3BQA,CA4BV,CAEJ,CAAC,CAAA,CACH,CAEJ"}
1
+ {"version":3,"file":"StepIndicator-CP7eycjI.js","sources":["../../src/components/common/layout/StepIndicator.tsx"],"sourcesContent":["interface StepIndicatorProps {\n steps: string[];\n currentStep: number;\n onStepClick?: (step: number) => void;\n}\n\nexport function StepIndicator({ steps, currentStep, onStepClick }: StepIndicatorProps) {\n return (\n <div className=\"flex items-center justify-center gap-1 pb-4 border-b border-surface-border mb-4\">\n {steps.map((label, i) => {\n const done = i < currentStep;\n const active = i === currentStep;\n const clickable = !!onStepClick;\n return (\n <div key={label} className=\"flex items-center gap-1\">\n {i > 0 && (\n <div className={`w-4 h-px ${done ? 'bg-accent' : 'bg-surface-border'}`} />\n )}\n <button\n type=\"button\"\n onClick={clickable ? () => onStepClick(i) : undefined}\n className={`flex items-center gap-1 ${clickable ? 'cursor-pointer' : 'cursor-default'}`}\n >\n <span\n className={`w-5 h-5 rounded-full text-[10px] font-semibold flex items-center justify-center shrink-0 transition-colors ${\n active\n ? 'bg-accent text-text-inverse'\n : done\n ? 'bg-accent-muted text-accent'\n : 'bg-surface-sunken text-text-tertiary'\n } ${clickable && !active ? 'hover:bg-accent-muted hover:text-accent' : ''}`}\n >\n {i + 1}\n </span>\n <span\n className={`text-[10px] font-semibold uppercase tracking-wider whitespace-nowrap transition-colors ${\n active ? 'text-text-primary' : 'text-text-tertiary'\n } ${clickable && !active ? 'hover:text-text-primary' : ''}`}\n >\n {label}\n </span>\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["StepIndicator","steps","currentStep","onStepClick","jsxDEV","label","i","done","active","clickable"],"mappings":"wCAMO,SAASA,EAAc,CAAE,MAAAC,EAAO,YAAAC,EAAa,YAAAC,GAAmC,CACrF,OACEC,SAAC,OAAI,UAAU,kFACZ,WAAM,IAAI,CAACC,EAAOC,IAAM,CACvB,MAAMC,EAAOD,EAAIJ,EACXM,EAASF,IAAMJ,EACfO,EAAY,CAAC,CAACN,EACpB,OACEC,EAAAA,OAAC,MAAA,CAAgB,UAAU,0BACxB,SAAA,CAAAE,EAAI,YACF,MAAA,CAAI,UAAW,YAAYC,EAAO,YAAc,mBAAmB,EAAA,EAApE,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwE,EAE1EH,EAAAA,OAAC,SAAA,CACC,KAAK,SACL,QAASK,EAAY,IAAMN,EAAYG,CAAC,EAAI,OAC5C,UAAW,2BAA2BG,EAAY,iBAAmB,gBAAgB,GAErF,SAAA,CAAAL,EAAAA,OAAC,OAAA,CACC,UAAW,8GACTI,EACI,8BACAD,EACE,8BACA,sCACR,IAAIE,GAAa,CAACD,EAAS,0CAA4C,EAAE,GAExE,SAAAF,EAAI,CAAA,EATP,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAWAF,EAAAA,OAAC,OAAA,CACC,UAAW,0FACTI,EAAS,oBAAsB,oBACjC,IAAIC,GAAa,CAACD,EAAS,0BAA4B,EAAE,GAExD,SAAAH,CAAA,EALH,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAtBF,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAuBA,CAAA,EA3BQA,EAAV,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IA4BA,CAEJ,CAAC,CAAA,EApCH,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,EAAA,aAAA,CAAA,EAAA,IAqCA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as e}from"./index-CCOSf1PY.js";const l=[10,25,50,100];function d({page:t,totalPages:s,onPageChange:i,total:n,pageSize:o,onPageSizeChange:m}){if(n===0)return null;const r=(t-1)*o+1,c=Math.min(t*o,n);return e.jsxDEV("div",{className:"flex items-center justify-between pt-4",children:[e.jsxDEV("div",{className:"flex items-center gap-4",children:[e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:[r,"–",c," of ",n]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:28,columnNumber:9},this),m&&e.jsxDEV("select",{value:o,onChange:a=>m(parseInt(a.target.value)),className:"select text-xs py-1",children:l.map(a=>e.jsxDEV("option",{value:a,children:[a," / page"]},a,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:38,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:32,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:27,columnNumber:7},this),s>1&&e.jsxDEV("div",{className:"flex items-center gap-1",children:[e.jsxDEV("button",{onClick:()=>i(t-1),disabled:t<=1,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed",children:"Previous"},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:47,columnNumber:11},this),e.jsxDEV("span",{className:"px-3 text-xs text-text-secondary",children:[t," / ",s]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:54,columnNumber:11},this),e.jsxDEV("button",{onClick:()=>i(t+1),disabled:t>=s,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed",children:"Next"},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:57,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:46,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:26,columnNumber:5},this)}function b(t){return t.total===0?null:e.jsxDEV("div",{className:"sticky bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-2 pb-4",style:{bottom:"calc(var(--feed-height, 0px) - 8px)"},children:e.jsxDEV(d,{...t},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StickyPagination.tsx",lineNumber:17,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StickyPagination.tsx",lineNumber:16,columnNumber:5},this)}export{b as S};
2
+ //# sourceMappingURL=StickyPagination-CGk8VAKt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StickyPagination-F9FZsRy9.js","sources":["../../src/components/common/data/Pagination.tsx","../../src/components/common/data/StickyPagination.tsx"],"sourcesContent":["const PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\ninterface PaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n total: number;\n pageSize: number;\n onPageSizeChange?: (size: number) => void;\n}\n\nexport function Pagination({\n page,\n totalPages,\n onPageChange,\n total,\n pageSize,\n onPageSizeChange,\n}: PaginationProps) {\n if (total === 0) return null;\n\n const start = (page - 1) * pageSize + 1;\n const end = Math.min(page * pageSize, total);\n\n return (\n <div className=\"flex items-center justify-between pt-4\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs text-text-tertiary\">\n {start}&ndash;{end} of {total}\n </p>\n {onPageSizeChange && (\n <select\n value={pageSize}\n onChange={(e) => onPageSizeChange(parseInt(e.target.value))}\n className=\"select text-xs py-1\"\n >\n {PAGE_SIZE_OPTIONS.map((size) => (\n <option key={size} value={size}>\n {size} / page\n </option>\n ))}\n </select>\n )}\n </div>\n {totalPages > 1 && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n Previous\n </button>\n <span className=\"px-3 text-xs text-text-secondary\">\n {page} / {totalPages}\n </span>\n <button\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n Next\n </button>\n </div>\n )}\n </div>\n );\n}\n","import { Pagination } from './Pagination';\n\ninterface StickyPaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n total: number;\n pageSize: number;\n onPageSizeChange?: (size: number) => void;\n}\n\nexport function StickyPagination(props: StickyPaginationProps) {\n if (props.total === 0) return null;\n\n return (\n <div className=\"sticky bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-2 pb-4\" style={{ bottom: 'calc(var(--feed-height, 0px) - 8px)' }}>\n <Pagination {...props} />\n </div>\n );\n}\n"],"names":["PAGE_SIZE_OPTIONS","Pagination","page","totalPages","onPageChange","total","pageSize","onPageSizeChange","start","end","jsxs","jsx","size","StickyPagination","props"],"mappings":"+CAAA,MAAMA,EAAoB,CAAC,GAAI,GAAI,GAAI,GAAG,EAWnC,SAASC,EAAW,CACzB,KAAAC,EACA,WAAAC,EACA,aAAAC,EACA,MAAAC,EACA,SAAAC,EACA,iBAAAC,CACF,EAAoB,CAClB,GAAIF,IAAU,EAAG,OAAO,KAExB,MAAMG,GAASN,EAAO,GAAKI,EAAW,EAChCG,EAAM,KAAK,IAAIP,EAAOI,EAAUD,CAAK,EAE3C,OACEK,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,KAAC,IAAA,CAAE,UAAU,6BACV,SAAA,CAAAF,EAAM,IAAQC,EAAI,OAAKJ,CAAA,EAC1B,EACCE,GACCI,EAAAA,IAAC,SAAA,CACC,MAAOL,EACP,SAAW,GAAMC,EAAiB,SAAS,EAAE,OAAO,KAAK,CAAC,EAC1D,UAAU,sBAET,WAAkB,IAAKK,GACtBF,OAAC,SAAA,CAAkB,MAAOE,EACvB,SAAA,CAAAA,EAAK,SAAA,CAAA,EADKA,CAEb,CACD,CAAA,CAAA,CACH,EAEJ,EACCT,EAAa,GACZO,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAC,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMP,EAAaF,EAAO,CAAC,EACpC,SAAUA,GAAQ,EAClB,UAAU,oEACX,SAAA,UAAA,CAAA,EAGDQ,EAAAA,KAAC,OAAA,CAAK,UAAU,mCACb,SAAA,CAAAR,EAAK,MAAIC,CAAA,EACZ,EACAQ,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMP,EAAaF,EAAO,CAAC,EACpC,SAAUA,GAAQC,EAClB,UAAU,oEACX,SAAA,MAAA,CAAA,CAED,CAAA,CACF,CAAA,EAEJ,CAEJ,CCxDO,SAASU,EAAiBC,EAA8B,CAC7D,OAAIA,EAAM,QAAU,EAAU,KAG5BH,EAAAA,IAAC,MAAA,CAAI,UAAU,8FAA8F,MAAO,CAAE,OAAQ,qCAAA,EAC5H,SAAAA,EAAAA,IAACV,EAAA,CAAY,GAAGa,EAAO,EACzB,CAEJ"}
1
+ {"version":3,"file":"StickyPagination-CGk8VAKt.js","sources":["../../src/components/common/data/Pagination.tsx","../../src/components/common/data/StickyPagination.tsx"],"sourcesContent":["const PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\ninterface PaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n total: number;\n pageSize: number;\n onPageSizeChange?: (size: number) => void;\n}\n\nexport function Pagination({\n page,\n totalPages,\n onPageChange,\n total,\n pageSize,\n onPageSizeChange,\n}: PaginationProps) {\n if (total === 0) return null;\n\n const start = (page - 1) * pageSize + 1;\n const end = Math.min(page * pageSize, total);\n\n return (\n <div className=\"flex items-center justify-between pt-4\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs text-text-tertiary\">\n {start}&ndash;{end} of {total}\n </p>\n {onPageSizeChange && (\n <select\n value={pageSize}\n onChange={(e) => onPageSizeChange(parseInt(e.target.value))}\n className=\"select text-xs py-1\"\n >\n {PAGE_SIZE_OPTIONS.map((size) => (\n <option key={size} value={size}>\n {size} / page\n </option>\n ))}\n </select>\n )}\n </div>\n {totalPages > 1 && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n Previous\n </button>\n <span className=\"px-3 text-xs text-text-secondary\">\n {page} / {totalPages}\n </span>\n <button\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n Next\n </button>\n </div>\n )}\n </div>\n );\n}\n","import { Pagination } from './Pagination';\n\ninterface StickyPaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n total: number;\n pageSize: number;\n onPageSizeChange?: (size: number) => void;\n}\n\nexport function StickyPagination(props: StickyPaginationProps) {\n if (props.total === 0) return null;\n\n return (\n <div className=\"sticky bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-2 pb-4\" style={{ bottom: 'calc(var(--feed-height, 0px) - 8px)' }}>\n <Pagination {...props} />\n </div>\n );\n}\n"],"names":["PAGE_SIZE_OPTIONS","Pagination","page","totalPages","onPageChange","total","pageSize","onPageSizeChange","start","end","jsxDEV","e","size","StickyPagination","props"],"mappings":"wCAAA,MAAMA,EAAoB,CAAC,GAAI,GAAI,GAAI,GAAG,EAWnC,SAASC,EAAW,CACzB,KAAAC,EACA,WAAAC,EACA,aAAAC,EACA,MAAAC,EACA,SAAAC,EACA,iBAAAC,CACF,EAAoB,CAClB,GAAIF,IAAU,EAAG,OAAO,KAExB,MAAMG,GAASN,EAAO,GAAKI,EAAW,EAChCG,EAAM,KAAK,IAAIP,EAAOI,EAAUD,CAAK,EAE3C,OACEK,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,IAAA,CAAE,UAAU,6BACV,SAAA,CAAAF,EAAM,IAAQC,EAAI,OAAKJ,CAAA,CAAA,EAD1B,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EACCE,GACCG,EAAAA,OAAC,SAAA,CACC,MAAOJ,EACP,SAAWK,GAAMJ,EAAiB,SAASI,EAAE,OAAO,KAAK,CAAC,EAC1D,UAAU,sBAET,WAAkB,IAAKC,GACtBF,SAAC,SAAA,CAAkB,MAAOE,EACvB,SAAA,CAAAA,EAAK,SAAA,CAAA,EADKA,EAAb,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CACD,CAAA,EATH,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAUA,CAAA,EAfJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAiBA,EACCT,EAAa,GACZO,SAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMN,EAAaF,EAAO,CAAC,EACpC,SAAUA,GAAQ,EAClB,UAAU,oEACX,SAAA,UAAA,EAJD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAOAQ,EAAAA,OAAC,OAAA,CAAK,UAAU,mCACb,SAAA,CAAAR,EAAK,MAAIC,CAAA,CAAA,EADZ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAO,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMN,EAAaF,EAAO,CAAC,EACpC,SAAUA,GAAQC,EAClB,UAAU,oEACX,SAAA,MAAA,EAJD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAjBF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAkBA,CAAA,CAAA,EAtCJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAwCA,CAEJ,CCxDO,SAASU,EAAiBC,EAA8B,CAC7D,OAAIA,EAAM,QAAU,EAAU,KAG5BJ,EAAAA,OAAC,MAAA,CAAI,UAAU,8FAA8F,MAAO,CAAE,OAAQ,qCAAA,EAC5H,SAAAA,EAAAA,OAACT,EAAA,CAAY,GAAGa,CAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAuB,CAAA,EADzB,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{j as e,D as W,c as A,J as g,f as S,C as K}from"./index-CCOSf1PY.js";import{a as C}from"./vendor-query-DLp59M9_.js";import{S as Y}from"./StatusBadge-CQlF46RR.js";import{L as I}from"./vendor-react-Co3Y8ikm.js";function $(a){if(!a)return null;try{return JSON.parse(a)}catch{return a}}function J({event:a}){return e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3",children:[a.attributes.activity_type&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Activity"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:22,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.activity_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:25,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:21,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Kind"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:31,columnNumber:9},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.kind},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:34,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:30,columnNumber:7},this),a.duration_ms!==null&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Duration"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:40,columnNumber:11},this),e.jsxDEV(W,{ms:a.duration_ms,className:"font-mono text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:43,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:39,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Time"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:47,columnNumber:9},this),e.jsxDEV(A,{date:a.event_time,format:"datetime",className:"font-mono text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:50,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:46,columnNumber:7},this),a.attributes.signal_name&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Signal"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:55,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.signal_name},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:58,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:54,columnNumber:9},this),a.attributes.awaited!==void 0&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Awaited"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:66,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.awaited?"Yes":"No (fire-and-forget)"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:69,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:65,columnNumber:9},this),a.attributes.timeline_key&&e.jsxDEV("div",{className:"col-span-2",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Timeline Key"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:77,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary truncate",title:a.attributes.timeline_key,children:a.attributes.timeline_key},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:80,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:76,columnNumber:9},this),a.attributes.execution_index!==void 0&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Exec Index"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:88,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:a.attributes.execution_index},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:91,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:87,columnNumber:9},this),a.attributes.scheduled_event_id!=null&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Scheduled Event"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:99,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:["#",a.attributes.scheduled_event_id]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:102,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:98,columnNumber:9},this),a.attributes.wait_event_id!=null&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Wait Started"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:109,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:["Event #",a.attributes.wait_event_id]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:112,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:108,columnNumber:9},this),a.attributes.initiated_event_id!=null&&e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Initiated Event"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:119,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary",children:["#",a.attributes.initiated_event_id]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:122,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:118,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:19,columnNumber:5},this)}function z({event:a,childTask:i}){const o=i?$(i.envelope):null,d=i?$(i.data):null;return!i&&a.attributes.child_workflow_id?e.jsxDEV("div",{className:"border-t border-surface-border pt-3",children:e.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsxDEV("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Child Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:143,columnNumber:11},this),e.jsxDEV(I,{to:`/workflows/executions/${a.attributes.child_workflow_id}`,className:"text-xs font-mono text-accent hover:underline",onClick:m=>m.stopPropagation(),children:a.attributes.child_workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:146,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:142,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:141,columnNumber:7},this):i?e.jsxDEV("div",{className:"space-y-3 border-t border-surface-border pt-3",children:[e.jsxDEV("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsxDEV("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Child Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:163,columnNumber:11},this),e.jsxDEV(I,{to:`/workflows/executions/${i.workflow_id}`,className:"text-xs font-mono text-accent hover:underline",onClick:m=>m.stopPropagation(),children:i.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:166,columnNumber:11},this),e.jsxDEV(Y,{status:i.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:173,columnNumber:11},this),i.completed_at&&e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:["Completed ",e.jsxDEV(A,{date:i.completed_at,format:"relative"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:176,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:175,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:162,columnNumber:9},this),(o!=null||d!=null)&&e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[o!=null?e.jsxDEV(g,{data:o,label:"Input (Envelope)",variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:184,columnNumber:15},this):e.jsxDEV("div",{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:185,columnNumber:17},this),d!=null?e.jsxDEV(g,{data:d,label:"Output (Result)",variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:187,columnNumber:15},this):e.jsxDEV("div",{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:188,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:182,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:161,columnNumber:7},this):null}function B({event:a,childTask:i}){const o=a.attributes.input,d=a.attributes.result,m=a.category==="signal",u=a.category==="activity",n=a.category==="child_workflow",c=o!==void 0&&(u||n),p=!i&&d!==void 0&&(u||n),l=a.attributes.activity_type==="ltSignalParent"?"Signal Payload":"Result";return c||p?e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[c?e.jsxDEV(g,{data:o,label:"Input",variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:215,columnNumber:11},this):e.jsxDEV("div",{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:216,columnNumber:13},this),p?e.jsxDEV(g,{data:d,label:l,variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:218,columnNumber:11},this):e.jsxDEV("div",{},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:219,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:213,columnNumber:7},this):m&&o!==void 0?e.jsxDEV(g,{data:o,label:"Signal Payload",variant:"panel"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventMetadataGrid.tsx",lineNumber:225,columnNumber:12},this):null}function H({event:a,childTask:i,pending:o=!1,onClose:d}){return e.jsxDEV("div",{className:"p-4 bg-surface-sunken rounded-md space-y-4",children:[e.jsxDEV("div",{className:"flex items-center justify-between gap-2",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("p",{className:"font-mono font-medium text-sm text-text-primary",children:a.attributes.activity_type??a.attributes.signal_name??a.attributes.child_workflow_id??a.event_type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:30,columnNumber:11},this),o&&e.jsxDEV("span",{className:"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium bg-status-warning/15 text-status-warning",children:[e.jsxDEV("span",{className:"w-1.5 h-1.5 rounded-full bg-status-warning animate-pulse"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:38,columnNumber:15},this),"Pending"]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:37,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:29,columnNumber:9},this),d&&e.jsxDEV("button",{onClick:d,className:"text-text-tertiary hover:text-text-primary text-xs",children:"Close"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:44,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:28,columnNumber:7},this),e.jsxDEV(J,{event:a},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:54,columnNumber:7},this),e.jsxDEV(z,{event:a,childTask:i},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:57,columnNumber:7},this),e.jsxDEV(B,{event:a,childTask:i},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:60,columnNumber:7},this),a.attributes.failure!==void 0&&e.jsxDEV(g,{data:a.attributes.failure,label:"Failure"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:64,columnNumber:9},this),(()=>{const{kind:m,activity_type:u,result:n,timeline_key:c,execution_index:p,signal_name:l,input:E,child_workflow_id:D,awaited:N,wait_event_id:y,scheduled_event_id:b,initiated_event_id:w,failure:h,trace_id:v,span_id:_,...j}=a.attributes;return Object.keys(j).length>0?e.jsxDEV(g,{data:j,label:"Attributes"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:88,columnNumber:11},this):null})()]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/EventDetailPanel.tsx",lineNumber:26,columnNumber:5},this)}const k={activity:{bar:"bg-blue-500",outline:"border-blue-500 bg-transparent",text:"text-blue-500",label:"Activities"},signal:{bar:"bg-emerald-500",outline:"border-emerald-500 bg-transparent",text:"text-emerald-500",label:"Signals"},timer:{bar:"bg-status-warning",outline:"border-status-warning bg-transparent",text:"text-status-warning",label:"Timers"},child_workflow:{bar:"bg-violet-500",outline:"border-violet-500 bg-transparent",text:"text-violet-500",label:"Child Workflows"}},F="bg-stripes animate-pulse opacity-70",X=new Set(["callLLM","callDbTool","callVisionTool","callMcpTool","getDBTools","getVisionTools"]);function q(a,i){if(!a||typeof a!="string")return a??"";if(a.length<=i)return a;const o=Math.floor((i-1)/2);return`${a.slice(0,o)}…${a.slice(a.length-o)}`}function Q(a){const i=[],o=new Map,d=new Map;for(const u of a){const n=u.attributes.timeline_key;if(!n)continue;const c=u.event_type;c==="activity_task_scheduled"||c==="timer_started"||c==="child_workflow_execution_started"||c==="signal_wait_started"?o.set(n,u):d.set(n,u)}const m=new Set;for(const u of a){const n=u.attributes.timeline_key;if(n&&m.has(n))continue;n&&m.add(n);const c=n?o.get(n):void 0,p=n?d.get(n):void 0,l=p||c||u,E=l.category,D=String(l.attributes.activity_type||l.attributes.signal_name||l.attributes.child_workflow_id||l.event_type||"unknown"),N=c||l,y=p,b=new Date(N.event_time).getTime();let w=null,h=null,v=!1;y?(w=new Date(y.event_time).getTime(),h=y.duration_ms??w-b):l.duration_ms!==null?(h=l.duration_ms,w=b+h):v=!0,i.push({category:E,name:D||l.event_type,startTime:b,endTime:w,duration:h,eventId:l.event_id,pending:v})}return i}function ae({events:a,childTasks:i,outline:o}){const[d,m]=C.useState(new Set),[u,n]=C.useState(null),p=a.filter(t=>t.category!=="workflow");if(p.length===0)return null;const l=Q(p);if(l.length===0)return null;const E=Date.now(),D=l.flatMap(t=>{const r=[t.startTime];return t.endTime?r.push(t.endTime):r.push(E),r}),N=Math.min(...D),b=Math.max(...D)-N||1,w=new Map;for(const t of l){const r=`${t.category}:${t.name}`,s=t.startTime-N,x=(t.endTime?t.endTime-N:E-N)-s,V={eventId:t.eventId,startPct:s/b*100,widthPct:Math.max(x/b*100,.5),duration:t.duration,label:`${t.name} — ${t.duration!==null?S(t.duration):"pending"} — ${new Date(t.startTime).toLocaleTimeString()}`,eventTime:new Date(t.startTime).toISOString(),pending:t.pending};w.has(r)||w.set(r,{name:t.name,category:t.category,segments:[]}),w.get(r).segments.push(V)}const h=Array.from(w.values()),v=5,_=Array.from({length:v+1},(t,r)=>({pct:r/v*100,label:S(Math.round(r/v*b))})),j=[...new Set(l.map(t=>t.category))],O=t=>{if(!(i!=null&&i.length))return;const r=t.attributes.activity_type;if(r)return i.find(s=>s.workflow_type===r)},G=t=>{m(r=>{const s=new Set(r);return s.has(t)?s.delete(t):s.add(t),s})},M=l.map(t=>t.eventId),T=M.length>0&&M.every(t=>d.has(t)),L=()=>{m(T?new Set:new Set(M))},P=(t,r)=>{var s,f;return r?F:o?((s=k[t])==null?void 0:s.outline)??"border-text-tertiary bg-transparent":((f=k[t])==null?void 0:f.bar)??"bg-text-tertiary"},R=t=>{var r;return o?((r=k[t])==null?void 0:r.text)??"text-text-tertiary":"text-white"};return e.jsxDEV("div",{className:"px-6 py-6 mb-6",children:[e.jsxDEV("div",{className:"flex items-center gap-4 mb-4 flex-wrap",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Execution Timeline"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:134,columnNumber:9},this),e.jsxDEV("button",{onClick:L,className:"text-[10px] text-accent hover:underline",children:T?"Collapse all":"Expand all"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:137,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-3 ml-auto",children:[j.map(t=>{var r,s,f;return e.jsxDEV("div",{className:"flex items-center gap-1",children:[e.jsxDEV("span",{className:`w-2 h-2 rounded-full ${o?`border ${((r=k[t])==null?void 0:r.outline)??"border-text-tertiary"}`:((s=k[t])==null?void 0:s.bar)??"bg-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:145,columnNumber:15},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:((f=k[t])==null?void 0:f.label)??t},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:146,columnNumber:15},this)]},t,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:144,columnNumber:13},this)}),l.some(t=>t.pending)&&e.jsxDEV("div",{className:"flex items-center gap-1",children:[e.jsxDEV("span",{className:"w-2 h-2 rounded-full bg-status-warning animate-pulse"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:153,columnNumber:15},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:"Pending"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:154,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:152,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:142,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:133,columnNumber:7},this),e.jsxDEV("div",{className:"flex",children:[e.jsxDEV("div",{className:"w-56 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:162,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 relative h-6 border-b border-surface-border",children:_.map(t=>e.jsxDEV("span",{className:"absolute text-[9px] font-mono text-text-tertiary -translate-x-1/2 bottom-1",style:{left:`${t.pct}%`},children:t.label},t.pct,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:165,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:163,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:161,columnNumber:7},this),h.map(t=>{const r=k[t.category];return e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center border-b border-surface-border",children:[e.jsxDEV("div",{className:"w-56 shrink-0 py-3 pr-4 flex items-center gap-2",children:[e.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full shrink-0 ${(r==null?void 0:r.bar)??"bg-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:185,columnNumber:17},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-secondary whitespace-nowrap overflow-hidden",title:t.name,children:q(t.name,28)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:186,columnNumber:17},this),X.has(t.name)&&e.jsxDEV("span",{className:"shrink-0 text-accent/60",title:"MCP tool interaction",children:e.jsxDEV("svg",{className:"w-3 h-3",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:195,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:194,columnNumber:21},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:193,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:184,columnNumber:15},this),e.jsxDEV("div",{className:"flex-1 relative h-10",children:[_.map(s=>e.jsxDEV("div",{className:"absolute top-0 bottom-0 w-px bg-surface-border opacity-30",style:{left:`${s.pct}%`}},s.pct,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:203,columnNumber:19},this)),t.segments.map(s=>{const f=u===s.eventId,x=d.has(s.eventId),V=s.widthPct<3;return e.jsxDEV("div",{className:`absolute top-2 h-6 rounded-sm cursor-pointer transition-all duration-200 origin-center ${o?"border-2":""} ${x?`${P(t.category,s.pending)} ring-2 ring-accent ring-offset-1`:`${P(t.category,s.pending)} hover:opacity-80`}`,style:{left:`${s.startPct}%`,width:`${s.widthPct}%`,minWidth:"4px",...f&&V?{transform:"scaleX(4) scaleY(1.3) translateY(-2px)",zIndex:20,borderRadius:"4px"}:{zIndex:x?10:1}},title:s.label,onClick:()=>G(s.eventId),onMouseEnter:()=>n(s.eventId),onMouseLeave:()=>n(null),children:s.widthPct>8&&e.jsxDEV("span",{className:`absolute inset-0 flex items-center px-1.5 text-[9px] font-mono ${R(t.category)} truncate`,children:s.duration!==null?S(s.duration):"pending"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:240,columnNumber:25},this)},s.eventId,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:215,columnNumber:21},this)})]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:201,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:183,columnNumber:13},this),t.segments.map(s=>{const f=d.has(s.eventId),x=p.find(V=>V.event_id===s.eventId);return e.jsxDEV(K,{open:f,children:x&&e.jsxDEV("div",{className:"py-3",children:e.jsxDEV(H,{event:x,childTask:O(x),pending:s.pending,onClose:()=>G(x.event_id)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:258,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:257,columnNumber:21},this)},s.eventId,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:255,columnNumber:17},this)})]},`${t.category}:${t.name}`,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:181,columnNumber:11},this)})]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/SwimlaneTimeline.tsx",lineNumber:132,columnNumber:5},this)}export{H as E,ae as S};
2
+ //# sourceMappingURL=SwimlaneTimeline-MEUPc3yJ.js.map