@hotmeshio/long-tail 0.8.1 → 0.8.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.
- package/dashboard/dist/assets/AdminDashboard-Nvja-XIJ.js +2 -0
- package/dashboard/dist/assets/{AdminDashboard-Ck5-jV9T.js.map → AdminDashboard-Nvja-XIJ.js.map} +1 -1
- package/dashboard/dist/assets/AgentConfigPage-Sf2god7q.js +16 -0
- package/dashboard/dist/assets/{AgentConfigPage-DFiXRBWs.js.map → AgentConfigPage-Sf2god7q.js.map} +1 -1
- package/dashboard/dist/assets/AgentDetailPage-DtgDeZJR.js +4 -0
- package/dashboard/dist/assets/{AgentDetailPage-BBgM_pMe.js.map → AgentDetailPage-DtgDeZJR.js.map} +1 -1
- package/dashboard/dist/assets/AgentsPage-C6zqP_xC.js +2 -0
- package/dashboard/dist/assets/{AgentsPage-DxwFuedf.js.map → AgentsPage-C6zqP_xC.js.map} +1 -1
- package/dashboard/dist/assets/AvailableEscalationsPage-D61kC7Is.js +2 -0
- package/dashboard/dist/assets/{AvailableEscalationsPage-DNQbeIcn.js.map → AvailableEscalationsPage-D61kC7Is.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-ChgljKHj.js +2 -0
- package/dashboard/dist/assets/{BotPicker-mqwKVOE3.js.map → BotPicker-ChgljKHj.js.map} +1 -1
- package/dashboard/dist/assets/CapabilitiesPage-DeybKoZM.js +2 -0
- package/dashboard/dist/assets/{CapabilitiesPage-Biffm0kW.js.map → CapabilitiesPage-DeybKoZM.js.map} +1 -1
- package/dashboard/dist/assets/CollapsibleSection-BPiTuPBk.js +2 -0
- package/dashboard/dist/assets/{CollapsibleSection-Bn6Ks79X.js.map → CollapsibleSection-BPiTuPBk.js.map} +1 -1
- package/dashboard/dist/assets/ConfirmDeleteModal-D9_1b4MW.js +2 -0
- package/dashboard/dist/assets/{ConfirmDeleteModal-no0-c_1G.js.map → ConfirmDeleteModal-D9_1b4MW.js.map} +1 -1
- package/dashboard/dist/assets/CopyableId-blg-gZvT.js +2 -0
- package/dashboard/dist/assets/{CopyableId-DS6IDMIX.js.map → CopyableId-blg-gZvT.js.map} +1 -1
- package/dashboard/dist/assets/CredentialsPage-DXOcPWtd.js +2 -0
- package/dashboard/dist/assets/{CredentialsPage-C3NyncEB.js.map → CredentialsPage-DXOcPWtd.js.map} +1 -1
- package/dashboard/dist/assets/CronLabel-D3411N8x.js +2 -0
- package/dashboard/dist/assets/{CronLabel-DQWBx57H.js.map → CronLabel-D3411N8x.js.map} +1 -1
- package/dashboard/dist/assets/CustomDurationPicker-WG2tPSbV.js +2 -0
- package/dashboard/dist/assets/{CustomDurationPicker-DV42oZ1G.js.map → CustomDurationPicker-WG2tPSbV.js.map} +1 -1
- package/dashboard/dist/assets/DataTable-ZWgVQg7F.js +2 -0
- package/dashboard/dist/assets/{DataTable-Bf4dgxll.js.map → DataTable-ZWgVQg7F.js.map} +1 -1
- package/dashboard/dist/assets/DropZone-SgiK1WOl.js +2 -0
- package/dashboard/dist/assets/{DropZone-CTSXBb3c.js.map → DropZone-SgiK1WOl.js.map} +1 -1
- package/dashboard/dist/assets/ElapsedCell-BFWEGSD7.js +2 -0
- package/dashboard/dist/assets/{ElapsedCell-roy4G5SQ.js.map → ElapsedCell-BFWEGSD7.js.map} +1 -1
- package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +2 -0
- package/dashboard/dist/assets/{EmptyState-CLVm9KmA.js.map → EmptyState-BcsfPq9T.js.map} +1 -1
- package/dashboard/dist/assets/EscalationSchemaPage-D2Y5Yeqn.js +9 -0
- package/dashboard/dist/assets/{EscalationSchemaPage-DulCCxea.js.map → EscalationSchemaPage-D2Y5Yeqn.js.map} +1 -1
- package/dashboard/dist/assets/EscalationsOverview-VlLcX2YM.js +2 -0
- package/dashboard/dist/assets/{EscalationsOverview-DDwxn_mT.js.map → EscalationsOverview-VlLcX2YM.js.map} +1 -1
- package/dashboard/dist/assets/EventTable-3MJw14jp.js +2 -0
- package/dashboard/dist/assets/{EventTable-BaLNvCew.js.map → EventTable-3MJw14jp.js.map} +1 -1
- package/dashboard/dist/assets/FilterBar-B4Mk2PvT.js +2 -0
- package/dashboard/dist/assets/{FilterBar-DEAbNQqp.js.map → FilterBar-B4Mk2PvT.js.map} +1 -1
- package/dashboard/dist/assets/GraphInvokePage-QaUUrPnh.js +2 -0
- package/dashboard/dist/assets/{GraphInvokePage-BmM8r0R3.js.map → GraphInvokePage-QaUUrPnh.js.map} +1 -1
- package/dashboard/dist/assets/HomePage-Br0A3iOp.js +2 -0
- package/dashboard/dist/assets/HomePage-Br0A3iOp.js.map +1 -0
- package/dashboard/dist/assets/ListToolbar-d4MGQefV.js +2 -0
- package/dashboard/dist/assets/{ListToolbar-Dviaskni.js.map → ListToolbar-d4MGQefV.js.map} +1 -1
- package/dashboard/dist/assets/McpOverview-CUzJD5Z5.js +2 -0
- package/dashboard/dist/assets/{McpOverview-BBm66wbF.js.map → McpOverview-CUzJD5Z5.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-pYSZmV3M.js +5 -0
- package/dashboard/dist/assets/{McpQueryDetailPage-B6GJOMcz.js.map → McpQueryDetailPage-pYSZmV3M.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryPage-CA5C5dss.js +2 -0
- package/dashboard/dist/assets/{McpQueryPage-C-8nIdBL.js.map → McpQueryPage-CA5C5dss.js.map} +1 -1
- package/dashboard/dist/assets/McpRunDetailPage-CrRkXwAe.js +2 -0
- package/dashboard/dist/assets/{McpRunDetailPage-CSq_0qqi.js.map → McpRunDetailPage-CrRkXwAe.js.map} +1 -1
- package/dashboard/dist/assets/McpRunsPage-BqRBDbkn.js +2 -0
- package/dashboard/dist/assets/McpRunsPage-BqRBDbkn.js.map +1 -0
- package/dashboard/dist/assets/Modal-CSrxpXeM.js +2 -0
- package/dashboard/dist/assets/{Modal-C6HI6btY.js.map → Modal-CSrxpXeM.js.map} +1 -1
- package/dashboard/dist/assets/NamespacePill-SErKwgkb.js +2 -0
- package/dashboard/dist/assets/{NamespacePill-eGsbJBFa.js.map → NamespacePill-SErKwgkb.js.map} +1 -1
- package/dashboard/dist/assets/OperationsPage--uVJxzmP.js +2 -0
- package/dashboard/dist/assets/OperationsPage--uVJxzmP.js.map +1 -0
- package/dashboard/dist/assets/OperatorDashboard-D-UMrTqI.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-BbmgsOmQ.js.map → OperatorDashboard-D-UMrTqI.js.map} +1 -1
- package/dashboard/dist/assets/PageHeader-DJo7yMUR.js +2 -0
- package/dashboard/dist/assets/{PageHeader-DcgGV0Y2.js.map → PageHeader-DJo7yMUR.js.map} +1 -1
- package/dashboard/dist/assets/PageHeaderWithStats-W3akV6nB.js +2 -0
- package/dashboard/dist/assets/{PageHeaderWithStats-Cf8TYFRh.js.map → PageHeaderWithStats-W3akV6nB.js.map} +1 -1
- package/dashboard/dist/assets/PriorityBadge-B4ykBH7f.js +2 -0
- package/dashboard/dist/assets/{PriorityBadge-a7u8C9uY.js.map → PriorityBadge-B4ykBH7f.js.map} +1 -1
- package/dashboard/dist/assets/ProcessDetailPage-BV6D_wuR.js +2 -0
- package/dashboard/dist/assets/{ProcessDetailPage-D80w44rV.js.map → ProcessDetailPage-BV6D_wuR.js.map} +1 -1
- package/dashboard/dist/assets/ProcessesListPage-BAalEHpx.js +2 -0
- package/dashboard/dist/assets/{ProcessesListPage-BjW5xUkv.js.map → ProcessesListPage-BAalEHpx.js.map} +1 -1
- package/dashboard/dist/assets/RoleDetailPage-ClE7rUoo.js +11 -0
- package/dashboard/dist/assets/{RoleDetailPage-oahg0cdT.js.map → RoleDetailPage-ClE7rUoo.js.map} +1 -1
- package/dashboard/dist/assets/RolePill-DHWixsQR.js +2 -0
- package/dashboard/dist/assets/{RolePill-BAeaQUXX.js.map → RolePill-DHWixsQR.js.map} +1 -1
- package/dashboard/dist/assets/RolesPage-DMsgZioQ.js +2 -0
- package/dashboard/dist/assets/{RolesPage-BI1Xtqq_.js.map → RolesPage-DMsgZioQ.js.map} +1 -1
- package/dashboard/dist/assets/RowActions-BA9L9djf.js +2 -0
- package/dashboard/dist/assets/{RowActions--m4F6GW8.js.map → RowActions-BA9L9djf.js.map} +1 -1
- package/dashboard/dist/assets/RunAsSelector-VCnEYIwj.js +2 -0
- package/dashboard/dist/assets/{RunAsSelector-DiGzSfiG.js.map → RunAsSelector-VCnEYIwj.js.map} +1 -1
- package/dashboard/dist/assets/StatCard-DrdlUeQz.js +2 -0
- package/dashboard/dist/assets/{StatCard-DCPGFzCv.js.map → StatCard-DrdlUeQz.js.map} +1 -1
- package/dashboard/dist/assets/StatusBadge-DZ9137bI.js +2 -0
- package/dashboard/dist/assets/{StatusBadge-mk-dJwPT.js.map → StatusBadge-DZ9137bI.js.map} +1 -1
- package/dashboard/dist/assets/StickyPagination-3eCY2-_V.js +2 -0
- package/dashboard/dist/assets/{StickyPagination-Clm9H840.js.map → StickyPagination-3eCY2-_V.js.map} +1 -1
- package/dashboard/dist/assets/StreamMessageDetail-70kDFH4o.js +2 -0
- package/dashboard/dist/assets/{StreamMessageDetail-Bikvs1Cz.js.map → StreamMessageDetail-70kDFH4o.js.map} +1 -1
- package/dashboard/dist/assets/SwimlaneTimeline-BOXRit6t.js +2 -0
- package/dashboard/dist/assets/{SwimlaneTimeline-C9X3IVqI.js.map → SwimlaneTimeline-BOXRit6t.js.map} +1 -1
- package/dashboard/dist/assets/TagInput-CGGC3DTR.js +2 -0
- package/dashboard/dist/assets/{TagInput-DmJLnghg.js.map → TagInput-CGGC3DTR.js.map} +1 -1
- package/dashboard/dist/assets/TaskDetailPage-YxGQE9Qg.js +2 -0
- package/dashboard/dist/assets/TaskDetailPage-YxGQE9Qg.js.map +1 -0
- package/dashboard/dist/assets/TaskQueuePill-D6omQJNY.js +2 -0
- package/dashboard/dist/assets/{TaskQueuePill--1OX6egx.js.map → TaskQueuePill-D6omQJNY.js.map} +1 -1
- package/dashboard/dist/assets/TasksListPage-DuLJQN7Q.js +2 -0
- package/dashboard/dist/assets/{TasksListPage-DcYV-GMA.js.map → TasksListPage-DuLJQN7Q.js.map} +1 -1
- package/dashboard/dist/assets/TimeAgo-dnc1ZjKc.js +2 -0
- package/dashboard/dist/assets/{TimeAgo-pYn3T9IZ.js.map → TimeAgo-dnc1ZjKc.js.map} +1 -1
- package/dashboard/dist/assets/TimestampCell-CDR6cTyq.js +2 -0
- package/dashboard/dist/assets/{TimestampCell-BPMCscic.js.map → TimestampCell-CDR6cTyq.js.map} +1 -1
- package/dashboard/dist/assets/ToolPill-BW0iRwZu.js +2 -0
- package/dashboard/dist/assets/{ToolPill-BnF9lCUX.js.map → ToolPill-BW0iRwZu.js.map} +1 -1
- package/dashboard/dist/assets/ToolTestPanel-CfwGdRdz.js +2 -0
- package/dashboard/dist/assets/{ToolTestPanel-Bw4z_Tya.js.map → ToolTestPanel-CfwGdRdz.js.map} +1 -1
- package/dashboard/dist/assets/TopicDetailPage-f2qaeGFz.js +9 -0
- package/dashboard/dist/assets/{TopicDetailPage-CtFztOnn.js.map → TopicDetailPage-f2qaeGFz.js.map} +1 -1
- package/dashboard/dist/assets/TopicsPage-CwYdVmyK.js +2 -0
- package/dashboard/dist/assets/{TopicsPage-BXdc6pAU.js.map → TopicsPage-CwYdVmyK.js.map} +1 -1
- package/dashboard/dist/assets/UserName-CRE7EZPU.js +2 -0
- package/dashboard/dist/assets/{UserName-R96NG6xB.js.map → UserName-CRE7EZPU.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowExecutionPage-BjNBu-Zt.js +2 -0
- package/dashboard/dist/assets/{WorkflowExecutionPage-DmRJabMQ.js.map → WorkflowExecutionPage-BjNBu-Zt.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-BtNBSplz.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-Cc2MlYbB.js.map → WorkflowPill-BtNBSplz.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowsDashboard-DfpvbzNt.js +2 -0
- package/dashboard/dist/assets/WorkflowsDashboard-DfpvbzNt.js.map +1 -0
- package/dashboard/dist/assets/WorkflowsOverview-BwD2lQwj.js +2 -0
- package/dashboard/dist/assets/{WorkflowsOverview-BhgE0RS8.js.map → WorkflowsOverview-BwD2lQwj.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowDetailPage-BhHb7j2s.js +33 -0
- package/dashboard/dist/assets/{YamlWorkflowDetailPage-CvIgB5y7.js.map → YamlWorkflowDetailPage-BhHb7j2s.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-SBRpY2dI.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-SBRpY2dI.js.map +1 -0
- package/dashboard/dist/assets/{agents-BpYMwrsB.js → agents-VbkdqWCr.js} +2 -2
- package/dashboard/dist/assets/{agents-BpYMwrsB.js.map → agents-VbkdqWCr.js.map} +1 -1
- package/dashboard/dist/assets/{bots-DI6Wqp5X.js → bots-CsgYcYU_.js} +2 -2
- package/dashboard/dist/assets/{bots-DI6Wqp5X.js.map → bots-CsgYcYU_.js.map} +1 -1
- package/dashboard/dist/assets/capabilities-CMhFyoDl.js +2 -0
- package/dashboard/dist/assets/{capabilities-BKZZb8eM.js.map → capabilities-CMhFyoDl.js.map} +1 -1
- package/dashboard/dist/assets/{controlplane-Djshb7fm.js → controlplane-BstXtPbV.js} +2 -2
- package/dashboard/dist/assets/{controlplane-Djshb7fm.js.map → controlplane-BstXtPbV.js.map} +1 -1
- package/dashboard/dist/assets/escalation-C0BNAeIG.js +2 -0
- package/dashboard/dist/assets/{escalation-D8mrXtjS.js.map → escalation-C0BNAeIG.js.map} +1 -1
- package/dashboard/dist/assets/escalation-columns-DajPgfuV.js +2 -0
- package/dashboard/dist/assets/{escalation-columns-CyLzgPkz.js.map → escalation-columns-DajPgfuV.js.map} +1 -1
- package/dashboard/dist/assets/index-BWLVqWLU.js +2 -0
- package/dashboard/dist/assets/{index-CQtv2rj6.js.map → index-BWLVqWLU.js.map} +1 -1
- package/dashboard/dist/assets/index-BY5m8rhE.js +2 -0
- package/dashboard/dist/assets/{index-CwAmiy_j.js.map → index-BY5m8rhE.js.map} +1 -1
- package/dashboard/dist/assets/index-BYf0oNSQ.js +6 -0
- package/dashboard/dist/assets/{index-eshNd6NY.js.map → index-BYf0oNSQ.js.map} +1 -1
- package/dashboard/dist/assets/index-BcaQ_hCz.js +9 -0
- package/dashboard/dist/assets/{index-Y6yj36QR.js.map → index-BcaQ_hCz.js.map} +1 -1
- package/dashboard/dist/assets/index-BdqKh0UK.css +1 -0
- package/dashboard/dist/assets/index-C8k3Z2su.js +63 -0
- package/dashboard/dist/assets/index-C8k3Z2su.js.map +1 -0
- package/dashboard/dist/assets/index-CSixdp5W.js +2 -0
- package/dashboard/dist/assets/{index-yxnQew1X.js.map → index-CSixdp5W.js.map} +1 -1
- package/dashboard/dist/assets/index-CXnSqSFH.js +2 -0
- package/dashboard/dist/assets/{index-B5MAG4Uv.js.map → index-CXnSqSFH.js.map} +1 -1
- package/dashboard/dist/assets/index-CaSMWhLU.js +2 -0
- package/dashboard/dist/assets/{index-C71I-f5G.js.map → index-CaSMWhLU.js.map} +1 -1
- package/dashboard/dist/assets/index-Cl1vY8Lg.js +2 -0
- package/dashboard/dist/assets/{index-xn9fmkHC.js.map → index-Cl1vY8Lg.js.map} +1 -1
- package/dashboard/dist/assets/index-CvFQtPWA.js +2 -0
- package/dashboard/dist/assets/{index-CJb3dXku.js.map → index-CvFQtPWA.js.map} +1 -1
- package/dashboard/dist/assets/index-DWlPFH3T.js +6 -0
- package/dashboard/dist/assets/{index-BfxiRwk2.js.map → index-DWlPFH3T.js.map} +1 -1
- package/dashboard/dist/assets/index-D_6JFBiM.js +2 -0
- package/dashboard/dist/assets/{index-DkbnD-Te.js.map → index-D_6JFBiM.js.map} +1 -1
- package/dashboard/dist/assets/index-fqU_l4dC.js +2 -0
- package/dashboard/dist/assets/{index-CphzO7b8.js.map → index-fqU_l4dC.js.map} +1 -1
- package/dashboard/dist/assets/{knowledge-C_1r0faY.js → knowledge-Bskl1MbC.js} +2 -2
- package/dashboard/dist/assets/{knowledge-C_1r0faY.js.map → knowledge-Bskl1MbC.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-BtG54ZAx.js → mcp-C_qz25AB.js} +2 -2
- package/dashboard/dist/assets/{mcp-BtG54ZAx.js.map → mcp-C_qz25AB.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-query-CSdQWxmv.js → mcp-query-CJx58s1A.js} +2 -2
- package/dashboard/dist/assets/{mcp-query-CSdQWxmv.js.map → mcp-query-CJx58s1A.js.map} +1 -1
- package/dashboard/dist/assets/{pipelines-DVkwxN64.js → pipelines-B6GzpgtG.js} +2 -2
- package/dashboard/dist/assets/{pipelines-DVkwxN64.js.map → pipelines-B6GzpgtG.js.map} +1 -1
- package/dashboard/dist/assets/roles-D8lPvFgG.js +2 -0
- package/dashboard/dist/assets/{roles-CpRcUIMm.js.map → roles-D8lPvFgG.js.map} +1 -1
- package/dashboard/dist/assets/tasks-BWHakSYf.js +2 -0
- package/dashboard/dist/assets/{tasks-DNdvW5H6.js.map → tasks-BWHakSYf.js.map} +1 -1
- package/dashboard/dist/assets/{topics-DNC77Chw.js → topics-0dXzPX8t.js} +2 -2
- package/dashboard/dist/assets/{topics-DNC77Chw.js.map → topics-0dXzPX8t.js.map} +1 -1
- package/dashboard/dist/assets/{useCollapsedSections-CGNA5oKV.js → useCollapsedSections-BU5HULGs.js} +2 -2
- package/dashboard/dist/assets/{useCollapsedSections-CGNA5oKV.js.map → useCollapsedSections-BU5HULGs.js.map} +1 -1
- package/dashboard/dist/assets/{useDebouncedValue-DmL3uNt_.js → useDebouncedValue-BA5S7V54.js} +2 -2
- package/dashboard/dist/assets/{useDebouncedValue-DmL3uNt_.js.map → useDebouncedValue-BA5S7V54.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-CUUeBSH1.js → useEventHooks-Dpixlgp-.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-CUUeBSH1.js.map → useEventHooks-Dpixlgp-.js.map} +1 -1
- package/dashboard/dist/assets/{useFilterParams-Ch-a71bE.js → useFilterParams-x-Dg0Vgz.js} +2 -2
- package/dashboard/dist/assets/{useFilterParams-Ch-a71bE.js.map → useFilterParams-x-Dg0Vgz.js.map} +1 -1
- package/dashboard/dist/assets/{useNamespace-D-AjLnPK.js → useNamespace-DQMc77ok.js} +2 -2
- package/dashboard/dist/assets/{useNamespace-D-AjLnPK.js.map → useNamespace-DQMc77ok.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-DRdetOb_.js → useYamlActivityEvents-DO5bHOVE.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-DRdetOb_.js.map → useYamlActivityEvents-DO5bHOVE.js.map} +1 -1
- package/dashboard/dist/assets/{users-BUgdEsec.js → users-B_LVbnUk.js} +2 -2
- package/dashboard/dist/assets/{users-BUgdEsec.js.map → users-B_LVbnUk.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-CNyYGNsk.js → vendor-icons-DOIDKgo6.js} +116 -121
- package/dashboard/dist/assets/{vendor-icons-CNyYGNsk.js.map → vendor-icons-DOIDKgo6.js.map} +1 -1
- package/dashboard/dist/assets/vendor-query-B2UbickB.js +18 -0
- package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +1 -0
- package/dashboard/dist/assets/vendor-react-CXumBFUA.js +22 -0
- package/dashboard/dist/assets/vendor-react-CXumBFUA.js.map +1 -0
- package/dashboard/dist/assets/{workflows-BfyR5VJt.js → workflows-WmmGDAvo.js} +2 -2
- package/dashboard/dist/assets/{workflows-BfyR5VJt.js.map → workflows-WmmGDAvo.js.map} +1 -1
- package/dashboard/dist/assets/{yaml-workflows-Bz7yEnhl.js → yaml-workflows-BS7KHhU1.js} +2 -2
- package/dashboard/dist/assets/{yaml-workflows-Bz7yEnhl.js.map → yaml-workflows-BS7KHhU1.js.map} +1 -1
- package/dashboard/dist/index.html +5 -5
- package/docs/dashboard.md +58 -42
- package/package.json +1 -1
- package/dashboard/dist/assets/AdminDashboard-Ck5-jV9T.js +0 -2
- package/dashboard/dist/assets/AgentConfigPage-DFiXRBWs.js +0 -16
- package/dashboard/dist/assets/AgentDetailPage-BBgM_pMe.js +0 -4
- package/dashboard/dist/assets/AgentsPage-DxwFuedf.js +0 -2
- package/dashboard/dist/assets/AvailableEscalationsPage-DNQbeIcn.js +0 -2
- package/dashboard/dist/assets/BotPicker-mqwKVOE3.js +0 -2
- package/dashboard/dist/assets/CapabilitiesPage-Biffm0kW.js +0 -2
- package/dashboard/dist/assets/CollapsibleSection-Bn6Ks79X.js +0 -2
- package/dashboard/dist/assets/ConfirmDeleteModal-no0-c_1G.js +0 -2
- package/dashboard/dist/assets/CopyableId-DS6IDMIX.js +0 -2
- package/dashboard/dist/assets/CredentialsPage-C3NyncEB.js +0 -2
- package/dashboard/dist/assets/CronLabel-DQWBx57H.js +0 -2
- package/dashboard/dist/assets/CustomDurationPicker-DV42oZ1G.js +0 -2
- package/dashboard/dist/assets/DataTable-Bf4dgxll.js +0 -2
- package/dashboard/dist/assets/DropZone-CTSXBb3c.js +0 -2
- package/dashboard/dist/assets/ElapsedCell-roy4G5SQ.js +0 -2
- package/dashboard/dist/assets/EmptyState-CLVm9KmA.js +0 -2
- package/dashboard/dist/assets/EscalationSchemaPage-DulCCxea.js +0 -9
- package/dashboard/dist/assets/EscalationsOverview-DDwxn_mT.js +0 -2
- package/dashboard/dist/assets/EventTable-BaLNvCew.js +0 -2
- package/dashboard/dist/assets/FilterBar-DEAbNQqp.js +0 -2
- package/dashboard/dist/assets/GraphInvokePage-BmM8r0R3.js +0 -2
- package/dashboard/dist/assets/HomePage-Ds3PzWWr.js +0 -2
- package/dashboard/dist/assets/HomePage-Ds3PzWWr.js.map +0 -1
- package/dashboard/dist/assets/ListToolbar-Dviaskni.js +0 -2
- package/dashboard/dist/assets/McpOverview-BBm66wbF.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-B6GJOMcz.js +0 -5
- package/dashboard/dist/assets/McpQueryPage-C-8nIdBL.js +0 -2
- package/dashboard/dist/assets/McpRunDetailPage-CSq_0qqi.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-BdK8ahX7.js +0 -2
- package/dashboard/dist/assets/McpRunsPage-BdK8ahX7.js.map +0 -1
- package/dashboard/dist/assets/Modal-C6HI6btY.js +0 -2
- package/dashboard/dist/assets/NamespacePill-eGsbJBFa.js +0 -2
- package/dashboard/dist/assets/OperationsPage-DODPFmf2.js +0 -2
- package/dashboard/dist/assets/OperationsPage-DODPFmf2.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-BbmgsOmQ.js +0 -2
- package/dashboard/dist/assets/PageHeader-DcgGV0Y2.js +0 -2
- package/dashboard/dist/assets/PageHeaderWithStats-Cf8TYFRh.js +0 -2
- package/dashboard/dist/assets/PriorityBadge-a7u8C9uY.js +0 -2
- package/dashboard/dist/assets/ProcessDetailPage-D80w44rV.js +0 -2
- package/dashboard/dist/assets/ProcessesListPage-BjW5xUkv.js +0 -2
- package/dashboard/dist/assets/RoleDetailPage-oahg0cdT.js +0 -11
- package/dashboard/dist/assets/RolePill-BAeaQUXX.js +0 -2
- package/dashboard/dist/assets/RolesPage-BI1Xtqq_.js +0 -2
- package/dashboard/dist/assets/RowActions--m4F6GW8.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-DiGzSfiG.js +0 -2
- package/dashboard/dist/assets/StatCard-DCPGFzCv.js +0 -2
- package/dashboard/dist/assets/StatusBadge-mk-dJwPT.js +0 -2
- package/dashboard/dist/assets/StickyPagination-Clm9H840.js +0 -2
- package/dashboard/dist/assets/StreamMessageDetail-Bikvs1Cz.js +0 -2
- package/dashboard/dist/assets/SwimlaneTimeline-C9X3IVqI.js +0 -2
- package/dashboard/dist/assets/TagInput-DmJLnghg.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-C0tbiUi7.js +0 -2
- package/dashboard/dist/assets/TaskDetailPage-C0tbiUi7.js.map +0 -1
- package/dashboard/dist/assets/TaskQueuePill--1OX6egx.js +0 -2
- package/dashboard/dist/assets/TasksListPage-DcYV-GMA.js +0 -2
- package/dashboard/dist/assets/TimeAgo-pYn3T9IZ.js +0 -2
- package/dashboard/dist/assets/TimestampCell-BPMCscic.js +0 -2
- package/dashboard/dist/assets/ToolPill-BnF9lCUX.js +0 -2
- package/dashboard/dist/assets/ToolTestPanel-Bw4z_Tya.js +0 -2
- package/dashboard/dist/assets/TopicDetailPage-CtFztOnn.js +0 -9
- package/dashboard/dist/assets/TopicsPage-BXdc6pAU.js +0 -2
- package/dashboard/dist/assets/UserName-R96NG6xB.js +0 -2
- package/dashboard/dist/assets/WorkflowExecutionPage-DmRJabMQ.js +0 -2
- package/dashboard/dist/assets/WorkflowPill-Cc2MlYbB.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-uLU5ZToY.js +0 -2
- package/dashboard/dist/assets/WorkflowsDashboard-uLU5ZToY.js.map +0 -1
- package/dashboard/dist/assets/WorkflowsOverview-BhgE0RS8.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowDetailPage-CvIgB5y7.js +0 -33
- package/dashboard/dist/assets/YamlWorkflowsPage-DWnsgl2v.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-DWnsgl2v.js.map +0 -1
- package/dashboard/dist/assets/capabilities-BKZZb8eM.js +0 -2
- package/dashboard/dist/assets/escalation-D8mrXtjS.js +0 -2
- package/dashboard/dist/assets/escalation-columns-CyLzgPkz.js +0 -2
- package/dashboard/dist/assets/index-B5MAG4Uv.js +0 -2
- package/dashboard/dist/assets/index-BfxiRwk2.js +0 -6
- package/dashboard/dist/assets/index-C71I-f5G.js +0 -2
- package/dashboard/dist/assets/index-CC4g-6QE.css +0 -1
- package/dashboard/dist/assets/index-CJb3dXku.js +0 -2
- package/dashboard/dist/assets/index-CQtv2rj6.js +0 -2
- package/dashboard/dist/assets/index-CphzO7b8.js +0 -2
- package/dashboard/dist/assets/index-CwAmiy_j.js +0 -2
- package/dashboard/dist/assets/index-DgCS2Frb.js +0 -281
- package/dashboard/dist/assets/index-DgCS2Frb.js.map +0 -1
- package/dashboard/dist/assets/index-DkbnD-Te.js +0 -2
- package/dashboard/dist/assets/index-Y6yj36QR.js +0 -9
- package/dashboard/dist/assets/index-eshNd6NY.js +0 -6
- package/dashboard/dist/assets/index-xn9fmkHC.js +0 -2
- package/dashboard/dist/assets/index-yxnQew1X.js +0 -2
- package/dashboard/dist/assets/roles-CpRcUIMm.js +0 -2
- package/dashboard/dist/assets/tasks-DNdvW5H6.js +0 -2
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js +0 -35
- package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +0 -1
- package/dashboard/dist/assets/vendor-react-zA2lQFDs.js +0 -26
- package/dashboard/dist/assets/vendor-react-zA2lQFDs.js.map +0 -1
package/dashboard/dist/assets/{TasksListPage-DcYV-GMA.js.map → TasksListPage-DuLJQN7Q.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TasksListPage-
|
|
1
|
+
{"version":3,"file":"TasksListPage-DuLJQN7Q.js","sources":["../../src/pages/workflows/TasksListPage.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { useTasks } from '../../api/tasks';\nimport { useWorkflowConfigs } from '../../api/workflows';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\nimport { PriorityBadge } from '../../components/common/display/PriorityBadge';\nimport { TimeAgo } from '../../components/common/display/TimeAgo';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport type { LTTaskRecord } from '../../api/types';\n\nconst statusOptions = [\n { value: 'pending', label: 'Pending' },\n { value: 'in_progress', label: 'In Progress' },\n { value: 'completed', label: 'Completed' },\n { value: 'needs_intervention', label: 'Needs Intervention' },\n { value: 'cancelled', label: 'Cancelled' },\n];\n\nconst columns: Column<LTTaskRecord>[] = [\n {\n key: 'status',\n label: 'Status',\n render: (row) => <StatusBadge status={row.status} />,\n className: 'w-40',\n },\n {\n key: 'workflow_type',\n label: 'Workflow Type',\n render: (row) => <WorkflowPill type={row.workflow_type} />,\n },\n {\n key: 'lt_type',\n label: 'LT Type',\n render: (row) => (\n <span className=\"text-text-secondary text-xs\">{row.lt_type}</span>\n ),\n },\n {\n key: 'priority',\n label: 'Priority',\n render: (row) => <PriorityBadge priority={row.priority} />,\n className: 'w-20',\n },\n {\n key: 'started_at',\n label: 'Started',\n render: (row) => <TimeAgo date={row.started_at} />,\n className: 'w-28',\n },\n {\n key: 'updated_at',\n label: 'Updated',\n render: (row) => <TimeAgo date={row.updated_at} />,\n className: 'w-28',\n },\n];\n\nexport function TasksListPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', workflow_type: '' },\n });\n\n const { data: configs } = useWorkflowConfigs();\n const workflowTypes = [...new Set((configs ?? []).map((c) => c.workflow_type))].sort();\n\n const { data, isLoading } = useTasks({\n status: filters.status || undefined,\n workflow_type: filters.workflow_type || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n\n return (\n <div>\n <PageHeader title=\"Tasks\" />\n\n <FilterBar>\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={statusOptions}\n />\n <FilterSelect\n label=\"Workflow Type\"\n value={filters.workflow_type}\n onChange={(v) => setFilter('workflow_type', v)}\n options={workflowTypes.map((t) => ({ value: t, label: t }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={data?.tasks ?? []}\n keyFn={(row) => row.id}\n onRowClick={(row) => navigate(`/workflows/tasks/detail/${row.id}`)}\n isLoading={isLoading}\n emptyMessage=\"No tasks found\"\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["statusOptions","columns","row","StatusBadge","WorkflowPill","jsx","PriorityBadge","TimeAgo","TasksListPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","configs","useWorkflowConfigs","workflowTypes","c","data","isLoading","useTasks","total","PageHeader","FilterBar","FilterSelect","v","t","DataTable","StickyPagination"],"mappings":"0rBAcA,MAAMA,EAAgB,CACpB,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,cAAe,MAAO,aAAA,EAC/B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,qBAAsB,MAAO,oBAAA,EACtC,CAAE,MAAO,YAAa,MAAO,WAAA,CAC/B,EAEMC,EAAkC,CACtC,CACE,IAAK,SACL,MAAO,SACP,OAASC,SAASC,EAAA,CAAY,OAAQD,EAAI,OAAQ,EAClD,UAAW,MAAA,EAEb,CACE,IAAK,gBACL,MAAO,gBACP,OAASA,SAASE,EAAA,CAAa,KAAMF,EAAI,aAAA,CAAe,CAAA,EAE1D,CACE,IAAK,UACL,MAAO,UACP,OAASA,GACPG,EAAAA,IAAC,QAAK,UAAU,8BAA+B,WAAI,OAAA,CAAQ,CAAA,EAG/D,CACE,IAAK,WACL,MAAO,WACP,OAASH,SAASI,EAAA,CAAc,SAAUJ,EAAI,SAAU,EACxD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASK,EAAA,CAAQ,KAAML,EAAI,WAAY,EAChD,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,OAASA,SAASK,EAAA,CAAQ,KAAML,EAAI,WAAY,EAChD,UAAW,MAAA,CAEf,EAEO,SAASM,GAAgB,CAC9B,MAAMC,EAAWC,EAAA,EACX,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAC,CAAA,EAAeC,EAAgB,CACzD,QAAS,CAAE,OAAQ,GAAI,cAAe,EAAA,CAAG,CAC1C,EAEK,CAAE,KAAMC,CAAA,EAAYC,EAAA,EACpBC,EAAgB,CAAC,GAAG,IAAI,KAAKF,GAAW,CAAA,GAAI,IAAKG,GAAMA,EAAE,aAAa,CAAC,CAAC,EAAE,KAAA,EAE1E,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcC,EAAS,CACnC,OAAQV,EAAQ,QAAU,OAC1B,cAAeA,EAAQ,eAAiB,OACxC,MAAOE,EAAW,SAClB,OAAQA,EAAW,MAAA,CACpB,EAEKS,GAAQH,GAAA,YAAAA,EAAM,QAAS,EAE7B,cACG,MAAA,CACC,SAAA,CAAAd,EAAAA,IAACkB,EAAA,CAAW,MAAM,OAAA,CAAQ,SAEzBC,EAAA,CACC,SAAA,CAAAnB,EAAAA,IAACoB,EAAA,CACC,MAAM,SACN,MAAOd,EAAQ,OACf,SAAWe,GAAMd,EAAU,SAAUc,CAAC,EACtC,QAAS1B,CAAA,CAAA,EAEXK,EAAAA,IAACoB,EAAA,CACC,MAAM,gBACN,MAAOd,EAAQ,cACf,SAAWe,GAAMd,EAAU,gBAAiBc,CAAC,EAC7C,QAAST,EAAc,IAAKU,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAAA,CAAA,CAC5D,EACF,EAEAtB,EAAAA,IAACuB,EAAA,CACC,QAAA3B,EACA,MAAMkB,GAAA,YAAAA,EAAM,QAAS,CAAA,EACrB,MAAQjB,GAAQA,EAAI,GACpB,WAAaA,GAAQO,EAAS,2BAA2BP,EAAI,EAAE,EAAE,EACjE,UAAAkB,EACA,aAAa,gBAAA,CAAA,EAGff,EAAAA,IAACwB,EAAA,CACC,KAAMhB,EAAW,KACjB,WAAYA,EAAW,WAAWS,CAAK,EACvC,aAAcT,EAAW,QACzB,MAAAS,EACA,SAAUT,EAAW,SACrB,iBAAkBA,EAAW,WAAA,CAAA,CAC/B,EACF,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeAgo-
|
|
1
|
+
{"version":3,"file":"TimeAgo-dnc1ZjKc.js","sources":["../../src/components/common/display/TimeAgo.tsx"],"sourcesContent":["import { DateValue } from './DateValue';\n\n/**\n * Relative time display (\"5 minutes ago\").\n * Thin wrapper around DateValue for backward compatibility.\n */\nexport function TimeAgo({ date, className = '' }: { date: string; className?: string }) {\n return <DateValue date={date} format=\"relative\" className={className} />;\n}\n"],"names":["TimeAgo","date","className","jsx","DateValue"],"mappings":"uFAMO,SAASA,EAAQ,CAAE,KAAAC,EAAM,UAAAC,EAAY,IAA4C,CACtF,OAAOC,EAAAA,IAACC,EAAA,CAAU,KAAAH,EAAY,OAAO,WAAW,UAAAC,EAAsB,CACxE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e}from"./vendor-query-B2UbickB.js";import{b as r}from"./index-C8k3Z2su.js";function o({date:t}){return e.jsxs("div",{children:[e.jsx(r,{date:t,format:"relative"}),e.jsxs("p",{className:"text-[9px] font-mono text-text-secondary mt-0.5 whitespace-nowrap",children:[new Date(t).toISOString().replace("T"," ").slice(0,19)," UTC"]})]})}export{o as T};
|
|
2
|
+
//# sourceMappingURL=TimestampCell-CDR6cTyq.js.map
|
package/dashboard/dist/assets/{TimestampCell-BPMCscic.js.map → TimestampCell-CDR6cTyq.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimestampCell-
|
|
1
|
+
{"version":3,"file":"TimestampCell-CDR6cTyq.js","sources":["../../src/components/common/display/TimestampCell.tsx"],"sourcesContent":["import { DateValue } from './DateValue';\n\ninterface TimestampCellProps {\n date: string;\n}\n\n/**\n * Standard timestamp cell for data tables.\n * Shows friendly \"ago\" text with UTC timestamp below.\n */\nexport function TimestampCell({ date }: TimestampCellProps) {\n return (\n <div>\n <DateValue date={date} format=\"relative\" />\n <p className=\"text-[9px] font-mono text-text-secondary mt-0.5 whitespace-nowrap\">\n {new Date(date).toISOString().replace('T', ' ').slice(0, 19)} UTC\n </p>\n </div>\n );\n}\n"],"names":["TimestampCell","date","jsx","DateValue","jsxs"],"mappings":"uFAUO,SAASA,EAAc,CAAE,KAAAC,GAA4B,CAC1D,cACG,MAAA,CACC,SAAA,CAAAC,EAAAA,IAACC,EAAA,CAAU,KAAAF,EAAY,OAAO,UAAA,CAAW,EACzCG,EAAAA,KAAC,IAAA,CAAE,UAAU,oEACV,SAAA,CAAA,IAAI,KAAKH,CAAI,EAAE,cAAc,QAAQ,IAAK,GAAG,EAAE,MAAM,EAAG,EAAE,EAAE,MAAA,CAAA,CAC/D,CAAA,EACF,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as s}from"./vendor-query-B2UbickB.js";import{ab as r}from"./vendor-icons-DOIDKgo6.js";function p({name:e,size:t="sm"}){const n=t==="md"?"px-2 py-0.5 text-[12px] gap-1.5":"px-1.5 py-px text-[11px] gap-1",o=t==="md"?"w-2.5 h-2.5":"w-2 h-2";return s.jsxs("span",{className:`inline-flex items-center ${n} font-mono text-text-secondary bg-surface-sunken/50 rounded-md`,children:[s.jsx(r,{className:`${o} shrink-0 text-text-quaternary`,strokeWidth:1.5}),e]})}export{p as T};
|
|
2
|
+
//# sourceMappingURL=ToolPill-BW0iRwZu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolPill-
|
|
1
|
+
{"version":3,"file":"ToolPill-BW0iRwZu.js","sources":["../../src/components/common/display/ToolPill.tsx"],"sourcesContent":["import { Wrench } from 'lucide-react';\n\ninterface ToolPillProps {\n name: string;\n size?: 'sm' | 'md';\n}\n\n/**\n * Universal MCP tool pill — displays a tool name with a subtle wrench icon.\n * Used across Capabilities page, MCP Server Tools, Pipeline Tools, etc.\n */\nexport function ToolPill({ name, size = 'sm' }: ToolPillProps) {\n const sizeClass = size === 'md'\n ? 'px-2 py-0.5 text-[12px] gap-1.5'\n : 'px-1.5 py-px text-[11px] gap-1';\n const iconClass = size === 'md' ? 'w-2.5 h-2.5' : 'w-2 h-2';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono text-text-secondary bg-surface-sunken/50 rounded-md`}>\n <Wrench className={`${iconClass} shrink-0 text-text-quaternary`} strokeWidth={1.5} />\n {name}\n </span>\n );\n}\n"],"names":["ToolPill","name","size","sizeClass","iconClass","jsxs","jsx","Wrench"],"mappings":"+FAWO,SAASA,EAAS,CAAE,KAAAC,EAAM,KAAAC,EAAO,MAAuB,CAC7D,MAAMC,EAAYD,IAAS,KACvB,kCACA,iCACEE,EAAYF,IAAS,KAAO,cAAgB,UAElD,OACEG,EAAAA,KAAC,OAAA,CAAK,UAAW,4BAA4BF,CAAS,iEACpD,SAAA,CAAAG,MAACC,GAAO,UAAW,GAAGH,CAAS,iCAAkC,YAAa,IAAK,EAClFH,CAAA,EACH,CAEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as e,a as u}from"./vendor-query-B2UbickB.js";import{h as A}from"./mcp-C_qz25AB.js";import{J as L}from"./index-C8k3Z2su.js";import{R as z}from"./RunAsSelector-VCnEYIwj.js";import{T as F}from"./ToolPill-BW0iRwZu.js";import{t as k,ae as S,X as M,af as W,P as _,aa as $}from"./vendor-icons-DOIDKgo6.js";import{c as B,L as E}from"./vendor-react-CXumBFUA.js";import{b as D}from"./helpers-DzO-OGPe.js";function I({name:s,serverId:n,short:a=!0}){const x=B(),r=a?s.replace(/^long-tail-/,""):s;return n?e.jsxs("button",{onClick:c=>{c.stopPropagation(),x(`/mcp/servers/${n}`)},className:"group/srv inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary hover:text-accent transition-colors",title:s,children:[e.jsx(k,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary group-hover/srv:text-accent",strokeWidth:1.5}),r,e.jsx(S,{className:"w-2 h-2 shrink-0 invisible group-hover/srv:visible text-accent",strokeWidth:1.5})]}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-[11px] font-mono text-text-tertiary",title:s,children:[e.jsx(k,{className:"w-2.5 h-2.5 shrink-0 text-text-quaternary",strokeWidth:1.5}),r]})}function U({error:s}){const n=s instanceof Error?s.message:"";return n.startsWith("No credential found for provider")?e.jsxs("div",{className:"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2",children:[e.jsx($,{size:14,className:"text-status-warning mt-0.5 shrink-0"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[11px] font-medium text-text-primary mb-0.5",children:"Credential required"}),e.jsx("p",{className:"text-[11px] text-text-secondary mb-1",children:n}),e.jsxs(E,{to:"/credentials",className:"text-[11px] text-accent hover:underline inline-flex items-center gap-1",children:["Go to Credentials ",e.jsx(S,{size:10})]})]})]}):e.jsx("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsx("p",{className:"text-[11px] text-status-error",children:n||"Tool call failed"})})}function K({data:s}){const n=s==null?void 0:s.result,a=n==null?void 0:n.job_id,x=(n==null?void 0:n.namespace)||"";return a?e.jsxs(E,{to:`/mcp/executions/${encodeURIComponent(a)}?namespace=${encodeURIComponent(x)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsx(S,{size:12}),"View Execution"]}):null}const N="input text-xs",J="label";function V({value:s,onChange:n,className:a}){const[x,r]=u.useState(s.join(", ")),c=()=>n(x.split(",").map(o=>o.trim()).filter(Boolean));return u.useEffect(()=>{r(s.join(", "))},[JSON.stringify(s)]),e.jsx("input",{type:"text",value:x,onChange:o=>r(o.target.value),onBlur:c,onKeyDown:o=>{o.key==="Enter"&&(o.preventDefault(),c())},placeholder:"comma-separated values",className:a})}function se({serverId:s,serverName:n,tool:a,onClose:x}){const r=A(),[c,o]=u.useState(!1),[d,p]=u.useState({}),[g,b]=u.useState(""),[C,y]=u.useState(""),[v,q]=u.useState("");u.useEffect(()=>{const t=D(a.inputSchema);p(t),b(JSON.stringify(t,null,2)),o(!1),y(""),r.reset()},[a.name,s]);const O=!!r.data||!!r.error,P=()=>{if(!c)b(JSON.stringify(d,null,2));else try{p(JSON.parse(g))}catch{}o(!c)},T=()=>{y(""),r.reset();let t;if(c)try{t=JSON.parse(g)}catch{y("Invalid JSON");return}else t={...d};r.mutate({serverId:s,toolName:a.name,arguments:t,...v?{execute_as:v}:{}})};return e.jsxs("div",{className:"border-l border-surface-border bg-surface-raised",children:[e.jsxs("div",{className:"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0",children:[e.jsxs("div",{className:"min-w-0 space-y-1",children:[e.jsx(I,{name:n,serverId:s,short:!1}),e.jsx("div",{children:e.jsx(F,{name:a.name,size:"md"})})]}),e.jsx("button",{onClick:x,className:"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2",children:e.jsx(M,{className:"w-3.5 h-3.5"})})]}),e.jsxs("div",{className:"px-4 py-4 space-y-5",children:[a.description&&e.jsx("div",{className:"border-l-2 border-accent/30 pl-3 py-1",children:e.jsx("p",{className:"text-[11px] text-text-secondary leading-relaxed italic",children:a.description})}),e.jsxs("div",{children:[e.jsx("label",{className:J,children:"run as"}),e.jsx(z,{selected:v,onChange:q})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-[10px] text-text-quaternary",children:"Parameters"}),e.jsx("button",{onClick:P,className:"text-[10px] text-accent/70 hover:text-accent transition-colors",children:c?"Form view":"JSON view"})]}),c?e.jsx("textarea",{value:g,onChange:t=>b(t.target.value),className:"input-json w-full",rows:6,spellCheck:!1}):e.jsxs("div",{className:"space-y-3",children:[Object.entries(d).sort(([t],[i])=>{var f;const l=((f=a.inputSchema)==null?void 0:f.required)??[],h=l.indexOf(t),j=l.indexOf(i);return h!==-1&&j!==-1?h-j:h!==-1?-1:j!==-1?1:t.localeCompare(i)}).map(([t,i])=>{var f,w,R;const l=(w=(f=a.inputSchema)==null?void 0:f.properties)==null?void 0:w[t],h=l==null?void 0:l.description,j=(((R=a.inputSchema)==null?void 0:R.required)??[]).includes(t);return e.jsxs("div",{children:[e.jsxs("label",{className:J,children:[t,j&&e.jsx("span",{className:"text-accent/50 ml-0.5",children:"*"})]}),typeof i=="boolean"?e.jsxs("select",{value:String(i),onChange:m=>p({...d,[t]:m.target.value==="true"}),className:N,children:[e.jsx("option",{value:"true",children:"true"}),e.jsx("option",{value:"false",children:"false"})]}):Array.isArray(i)?e.jsx(V,{value:i,onChange:m=>p({...d,[t]:m}),className:N}):typeof i=="object"&&i!==null?e.jsx("textarea",{value:JSON.stringify(i,null,2),onChange:m=>{try{p({...d,[t]:JSON.parse(m.target.value)})}catch{}},className:`${N} min-h-[48px] font-mono resize-y`}):e.jsx("input",{type:typeof i=="number"?"number":"text",value:String(i??""),onChange:m=>p({...d,[t]:typeof i=="number"?Number(m.target.value):m.target.value}),className:N,placeholder:(l==null?void 0:l.type)==="string"&&(l==null?void 0:l.example)||""}),h&&e.jsx("p",{className:"text-[9px] text-text-quaternary/70 mt-0.5 leading-snug",children:h})]},t)}),Object.keys(d).length===0&&e.jsx("p",{className:"text-[11px] text-text-quaternary",children:"No parameters"})]}),C&&e.jsx("p",{className:"text-[11px] text-status-error mt-1",children:C})]}),e.jsx("button",{onClick:T,disabled:r.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:r.isPending?"Running...":O?e.jsxs(e.Fragment,{children:[e.jsx(W,{size:12})," Re-run"]}):e.jsxs(e.Fragment,{children:[e.jsx(_,{size:12})," Run"]})}),r.isPending&&e.jsxs("div",{className:"animate-pulse",children:[e.jsx("p",{className:"text-[10px] text-text-quaternary mb-1",children:"Response"}),e.jsx("div",{className:"h-20 bg-surface-sunken/50 rounded-md"})]}),r.data?e.jsxs("div",{className:"space-y-2",children:[e.jsx(L,{data:r.data,label:"Response",defaultCollapsed:!0}),e.jsx(K,{data:r.data})]}):null,r.error?e.jsxs("div",{children:[e.jsx("p",{className:"text-[10px] text-text-quaternary mb-1",children:"Response"}),e.jsx(U,{error:r.error})]}):null]})]})}export{I as S,se as T};
|
|
2
|
+
//# sourceMappingURL=ToolTestPanel-CfwGdRdz.js.map
|
package/dashboard/dist/assets/{ToolTestPanel-Bw4z_Tya.js.map → ToolTestPanel-CfwGdRdz.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolTestPanel-Bw4z_Tya.js","sources":["../../src/components/common/display/ServerName.tsx","../../src/components/common/test/ToolTestPanel.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","import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, RotateCcw, Play, ExternalLink, KeyRound } from 'lucide-react';\nimport { useCallMcpTool } from '../../../api/mcp';\nimport { JsonViewer } from '../data/JsonViewer';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { ToolPill } from '../display/ToolPill';\nimport { ServerName } from '../display/ServerName';\nimport type { McpToolManifest } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nfunction ToolErrorDisplay({ error }: { error: Error | null }) {\n const msg = error instanceof Error ? error.message : '';\n if (msg.startsWith('No credential found for provider')) {\n return (\n <div className=\"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2\">\n <KeyRound size={14} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-[11px] font-medium text-text-primary mb-0.5\">Credential required</p>\n <p className=\"text-[11px] text-text-secondary mb-1\">{msg}</p>\n <Link to=\"/credentials\" className=\"text-[11px] text-accent hover:underline inline-flex items-center gap-1\">\n Go to Credentials <ExternalLink size={10} />\n </Link>\n </div>\n </div>\n );\n }\n return (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-[11px] text-status-error\">{msg || 'Tool call failed'}</p>\n </div>\n );\n}\n\nfunction ExecutionLink({ data }: { data: unknown }) {\n const res = (data as any)?.result;\n const jobId = res?.job_id;\n const ns = res?.namespace || '';\n if (!jobId) return null;\n return (\n <Link\n to={`/mcp/executions/${encodeURIComponent(jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} />\n View Execution\n </Link>\n );\n}\n\ninterface ToolTestPanelProps {\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n onClose: () => void;\n}\n\nconst INPUT_CLS = 'input text-xs';\nconst LABEL_CLS = 'label';\n\n/** Text input for array fields — commits on blur or Enter, allows commas while typing */\nfunction ArrayInput({ value, onChange, className }: { value: any[]; onChange: (v: string[]) => void; className: string }) {\n const [raw, setRaw] = useState(value.join(', '));\n const commit = () => onChange(raw.split(',').map((s) => s.trim()).filter(Boolean));\n // Sync if parent value changes externally\n useEffect(() => { setRaw(value.join(', ')); }, [JSON.stringify(value)]); // eslint-disable-line\n return (\n <input\n type=\"text\"\n value={raw}\n onChange={(e) => setRaw(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); commit(); } }}\n placeholder=\"comma-separated values\"\n className={className}\n />\n );\n}\n\nexport function ToolTestPanel({ serverId, serverName, tool, onClose }: ToolTestPanelProps) {\n const callTool = useCallMcpTool();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n\n useEffect(() => {\n const skeleton = buildSkeleton(tool.inputSchema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n setJsonError('');\n callTool.reset();\n }, [tool.name, serverId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const hasResult = !!callTool.data || !!callTool.error;\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = () => {\n setJsonError('');\n callTool.reset();\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n callTool.mutate({\n serverId,\n toolName: tool.name,\n arguments: parsed,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0\">\n <div className=\"min-w-0 space-y-1\">\n <ServerName name={serverName} serverId={serverId} short={false} />\n <div><ToolPill name={tool.name} size=\"md\" /></div>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"px-4 py-4 space-y-5\">\n {tool.description && (\n <div className=\"border-l-2 border-accent/30 pl-3 py-1\">\n <p className=\"text-[11px] text-text-secondary leading-relaxed italic\">{tool.description}</p>\n </div>\n )}\n\n {/* Run as */}\n <div>\n <label className={LABEL_CLS}>run as</label>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n </div>\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-[10px] text-text-quaternary\">Parameters</span>\n <button onClick={toggleMode} className=\"text-[10px] text-accent/70 hover:text-accent transition-colors\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"input-json w-full\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3\">\n {Object.entries(fields).sort(([a], [b]) => {\n const req = (tool.inputSchema?.required ?? []) as string[];\n const ai = req.indexOf(a);\n const bi = req.indexOf(b);\n if (ai !== -1 && bi !== -1) return ai - bi;\n if (ai !== -1) return -1;\n if (bi !== -1) return 1;\n return a.localeCompare(b);\n }).map(([key, value]) => {\n const propSchema = tool.inputSchema?.properties?.[key];\n const hint = propSchema?.description;\n const isRequired = (tool.inputSchema?.required ?? []).includes(key);\n return (\n <div key={key}>\n <label className={LABEL_CLS}>\n {key}\n {isRequired && <span className=\"text-accent/50 ml-0.5\">*</span>}\n </label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className={INPUT_CLS}\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : Array.isArray(value) ? (\n <ArrayInput\n value={value as any[]}\n onChange={(v) => setFields({ ...fields, [key]: v })}\n className={INPUT_CLS}\n />\n ) : typeof value === 'object' && value !== null ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className={`${INPUT_CLS} min-h-[48px] font-mono resize-y`}\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className={INPUT_CLS}\n placeholder={propSchema?.type === 'string' ? propSchema?.example || '' : ''}\n />\n )}\n {hint && <p className=\"text-[9px] text-text-quaternary/70 mt-0.5 leading-snug\">{hint}</p>}\n </div>\n );\n })}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-quaternary\">No parameters</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-[11px] text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {/* Run button */}\n <button\n onClick={handleRun}\n disabled={callTool.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {callTool.isPending ? (\n 'Running...'\n ) : hasResult ? (\n <><RotateCcw size={12} /> Re-run</>\n ) : (\n <><Play size={12} /> Run</>\n )}\n </button>\n\n {/* Response */}\n {callTool.isPending && (\n <div className=\"animate-pulse\">\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken/50 rounded-md\" />\n </div>\n )}\n {callTool.data ? (\n <div className=\"space-y-2\">\n <JsonViewer data={callTool.data as Record<string, unknown>} label=\"Response\" defaultCollapsed />\n <ExecutionLink data={callTool.data} />\n </div>\n ) : null}\n {callTool.error ? (\n <div>\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["ServerName","name","serverId","short","navigate","useNavigate","display","jsxDEV","e","Server","ExternalLink","ToolErrorDisplay","error","msg","KeyRound","Link","ExecutionLink","data","res","jobId","ns","INPUT_CLS","LABEL_CLS","ArrayInput","value","onChange","className","raw","setRaw","useState","commit","s","useEffect","ToolTestPanel","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","ToolPill","X","RunAsSelector","a","b","req","_a","ai","bi","key","propSchema","_b","hint","isRequired","_c","v","Fragment","RotateCcw","Play","JsonViewer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ToolTestPanel-CfwGdRdz.js","sources":["../../src/components/common/display/ServerName.tsx","../../src/components/common/test/ToolTestPanel.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","import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, RotateCcw, Play, ExternalLink, KeyRound } from 'lucide-react';\nimport { useCallMcpTool } from '../../../api/mcp';\nimport { JsonViewer } from '../data/JsonViewer';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { ToolPill } from '../display/ToolPill';\nimport { ServerName } from '../display/ServerName';\nimport type { McpToolManifest } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nfunction ToolErrorDisplay({ error }: { error: Error | null }) {\n const msg = error instanceof Error ? error.message : '';\n if (msg.startsWith('No credential found for provider')) {\n return (\n <div className=\"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2\">\n <KeyRound size={14} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-[11px] font-medium text-text-primary mb-0.5\">Credential required</p>\n <p className=\"text-[11px] text-text-secondary mb-1\">{msg}</p>\n <Link to=\"/credentials\" className=\"text-[11px] text-accent hover:underline inline-flex items-center gap-1\">\n Go to Credentials <ExternalLink size={10} />\n </Link>\n </div>\n </div>\n );\n }\n return (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-[11px] text-status-error\">{msg || 'Tool call failed'}</p>\n </div>\n );\n}\n\nfunction ExecutionLink({ data }: { data: unknown }) {\n const res = (data as any)?.result;\n const jobId = res?.job_id;\n const ns = res?.namespace || '';\n if (!jobId) return null;\n return (\n <Link\n to={`/mcp/executions/${encodeURIComponent(jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} />\n View Execution\n </Link>\n );\n}\n\ninterface ToolTestPanelProps {\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n onClose: () => void;\n}\n\nconst INPUT_CLS = 'input text-xs';\nconst LABEL_CLS = 'label';\n\n/** Text input for array fields — commits on blur or Enter, allows commas while typing */\nfunction ArrayInput({ value, onChange, className }: { value: any[]; onChange: (v: string[]) => void; className: string }) {\n const [raw, setRaw] = useState(value.join(', '));\n const commit = () => onChange(raw.split(',').map((s) => s.trim()).filter(Boolean));\n // Sync if parent value changes externally\n useEffect(() => { setRaw(value.join(', ')); }, [JSON.stringify(value)]); // eslint-disable-line\n return (\n <input\n type=\"text\"\n value={raw}\n onChange={(e) => setRaw(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); commit(); } }}\n placeholder=\"comma-separated values\"\n className={className}\n />\n );\n}\n\nexport function ToolTestPanel({ serverId, serverName, tool, onClose }: ToolTestPanelProps) {\n const callTool = useCallMcpTool();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n\n useEffect(() => {\n const skeleton = buildSkeleton(tool.inputSchema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n setJsonError('');\n callTool.reset();\n }, [tool.name, serverId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const hasResult = !!callTool.data || !!callTool.error;\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = () => {\n setJsonError('');\n callTool.reset();\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n callTool.mutate({\n serverId,\n toolName: tool.name,\n arguments: parsed,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0\">\n <div className=\"min-w-0 space-y-1\">\n <ServerName name={serverName} serverId={serverId} short={false} />\n <div><ToolPill name={tool.name} size=\"md\" /></div>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"px-4 py-4 space-y-5\">\n {tool.description && (\n <div className=\"border-l-2 border-accent/30 pl-3 py-1\">\n <p className=\"text-[11px] text-text-secondary leading-relaxed italic\">{tool.description}</p>\n </div>\n )}\n\n {/* Run as */}\n <div>\n <label className={LABEL_CLS}>run as</label>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n </div>\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-[10px] text-text-quaternary\">Parameters</span>\n <button onClick={toggleMode} className=\"text-[10px] text-accent/70 hover:text-accent transition-colors\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"input-json w-full\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3\">\n {Object.entries(fields).sort(([a], [b]) => {\n const req = (tool.inputSchema?.required ?? []) as string[];\n const ai = req.indexOf(a);\n const bi = req.indexOf(b);\n if (ai !== -1 && bi !== -1) return ai - bi;\n if (ai !== -1) return -1;\n if (bi !== -1) return 1;\n return a.localeCompare(b);\n }).map(([key, value]) => {\n const propSchema = tool.inputSchema?.properties?.[key];\n const hint = propSchema?.description;\n const isRequired = (tool.inputSchema?.required ?? []).includes(key);\n return (\n <div key={key}>\n <label className={LABEL_CLS}>\n {key}\n {isRequired && <span className=\"text-accent/50 ml-0.5\">*</span>}\n </label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className={INPUT_CLS}\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : Array.isArray(value) ? (\n <ArrayInput\n value={value as any[]}\n onChange={(v) => setFields({ ...fields, [key]: v })}\n className={INPUT_CLS}\n />\n ) : typeof value === 'object' && value !== null ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className={`${INPUT_CLS} min-h-[48px] font-mono resize-y`}\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className={INPUT_CLS}\n placeholder={propSchema?.type === 'string' ? propSchema?.example || '' : ''}\n />\n )}\n {hint && <p className=\"text-[9px] text-text-quaternary/70 mt-0.5 leading-snug\">{hint}</p>}\n </div>\n );\n })}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-quaternary\">No parameters</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-[11px] text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {/* Run button */}\n <button\n onClick={handleRun}\n disabled={callTool.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {callTool.isPending ? (\n 'Running...'\n ) : hasResult ? (\n <><RotateCcw size={12} /> Re-run</>\n ) : (\n <><Play size={12} /> Run</>\n )}\n </button>\n\n {/* Response */}\n {callTool.isPending && (\n <div className=\"animate-pulse\">\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken/50 rounded-md\" />\n </div>\n )}\n {callTool.data ? (\n <div className=\"space-y-2\">\n <JsonViewer data={callTool.data as Record<string, unknown>} label=\"Response\" defaultCollapsed />\n <ExecutionLink data={callTool.data} />\n </div>\n ) : null}\n {callTool.error ? (\n <div>\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["ServerName","name","serverId","short","navigate","useNavigate","display","jsxs","e","jsx","Server","ExternalLink","ToolErrorDisplay","error","msg","KeyRound","Link","ExecutionLink","data","res","jobId","ns","INPUT_CLS","LABEL_CLS","ArrayInput","value","onChange","className","raw","setRaw","useState","commit","s","useEffect","ToolTestPanel","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","ToolPill","X","RunAsSelector","a","b","req","_a","ai","bi","key","propSchema","_b","hint","isRequired","_c","v","Fragment","RotateCcw","Play","JsonViewer"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{a,j as e}from"./vendor-query-B2UbickB.js";import{a as ue,b as he,c as be,d as fe}from"./topics-0dXzPX8t.js";import{u as ge,b as y,J as G}from"./index-C8k3Z2su.js";import{L as je}from"./ListToolbar-d4MGQefV.js";import{R as N,B as ve,Q as ye,p as Ne,aW as ke,X as we,T as Se,g as Ce,aX as Pe,b as H,a9 as Ee,q as We}from"./vendor-icons-DOIDKgo6.js";import{e as Te,c as _e}from"./vendor-react-CXumBFUA.js";const qe={task:"bg-status-active/10 text-status-active",workflow:"bg-accent/15 text-accent",escalation:"bg-status-warning/10 text-status-warning",activity:"bg-status-active/10 text-status-active",knowledge:"bg-accent/10 text-accent",agent:"bg-status-success/10 text-status-success",app:"bg-status-error/10 text-status-error",milestone:"bg-accent/10 text-accent"};function k({icon:x,color:u,children:d}){return e.jsxs("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border",children:[e.jsx(x,{className:`w-4 h-4 ${u}`,strokeWidth:1.5}),e.jsx("h2",{className:"section-h2",children:d})]})}function Me(){var F,z,V,X;const{topic:x}=Te(),u=x?decodeURIComponent(x):null,d=_e(),{data:t,isLoading:K,refetch:h,isFetching:Y}=ue(u),{data:b}=ge(),Z=(F=b==null?void 0:b.ai)!=null&&F.enabled?"agents":"automations",w=he(),ee=be(),r=fe(),[l,f]=a.useState(!1),[o,S]=a.useState(""),[C,P]=a.useState(()=>`evt-${Date.now()}-${Math.random().toString(16).slice(2,6)}`),[g,E]=a.useState(""),[W,te]=a.useState("myWorkflow"),[T,se]=a.useState("wf-001"),[_,ae]=a.useState("default"),[q,ce]=a.useState(""),[I,ie]=a.useState("esc-001"),[D,ne]=a.useState("myActivity"),[O,J]=a.useState(""),[$,R]=a.useState(""),[j,A]=a.useState(""),[M,p]=a.useState("");if(K)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-40 bg-surface-sunken rounded"})]});if(!t)return e.jsxs("div",{className:"flex flex-col items-center justify-center py-20 text-center",children:[e.jsx(N,{className:"w-12 h-12 text-text-quaternary mb-4",strokeWidth:1}),e.jsx("h2",{className:"text-lg font-medium text-text-primary mb-2",children:"Topic not found"})]});const le=t.source==="system",L=!t.managed,re=qe[t.category]??"bg-surface-sunken text-text-tertiary",m=t.example_payload?JSON.stringify(t.example_payload,null,2):(z=t.payload_schema)!=null&&z.properties?JSON.stringify(Object.fromEntries(Object.keys(t.payload_schema.properties).map(s=>[s,""])),null,2):"{}",i=t.topic.startsWith("system.workflow.")||t.topic.startsWith("system.task.")?"workflow":t.topic.startsWith("system.escalation.")?"escalation":t.topic.startsWith("system.activity.")?"activity":"none",B=i==="workflow"||i==="escalation"||i==="activity",Q=i==="workflow"||i==="escalation",v=(o||t.topic).split(".").pop()??"",U=()=>{let s={};try{s=JSON.parse(g||m)}catch{}const n=(o||t.topic)!==t.topic?o||t.topic:void 0,c={id:C||void 0,source:"dashboard",data:s};return n&&(c.subject=n),B&&(c.workflowName=W,c.workflowId=T,c.taskQueue=_),Q&&(c.status=q||v),i==="escalation"&&(c.escalationId=I),i==="activity"&&(c.activityName=D),c},oe=(()=>{const{subject:s,...n}=U();return JSON.stringify({type:s||t.topic,timestamp:"<minted>",...n},null,2)})();!g&&m!=="{}"&&E(m),o||S(t.topic);const xe=()=>{J(t.description??""),R((t.tags??[]).join(", ")),A(t.payload_schema?JSON.stringify(t.payload_schema,null,2):""),p(""),f(!0)},de=()=>f(!1),pe=()=>{const s=$.split(",").map(c=>c.trim()).filter(Boolean);let n;if(j.trim())try{n=JSON.parse(j),p("")}catch{p("Invalid JSON");return}w.mutate({topic:t.topic,description:O,tags:s,...n!==void 0?{payload_schema:n}:{}},{onSuccess:()=>{f(!1),h()}})},me=()=>{confirm(`Delete topic "${t.topic}"?
|
|
2
|
+
|
|
3
|
+
This removes it from the catalog. Active subscriptions are not affected.`)&&ee.mutate(t.topic,{onSuccess:()=>d("/topics")})};return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-start justify-between mb-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-3 mb-1",children:[e.jsx(N,{className:"w-5 h-5 text-accent",strokeWidth:1.5}),e.jsx("h1",{className:"text-lg font-mono font-medium text-text-primary",children:t.topic}),e.jsx("button",{onClick:()=>{window.location.hash="#docs:topics.md"},className:"text-text-quaternary hover:text-accent transition-colors",title:"Topic docs",children:e.jsx(ve,{className:"w-4 h-4",strokeWidth:1.5})})]}),!l&&t.description?e.jsx("p",{className:"text-sm text-text-secondary leading-relaxed",children:t.description}):l?null:e.jsx("p",{className:"text-sm text-text-quaternary italic",children:"No description"})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[!l&&L&&e.jsxs("button",{onClick:xe,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsx(ye,{className:"w-3 h-3"})," Edit"]}),!l&&!le&&L&&e.jsxs("button",{onClick:me,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-status-error/60 hover:text-status-error hover:bg-status-error/10 transition-colors",children:[e.jsx(Ne,{className:"w-3 h-3"})," Delete"]}),l&&e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:pe,disabled:w.isPending,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsx(ke,{className:"w-3 h-3"})," Save"]}),e.jsxs("button",{onClick:de,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors",children:[e.jsx(we,{className:"w-3 h-3"})," Cancel"]})]})]})]}),e.jsxs("div",{className:"bg-surface-sunken/50 rounded-md px-5 py-3 flex flex-wrap gap-x-6 gap-y-3 items-start mb-5 relative",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Category"}),e.jsx("span",{className:`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${re}`,children:t.category})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Source"}),e.jsx("span",{className:"text-xs font-mono text-text-secondary",children:t.source})]}),((V=t.tags)==null?void 0:V.length)>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tags"}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(Se,{className:"w-2.5 h-2.5 text-text-quaternary",strokeWidth:1.5}),t.tags.map(s=>e.jsx("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken",children:s},s))]})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Created"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(y,{date:t.created_at})})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Updated"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(y,{date:t.updated_at})})]}),t.last_seen_at&&e.jsxs("div",{children:[e.jsx("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Last Seen"}),e.jsx("span",{className:"text-xs text-text-secondary",children:e.jsx(y,{date:t.last_seen_at})})]}),e.jsx("div",{className:"ml-auto self-center",children:e.jsx(je,{onRefresh:()=>h(),isFetching:Y,apiPath:`/topics/by-name/${encodeURIComponent(t.topic)}`})})]}),!l&&e.jsxs("div",{className:"grid grid-cols-3 gap-5",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx(k,{icon:N,color:"text-accent",children:"Payload Schema"}),t.payload_schema?e.jsx(G,{data:t.payload_schema}):e.jsx("p",{className:"text-[11px] text-text-quaternary",children:"No schema defined. Click Edit to add one."})]}),e.jsxs("div",{className:"min-w-0",children:[e.jsx(k,{icon:Ce,color:"text-accent",children:"Example Payload"}),t.example_payload?e.jsx(G,{data:t.example_payload}):e.jsx("p",{className:"text-[11px] text-text-quaternary",children:"No example defined. Click Edit to add one."})]}),e.jsxs("div",{className:"min-w-0 space-y-4 animate-page-enter",children:[e.jsx(k,{icon:Pe,color:"text-accent",children:"Test"}),e.jsxs("div",{className:"bg-surface-sunken/30 rounded-md px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(H,{className:"w-3.5 h-3.5 text-status-success",strokeWidth:1.5}),e.jsx("h2",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Target Subscribers"}),e.jsxs("span",{className:"relative group ml-auto",children:[e.jsx(Ee,{className:"w-3 h-3 text-text-quaternary cursor-help",strokeWidth:1.5}),e.jsx("span",{className:"absolute right-0 top-full mt-1 w-48 p-2 rounded bg-surface-raised border border-surface-border shadow-lg text-[10px] text-text-secondary leading-relaxed hidden group-hover:block z-10",children:"Publishing a test event is live — these subscribers will receive and process the payload."})]})]}),(X=t.subscribers)!=null&&X.length?e.jsx("div",{className:"space-y-0.5",children:t.subscribers.map(s=>e.jsxs("button",{onClick:()=>d(`/agents/${s.agent_id}`),className:"flex items-center gap-2 w-full text-left py-1 rounded hover:bg-surface-hover/50 transition-colors",children:[e.jsx(H,{className:"w-2.5 h-2.5 text-status-success shrink-0",strokeWidth:1.5}),e.jsx("span",{className:"text-[11px] text-text-primary hover:text-accent transition-colors truncate",children:s.agent_name}),e.jsx("span",{className:"text-[9px] font-mono text-text-quaternary ml-auto shrink-0",children:s.reaction_type})]},s.id))}):e.jsxs("p",{className:"text-[11px] text-text-quaternary",children:["No ",Z," subscribed."]})]}),e.jsxs("div",{className:"sticky top-16 bg-surface-sunken/40 rounded-md p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(We,{className:"w-3.5 h-3.5 text-accent",strokeWidth:1.5}),e.jsx("h2",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Publish"})]}),e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1",children:"Event ID"}),e.jsx("input",{value:C,onChange:s=>P(s.target.value),className:"input w-full text-[11px] font-mono mb-3",spellCheck:!1,placeholder:"evt-1720368000000-a3f2"}),e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1",children:"Subject"}),e.jsx("input",{value:o||t.topic,onChange:s=>S(s.target.value),className:"input w-full text-[11px] font-mono mb-3",spellCheck:!1}),B&&e.jsxs("div",{className:"grid grid-cols-2 gap-x-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1",children:"Workflow Name"}),e.jsx("input",{value:W,onChange:s=>te(s.target.value),className:"input w-full text-[11px] font-mono mb-3",spellCheck:!1,placeholder:"myWorkflow"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1",children:"Workflow ID"}),e.jsx("input",{value:T,onChange:s=>se(s.target.value),className:"input w-full text-[11px] font-mono mb-3",spellCheck:!1,placeholder:"wf-001"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1",children:"Task Queue"}),e.jsx("input",{value:_,onChange:s=>ae(s.target.value),className:"input w-full text-[11px] font-mono mb-3",spellCheck:!1,placeholder:"default"})]}),Q&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1",children:"Status"}),e.jsx("input",{value:q||v,onChange:s=>ce(s.target.value),className:"input w-full text-[11px] font-mono mb-3",spellCheck:!1,placeholder:v})]}),i==="escalation"&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1",children:"Escalation ID"}),e.jsx("input",{value:I,onChange:s=>ie(s.target.value),className:"input w-full text-[11px] font-mono mb-3",spellCheck:!1,placeholder:"esc-001"})]}),i==="activity"&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1",children:"Activity Name"}),e.jsx("input",{value:D,onChange:s=>ne(s.target.value),className:"input w-full text-[11px] font-mono mb-3",spellCheck:!1,placeholder:"myActivity"})]})]}),e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1",children:"Payload"}),e.jsx("textarea",{value:g||m,onChange:s=>E(s.target.value),className:"input-json w-full text-[11px]",rows:6,spellCheck:!1,placeholder:'{ "key": "value" }'}),e.jsx("label",{className:"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1 mt-3",children:"Event Preview"}),e.jsx("pre",{className:"bg-surface-sunken/60 rounded px-2 py-2 text-[10px] font-mono text-text-tertiary overflow-auto max-h-44 whitespace-pre",children:oe}),e.jsx("div",{className:"mt-3",children:e.jsx("button",{onClick:()=>{r.mutate({topic:t.topic,event:U()},{onSuccess:()=>{h(),P(`evt-${Date.now()}-${Math.random().toString(16).slice(2,6)}`)}})},disabled:r.isPending,className:"btn-primary text-xs w-full",children:r.isPending?"Publishing…":"Publish"})}),r.isSuccess&&e.jsx("p",{className:"text-[10px] text-status-success mt-2 animate-page-enter",children:"Event published"}),r.isError&&e.jsx("p",{className:"text-[10px] text-status-error mt-2",children:r.error.message})]})]})]}),l&&e.jsxs("div",{className:"space-y-6 max-w-3xl",children:[e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Description"}),e.jsx("textarea",{value:O,onChange:s=>J(s.target.value),rows:3,className:"input resize-none",placeholder:"What this topic represents"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Tags"}),e.jsx("input",{type:"text",value:$,onChange:s=>R(s.target.value),placeholder:"lifecycle, core, error",className:"input font-mono"}),e.jsx("p",{className:"hint",children:"Comma-separated. Used for filtering in the catalog."})]}),e.jsxs("div",{children:[e.jsx("label",{className:"section-header",children:"Payload Schema"}),e.jsx("textarea",{value:j,onChange:s=>{A(s.target.value),p("")},rows:12,className:"input-json w-full",placeholder:`{
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"orderId": { "type": "string" }
|
|
7
|
+
}
|
|
8
|
+
}`}),M&&e.jsx("p",{className:"text-[10px] text-status-error mt-1",children:M}),e.jsx("p",{className:"hint",children:"JSON Schema describing the event.data shape."})]})]})]})}export{Me as TopicDetailPage};
|
|
9
|
+
//# sourceMappingURL=TopicDetailPage-f2qaeGFz.js.map
|
package/dashboard/dist/assets/{TopicDetailPage-CtFztOnn.js.map → TopicDetailPage-f2qaeGFz.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopicDetailPage-CtFztOnn.js","sources":["../../src/pages/topics/TopicDetailPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { Radio, Bot, Tag, Pencil, Trash2, Save, X, BookOpen, Send, FlaskConical, Info, Braces } from 'lucide-react';\nimport { useTopic, useUpdateTopic, useDeleteTopic, usePublishTopic } from '../../api/topics';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { useSettings } from '../../api/settings';\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'bg-status-active/10 text-status-active',\n workflow: 'bg-accent/15 text-accent',\n escalation: 'bg-status-warning/10 text-status-warning',\n activity: 'bg-status-active/10 text-status-active',\n knowledge: 'bg-accent/10 text-accent',\n agent: 'bg-status-success/10 text-status-success',\n app: 'bg-status-error/10 text-status-error',\n milestone: 'bg-accent/10 text-accent',\n};\n\nfunction SectionHeader({ icon: Icon, color, children }: { icon: React.ElementType; color: string; children: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"section-h2\">{children}</h2>\n </div>\n );\n}\n\nexport function TopicDetailPage() {\n const { topic: encodedTopic } = useParams<{ topic: string }>();\n const topicKey = encodedTopic ? decodeURIComponent(encodedTopic) : null;\n const navigate = useNavigate();\n const { data: topic, isLoading, refetch, isFetching } = useTopic(topicKey);\n const { data: settings } = useSettings();\n const subscriberLabel = settings?.ai?.enabled ? 'agents' : 'automations';\n const updateMutation = useUpdateTopic();\n const deleteMutation = useDeleteTopic();\n const publishMutation = usePublishTopic();\n\n const [editing, setEditing] = useState(false);\n const [publishSubject, setPublishSubject] = useState('');\n const [publishEventId, setPublishEventId] = useState(() => `evt-${Date.now()}-${Math.random().toString(16).slice(2, 6)}`);\n const [publishPayload, setPublishPayload] = useState('');\n // Opt-in envelope extension fields. Which ones are shown depends on the topic\n // family (system.workflow.* shows workflow fields; a custom/file topic shows\n // none). Prefilled like Event ID; sent as top-level event fields.\n const [publishWorkflowName, setPublishWorkflowName] = useState('myWorkflow');\n const [publishWorkflowId, setPublishWorkflowId] = useState('wf-001');\n const [publishTaskQueue, setPublishTaskQueue] = useState('default');\n const [publishStatus, setPublishStatus] = useState('');\n const [publishEscalationId, setPublishEscalationId] = useState('esc-001');\n const [publishActivityName, setPublishActivityName] = useState('myActivity');\n const [editDescription, setEditDescription] = useState('');\n const [editTags, setEditTags] = useState('');\n const [editSchema, setEditSchema] = useState('');\n const [schemaError, setSchemaError] = useState('');\n\n if (isLoading) {\n return <div className=\"animate-pulse space-y-4\"><div className=\"h-8 bg-surface-sunken rounded w-48\" /><div className=\"h-40 bg-surface-sunken rounded\" /></div>;\n }\n\n if (!topic) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <Radio className=\"w-12 h-12 text-text-quaternary mb-4\" strokeWidth={1} />\n <h2 className=\"text-lg font-medium text-text-primary mb-2\">Topic not found</h2>\n </div>\n );\n }\n\n const isSystem = topic.source === 'system';\n const isManaged = topic.managed;\n const editable = !isManaged;\n const categoryPillCls = CATEGORY_COLORS[topic.category] ?? 'bg-surface-sunken text-text-tertiary';\n\n const defaultPayload = topic.example_payload\n ? JSON.stringify(topic.example_payload, null, 2)\n : topic.payload_schema?.properties\n ? JSON.stringify(Object.fromEntries(Object.keys(topic.payload_schema.properties).map(k => [k, ''])), null, 2)\n : '{}';\n\n // Which envelope extensions belong to this topic's family (\"the system injects\n // fields by type\"). Custom / file / knowledge topics carry none — just data.\n const fam =\n topic.topic.startsWith('system.workflow.') || topic.topic.startsWith('system.task.') ? 'workflow'\n : topic.topic.startsWith('system.escalation.') ? 'escalation'\n : topic.topic.startsWith('system.activity.') ? 'activity'\n : 'none';\n const showWorkflowFields = fam === 'workflow' || fam === 'escalation' || fam === 'activity';\n const showStatus = fam === 'workflow' || fam === 'escalation';\n // Status default mirrors the subject's terminal verb (failed / completed / resolved …).\n const statusDefault = (publishSubject || topic.topic).split('.').pop() ?? '';\n\n // The literal event the publish will send — built from the universal envelope\n // (id, subject, source) + only the family's extension fields + the payload.\n const buildPublishEvent = (): Record<string, any> => {\n let data: Record<string, any> = {};\n try { data = JSON.parse(publishPayload || defaultPayload); } catch { /* invalid JSON */ }\n const subject = (publishSubject || topic.topic) !== topic.topic ? (publishSubject || topic.topic) : undefined;\n const event: Record<string, any> = { id: publishEventId || undefined, source: 'dashboard', data };\n if (subject) event.subject = subject;\n if (showWorkflowFields) {\n event.workflowName = publishWorkflowName;\n event.workflowId = publishWorkflowId;\n event.taskQueue = publishTaskQueue;\n }\n if (showStatus) event.status = publishStatus || statusDefault;\n if (fam === 'escalation') event.escalationId = publishEscalationId;\n if (fam === 'activity') event.activityName = publishActivityName;\n return event;\n };\n // A literal preview of the published envelope (type derived from subject).\n const eventPreview = (() => {\n const { subject, ...rest } = buildPublishEvent();\n return JSON.stringify({ type: subject || topic.topic, timestamp: '<minted>', ...rest }, null, 2);\n })();\n if (!publishPayload && defaultPayload !== '{}') {\n setPublishPayload(defaultPayload);\n }\n if (!publishSubject) {\n setPublishSubject(topic.topic);\n }\n\n const startEdit = () => {\n setEditDescription(topic.description ?? '');\n setEditTags((topic.tags ?? []).join(', '));\n setEditSchema(topic.payload_schema ? JSON.stringify(topic.payload_schema, null, 2) : '');\n setSchemaError('');\n setEditing(true);\n };\n\n const cancelEdit = () => setEditing(false);\n\n const saveEdit = () => {\n const tags = editTags.split(',').map((t) => t.trim()).filter(Boolean);\n let payload_schema: Record<string, any> | undefined;\n if (editSchema.trim()) {\n try {\n payload_schema = JSON.parse(editSchema);\n setSchemaError('');\n } catch {\n setSchemaError('Invalid JSON');\n return;\n }\n }\n updateMutation.mutate(\n { topic: topic.topic, description: editDescription, tags, ...(payload_schema !== undefined ? { payload_schema } : {}) },\n { onSuccess: () => { setEditing(false); refetch(); } },\n );\n };\n\n const handleDelete = () => {\n if (confirm(`Delete topic \"${topic.topic}\"?\\n\\nThis removes it from the catalog. Active subscriptions are not affected.`)) {\n deleteMutation.mutate(topic.topic, { onSuccess: () => navigate('/topics') });\n }\n };\n\n return (\n <div>\n {/* ── Header ───────────────────────────────────────────────── */}\n <div className=\"flex items-start justify-between mb-4\">\n <div>\n <div className=\"flex items-center gap-3 mb-1\">\n <Radio className=\"w-5 h-5 text-accent\" strokeWidth={1.5} />\n <h1 className=\"text-lg font-mono font-medium text-text-primary\">{topic.topic}</h1>\n <button onClick={() => { window.location.hash = '#docs:topics.md'; }} className=\"text-text-quaternary hover:text-accent transition-colors\" title=\"Topic docs\">\n <BookOpen className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n </div>\n {!editing && topic.description ? (\n <p className=\"text-sm text-text-secondary leading-relaxed\">{topic.description}</p>\n ) : !editing ? (\n <p className=\"text-sm text-text-quaternary italic\">No description</p>\n ) : null}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {!editing && editable && (\n <button onClick={startEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Pencil className=\"w-3 h-3\" /> Edit\n </button>\n )}\n {!editing && !isSystem && editable && (\n <button onClick={handleDelete} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-status-error/60 hover:text-status-error hover:bg-status-error/10 transition-colors\">\n <Trash2 className=\"w-3 h-3\" /> Delete\n </button>\n )}\n {editing && (\n <>\n <button onClick={saveEdit} disabled={updateMutation.isPending} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Save className=\"w-3 h-3\" /> Save\n </button>\n <button onClick={cancelEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors\">\n <X className=\"w-3 h-3\" /> Cancel\n </button>\n </>\n )}\n </div>\n </div>\n\n {/* ── Details band ─────────────────────────────────────────── */}\n <div className=\"bg-surface-sunken/50 rounded-md px-5 py-3 flex flex-wrap gap-x-6 gap-y-3 items-start mb-5 relative\">\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Category</p>\n <span className={`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${categoryPillCls}`}>{topic.category}</span>\n </div>\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Source</p>\n <span className=\"text-xs font-mono text-text-secondary\">{topic.source}</span>\n </div>\n {topic.tags?.length > 0 && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Tags</p>\n <div className=\"flex items-center gap-1.5\">\n <Tag className=\"w-2.5 h-2.5 text-text-quaternary\" strokeWidth={1.5} />\n {topic.tags.map((tag) => (\n <span key={tag} className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken\">{tag}</span>\n ))}\n </div>\n </div>\n )}\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Created</p>\n <span className=\"text-xs text-text-secondary\"><DateValue date={topic.created_at} /></span>\n </div>\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Updated</p>\n <span className=\"text-xs text-text-secondary\"><DateValue date={topic.updated_at} /></span>\n </div>\n {topic.last_seen_at && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Last Seen</p>\n <span className=\"text-xs text-text-secondary\"><DateValue date={topic.last_seen_at} /></span>\n </div>\n )}\n <div className=\"ml-auto self-center\">\n <ListToolbar onRefresh={() => refetch()} isFetching={isFetching} apiPath={`/topics/by-name/${encodeURIComponent(topic.topic)}`} />\n </div>\n </div>\n\n {/* ── Three-column layout: Schema | Example | Test ─── */}\n {!editing && (\n <div className=\"grid grid-cols-3 gap-5\">\n {/* Col 1 — Payload Schema */}\n <div className=\"min-w-0\">\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n {topic.payload_schema ? (\n <JsonViewer data={topic.payload_schema} />\n ) : (\n <p className=\"text-[11px] text-text-quaternary\">No schema defined. Click Edit to add one.</p>\n )}\n </div>\n\n {/* Col 2 — Example Payload */}\n <div className=\"min-w-0\">\n <SectionHeader icon={Braces} color=\"text-accent\">Example Payload</SectionHeader>\n {topic.example_payload ? (\n <JsonViewer data={topic.example_payload} />\n ) : (\n <p className=\"text-[11px] text-text-quaternary\">No example defined. Click Edit to add one.</p>\n )}\n </div>\n\n {/* Col 3 — Test */}\n <div className=\"min-w-0 space-y-4 animate-page-enter\">\n <SectionHeader icon={FlaskConical} color=\"text-accent\">Test</SectionHeader>\n {/* Target Subscribers */}\n <div className=\"bg-surface-sunken/30 rounded-md px-4 py-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Bot className=\"w-3.5 h-3.5 text-status-success\" strokeWidth={1.5} />\n <h2 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Target Subscribers\n </h2>\n <span className=\"relative group ml-auto\">\n <Info className=\"w-3 h-3 text-text-quaternary cursor-help\" strokeWidth={1.5} />\n <span className=\"absolute right-0 top-full mt-1 w-48 p-2 rounded bg-surface-raised border border-surface-border shadow-lg text-[10px] text-text-secondary leading-relaxed hidden group-hover:block z-10\">\n Publishing a test event is live — these subscribers will receive and process the payload.\n </span>\n </span>\n </div>\n {topic.subscribers?.length ? (\n <div className=\"space-y-0.5\">\n {topic.subscribers.map((sub) => (\n <button\n key={sub.id}\n onClick={() => navigate(`/agents/${sub.agent_id}`)}\n className=\"flex items-center gap-2 w-full text-left py-1 rounded hover:bg-surface-hover/50 transition-colors\"\n >\n <Bot className=\"w-2.5 h-2.5 text-status-success shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[11px] text-text-primary hover:text-accent transition-colors truncate\">{sub.agent_name}</span>\n <span className=\"text-[9px] font-mono text-text-quaternary ml-auto shrink-0\">{sub.reaction_type}</span>\n </button>\n ))}\n </div>\n ) : (\n <p className=\"text-[11px] text-text-quaternary\">No {subscriberLabel} subscribed.</p>\n )}\n </div>\n\n {/* Publish */}\n <div className=\"sticky top-16 bg-surface-sunken/40 rounded-md p-4\">\n <div className=\"flex items-center gap-2 mb-3\">\n <Send className=\"w-3.5 h-3.5 text-accent\" strokeWidth={1.5} />\n <h2 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Publish</h2>\n </div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Event ID</label>\n <input\n value={publishEventId}\n onChange={(e) => setPublishEventId(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"evt-1720368000000-a3f2\"\n />\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Subject</label>\n <input\n value={publishSubject || topic.topic}\n onChange={(e) => setPublishSubject(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n />\n {showWorkflowFields && (\n <div className=\"grid grid-cols-2 gap-x-3\">\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Workflow Name</label>\n <input\n value={publishWorkflowName}\n onChange={(e) => setPublishWorkflowName(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"myWorkflow\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Workflow ID</label>\n <input\n value={publishWorkflowId}\n onChange={(e) => setPublishWorkflowId(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"wf-001\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Task Queue</label>\n <input\n value={publishTaskQueue}\n onChange={(e) => setPublishTaskQueue(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"default\"\n />\n </div>\n {showStatus && (\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Status</label>\n <input\n value={publishStatus || statusDefault}\n onChange={(e) => setPublishStatus(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder={statusDefault}\n />\n </div>\n )}\n {fam === 'escalation' && (\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Escalation ID</label>\n <input\n value={publishEscalationId}\n onChange={(e) => setPublishEscalationId(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"esc-001\"\n />\n </div>\n )}\n {fam === 'activity' && (\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Activity Name</label>\n <input\n value={publishActivityName}\n onChange={(e) => setPublishActivityName(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"myActivity\"\n />\n </div>\n )}\n </div>\n )}\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Payload</label>\n <textarea\n value={publishPayload || defaultPayload}\n onChange={(e) => setPublishPayload(e.target.value)}\n className=\"input-json w-full text-[11px]\"\n rows={6}\n spellCheck={false}\n placeholder='{ \"key\": \"value\" }'\n />\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1 mt-3\">Event Preview</label>\n <pre className=\"bg-surface-sunken/60 rounded px-2 py-2 text-[10px] font-mono text-text-tertiary overflow-auto max-h-44 whitespace-pre\">{eventPreview}</pre>\n <div className=\"mt-3\">\n <button\n onClick={() => {\n publishMutation.mutate(\n { topic: topic.topic, event: buildPublishEvent() },\n { onSuccess: () => {\n refetch();\n // Generate a fresh event ID for the next publish\n setPublishEventId(`evt-${Date.now()}-${Math.random().toString(16).slice(2, 6)}`);\n } },\n );\n }}\n disabled={publishMutation.isPending}\n className=\"btn-primary text-xs w-full\"\n >\n {publishMutation.isPending ? 'Publishing…' : 'Publish'}\n </button>\n </div>\n {publishMutation.isSuccess && (\n <p className=\"text-[10px] text-status-success mt-2 animate-page-enter\">Event published</p>\n )}\n {publishMutation.isError && (\n <p className=\"text-[10px] text-status-error mt-2\">{publishMutation.error.message}</p>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* ── Edit mode ────────────────────────────────────────────── */}\n {editing && (\n <div className=\"space-y-6 max-w-3xl\">\n <div>\n <label className=\"section-header\">Description</label>\n <textarea\n value={editDescription}\n onChange={(e) => setEditDescription(e.target.value)}\n rows={3}\n className=\"input resize-none\"\n placeholder=\"What this topic represents\"\n />\n </div>\n <div>\n <label className=\"section-header\">Tags</label>\n <input\n type=\"text\"\n value={editTags}\n onChange={(e) => setEditTags(e.target.value)}\n placeholder=\"lifecycle, core, error\"\n className=\"input font-mono\"\n />\n <p className=\"hint\">Comma-separated. Used for filtering in the catalog.</p>\n </div>\n <div>\n <label className=\"section-header\">Payload Schema</label>\n <textarea\n value={editSchema}\n onChange={(e) => { setEditSchema(e.target.value); setSchemaError(''); }}\n rows={12}\n className=\"input-json w-full\"\n placeholder={'{\\n \"type\": \"object\",\\n \"properties\": {\\n \"orderId\": { \"type\": \"string\" }\\n }\\n}'}\n />\n {schemaError && <p className=\"text-[10px] text-status-error mt-1\">{schemaError}</p>}\n <p className=\"hint\">JSON Schema describing the event.data shape.</p>\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"names":["CATEGORY_COLORS","SectionHeader","Icon","color","children","jsxDEV","TopicDetailPage","encodedTopic","useParams","topicKey","navigate","useNavigate","topic","isLoading","refetch","isFetching","useTopic","settings","useSettings","subscriberLabel","_a","updateMutation","useUpdateTopic","deleteMutation","useDeleteTopic","publishMutation","usePublishTopic","editing","setEditing","useState","publishSubject","setPublishSubject","publishEventId","setPublishEventId","publishPayload","setPublishPayload","publishWorkflowName","setPublishWorkflowName","publishWorkflowId","setPublishWorkflowId","publishTaskQueue","setPublishTaskQueue","publishStatus","setPublishStatus","publishEscalationId","setPublishEscalationId","publishActivityName","setPublishActivityName","editDescription","setEditDescription","editTags","setEditTags","editSchema","setEditSchema","schemaError","setSchemaError","Radio","isSystem","editable","categoryPillCls","defaultPayload","_b","k","fam","showWorkflowFields","showStatus","statusDefault","buildPublishEvent","data","subject","event","eventPreview","rest","startEdit","cancelEdit","saveEdit","tags","t","payload_schema","handleDelete","BookOpen","Pencil","Trash2","Fragment","Save","X","_c","Tag","tag","DateValue","ListToolbar","JsonViewer","Braces","FlaskConical","Bot","Info","_d","sub","Send","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TopicDetailPage-f2qaeGFz.js","sources":["../../src/pages/topics/TopicDetailPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { Radio, Bot, Tag, Pencil, Trash2, Save, X, BookOpen, Send, FlaskConical, Info, Braces } from 'lucide-react';\nimport { useTopic, useUpdateTopic, useDeleteTopic, usePublishTopic } from '../../api/topics';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { useSettings } from '../../api/settings';\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'bg-status-active/10 text-status-active',\n workflow: 'bg-accent/15 text-accent',\n escalation: 'bg-status-warning/10 text-status-warning',\n activity: 'bg-status-active/10 text-status-active',\n knowledge: 'bg-accent/10 text-accent',\n agent: 'bg-status-success/10 text-status-success',\n app: 'bg-status-error/10 text-status-error',\n milestone: 'bg-accent/10 text-accent',\n};\n\nfunction SectionHeader({ icon: Icon, color, children }: { icon: React.ElementType; color: string; children: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"section-h2\">{children}</h2>\n </div>\n );\n}\n\nexport function TopicDetailPage() {\n const { topic: encodedTopic } = useParams<{ topic: string }>();\n const topicKey = encodedTopic ? decodeURIComponent(encodedTopic) : null;\n const navigate = useNavigate();\n const { data: topic, isLoading, refetch, isFetching } = useTopic(topicKey);\n const { data: settings } = useSettings();\n const subscriberLabel = settings?.ai?.enabled ? 'agents' : 'automations';\n const updateMutation = useUpdateTopic();\n const deleteMutation = useDeleteTopic();\n const publishMutation = usePublishTopic();\n\n const [editing, setEditing] = useState(false);\n const [publishSubject, setPublishSubject] = useState('');\n const [publishEventId, setPublishEventId] = useState(() => `evt-${Date.now()}-${Math.random().toString(16).slice(2, 6)}`);\n const [publishPayload, setPublishPayload] = useState('');\n // Opt-in envelope extension fields. Which ones are shown depends on the topic\n // family (system.workflow.* shows workflow fields; a custom/file topic shows\n // none). Prefilled like Event ID; sent as top-level event fields.\n const [publishWorkflowName, setPublishWorkflowName] = useState('myWorkflow');\n const [publishWorkflowId, setPublishWorkflowId] = useState('wf-001');\n const [publishTaskQueue, setPublishTaskQueue] = useState('default');\n const [publishStatus, setPublishStatus] = useState('');\n const [publishEscalationId, setPublishEscalationId] = useState('esc-001');\n const [publishActivityName, setPublishActivityName] = useState('myActivity');\n const [editDescription, setEditDescription] = useState('');\n const [editTags, setEditTags] = useState('');\n const [editSchema, setEditSchema] = useState('');\n const [schemaError, setSchemaError] = useState('');\n\n if (isLoading) {\n return <div className=\"animate-pulse space-y-4\"><div className=\"h-8 bg-surface-sunken rounded w-48\" /><div className=\"h-40 bg-surface-sunken rounded\" /></div>;\n }\n\n if (!topic) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <Radio className=\"w-12 h-12 text-text-quaternary mb-4\" strokeWidth={1} />\n <h2 className=\"text-lg font-medium text-text-primary mb-2\">Topic not found</h2>\n </div>\n );\n }\n\n const isSystem = topic.source === 'system';\n const isManaged = topic.managed;\n const editable = !isManaged;\n const categoryPillCls = CATEGORY_COLORS[topic.category] ?? 'bg-surface-sunken text-text-tertiary';\n\n const defaultPayload = topic.example_payload\n ? JSON.stringify(topic.example_payload, null, 2)\n : topic.payload_schema?.properties\n ? JSON.stringify(Object.fromEntries(Object.keys(topic.payload_schema.properties).map(k => [k, ''])), null, 2)\n : '{}';\n\n // Which envelope extensions belong to this topic's family (\"the system injects\n // fields by type\"). Custom / file / knowledge topics carry none — just data.\n const fam =\n topic.topic.startsWith('system.workflow.') || topic.topic.startsWith('system.task.') ? 'workflow'\n : topic.topic.startsWith('system.escalation.') ? 'escalation'\n : topic.topic.startsWith('system.activity.') ? 'activity'\n : 'none';\n const showWorkflowFields = fam === 'workflow' || fam === 'escalation' || fam === 'activity';\n const showStatus = fam === 'workflow' || fam === 'escalation';\n // Status default mirrors the subject's terminal verb (failed / completed / resolved …).\n const statusDefault = (publishSubject || topic.topic).split('.').pop() ?? '';\n\n // The literal event the publish will send — built from the universal envelope\n // (id, subject, source) + only the family's extension fields + the payload.\n const buildPublishEvent = (): Record<string, any> => {\n let data: Record<string, any> = {};\n try { data = JSON.parse(publishPayload || defaultPayload); } catch { /* invalid JSON */ }\n const subject = (publishSubject || topic.topic) !== topic.topic ? (publishSubject || topic.topic) : undefined;\n const event: Record<string, any> = { id: publishEventId || undefined, source: 'dashboard', data };\n if (subject) event.subject = subject;\n if (showWorkflowFields) {\n event.workflowName = publishWorkflowName;\n event.workflowId = publishWorkflowId;\n event.taskQueue = publishTaskQueue;\n }\n if (showStatus) event.status = publishStatus || statusDefault;\n if (fam === 'escalation') event.escalationId = publishEscalationId;\n if (fam === 'activity') event.activityName = publishActivityName;\n return event;\n };\n // A literal preview of the published envelope (type derived from subject).\n const eventPreview = (() => {\n const { subject, ...rest } = buildPublishEvent();\n return JSON.stringify({ type: subject || topic.topic, timestamp: '<minted>', ...rest }, null, 2);\n })();\n if (!publishPayload && defaultPayload !== '{}') {\n setPublishPayload(defaultPayload);\n }\n if (!publishSubject) {\n setPublishSubject(topic.topic);\n }\n\n const startEdit = () => {\n setEditDescription(topic.description ?? '');\n setEditTags((topic.tags ?? []).join(', '));\n setEditSchema(topic.payload_schema ? JSON.stringify(topic.payload_schema, null, 2) : '');\n setSchemaError('');\n setEditing(true);\n };\n\n const cancelEdit = () => setEditing(false);\n\n const saveEdit = () => {\n const tags = editTags.split(',').map((t) => t.trim()).filter(Boolean);\n let payload_schema: Record<string, any> | undefined;\n if (editSchema.trim()) {\n try {\n payload_schema = JSON.parse(editSchema);\n setSchemaError('');\n } catch {\n setSchemaError('Invalid JSON');\n return;\n }\n }\n updateMutation.mutate(\n { topic: topic.topic, description: editDescription, tags, ...(payload_schema !== undefined ? { payload_schema } : {}) },\n { onSuccess: () => { setEditing(false); refetch(); } },\n );\n };\n\n const handleDelete = () => {\n if (confirm(`Delete topic \"${topic.topic}\"?\\n\\nThis removes it from the catalog. Active subscriptions are not affected.`)) {\n deleteMutation.mutate(topic.topic, { onSuccess: () => navigate('/topics') });\n }\n };\n\n return (\n <div>\n {/* ── Header ───────────────────────────────────────────────── */}\n <div className=\"flex items-start justify-between mb-4\">\n <div>\n <div className=\"flex items-center gap-3 mb-1\">\n <Radio className=\"w-5 h-5 text-accent\" strokeWidth={1.5} />\n <h1 className=\"text-lg font-mono font-medium text-text-primary\">{topic.topic}</h1>\n <button onClick={() => { window.location.hash = '#docs:topics.md'; }} className=\"text-text-quaternary hover:text-accent transition-colors\" title=\"Topic docs\">\n <BookOpen className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n </div>\n {!editing && topic.description ? (\n <p className=\"text-sm text-text-secondary leading-relaxed\">{topic.description}</p>\n ) : !editing ? (\n <p className=\"text-sm text-text-quaternary italic\">No description</p>\n ) : null}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {!editing && editable && (\n <button onClick={startEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Pencil className=\"w-3 h-3\" /> Edit\n </button>\n )}\n {!editing && !isSystem && editable && (\n <button onClick={handleDelete} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-status-error/60 hover:text-status-error hover:bg-status-error/10 transition-colors\">\n <Trash2 className=\"w-3 h-3\" /> Delete\n </button>\n )}\n {editing && (\n <>\n <button onClick={saveEdit} disabled={updateMutation.isPending} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Save className=\"w-3 h-3\" /> Save\n </button>\n <button onClick={cancelEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors\">\n <X className=\"w-3 h-3\" /> Cancel\n </button>\n </>\n )}\n </div>\n </div>\n\n {/* ── Details band ─────────────────────────────────────────── */}\n <div className=\"bg-surface-sunken/50 rounded-md px-5 py-3 flex flex-wrap gap-x-6 gap-y-3 items-start mb-5 relative\">\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Category</p>\n <span className={`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${categoryPillCls}`}>{topic.category}</span>\n </div>\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Source</p>\n <span className=\"text-xs font-mono text-text-secondary\">{topic.source}</span>\n </div>\n {topic.tags?.length > 0 && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Tags</p>\n <div className=\"flex items-center gap-1.5\">\n <Tag className=\"w-2.5 h-2.5 text-text-quaternary\" strokeWidth={1.5} />\n {topic.tags.map((tag) => (\n <span key={tag} className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken\">{tag}</span>\n ))}\n </div>\n </div>\n )}\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Created</p>\n <span className=\"text-xs text-text-secondary\"><DateValue date={topic.created_at} /></span>\n </div>\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Updated</p>\n <span className=\"text-xs text-text-secondary\"><DateValue date={topic.updated_at} /></span>\n </div>\n {topic.last_seen_at && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Last Seen</p>\n <span className=\"text-xs text-text-secondary\"><DateValue date={topic.last_seen_at} /></span>\n </div>\n )}\n <div className=\"ml-auto self-center\">\n <ListToolbar onRefresh={() => refetch()} isFetching={isFetching} apiPath={`/topics/by-name/${encodeURIComponent(topic.topic)}`} />\n </div>\n </div>\n\n {/* ── Three-column layout: Schema | Example | Test ─── */}\n {!editing && (\n <div className=\"grid grid-cols-3 gap-5\">\n {/* Col 1 — Payload Schema */}\n <div className=\"min-w-0\">\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n {topic.payload_schema ? (\n <JsonViewer data={topic.payload_schema} />\n ) : (\n <p className=\"text-[11px] text-text-quaternary\">No schema defined. Click Edit to add one.</p>\n )}\n </div>\n\n {/* Col 2 — Example Payload */}\n <div className=\"min-w-0\">\n <SectionHeader icon={Braces} color=\"text-accent\">Example Payload</SectionHeader>\n {topic.example_payload ? (\n <JsonViewer data={topic.example_payload} />\n ) : (\n <p className=\"text-[11px] text-text-quaternary\">No example defined. Click Edit to add one.</p>\n )}\n </div>\n\n {/* Col 3 — Test */}\n <div className=\"min-w-0 space-y-4 animate-page-enter\">\n <SectionHeader icon={FlaskConical} color=\"text-accent\">Test</SectionHeader>\n {/* Target Subscribers */}\n <div className=\"bg-surface-sunken/30 rounded-md px-4 py-3\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Bot className=\"w-3.5 h-3.5 text-status-success\" strokeWidth={1.5} />\n <h2 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Target Subscribers\n </h2>\n <span className=\"relative group ml-auto\">\n <Info className=\"w-3 h-3 text-text-quaternary cursor-help\" strokeWidth={1.5} />\n <span className=\"absolute right-0 top-full mt-1 w-48 p-2 rounded bg-surface-raised border border-surface-border shadow-lg text-[10px] text-text-secondary leading-relaxed hidden group-hover:block z-10\">\n Publishing a test event is live — these subscribers will receive and process the payload.\n </span>\n </span>\n </div>\n {topic.subscribers?.length ? (\n <div className=\"space-y-0.5\">\n {topic.subscribers.map((sub) => (\n <button\n key={sub.id}\n onClick={() => navigate(`/agents/${sub.agent_id}`)}\n className=\"flex items-center gap-2 w-full text-left py-1 rounded hover:bg-surface-hover/50 transition-colors\"\n >\n <Bot className=\"w-2.5 h-2.5 text-status-success shrink-0\" strokeWidth={1.5} />\n <span className=\"text-[11px] text-text-primary hover:text-accent transition-colors truncate\">{sub.agent_name}</span>\n <span className=\"text-[9px] font-mono text-text-quaternary ml-auto shrink-0\">{sub.reaction_type}</span>\n </button>\n ))}\n </div>\n ) : (\n <p className=\"text-[11px] text-text-quaternary\">No {subscriberLabel} subscribed.</p>\n )}\n </div>\n\n {/* Publish */}\n <div className=\"sticky top-16 bg-surface-sunken/40 rounded-md p-4\">\n <div className=\"flex items-center gap-2 mb-3\">\n <Send className=\"w-3.5 h-3.5 text-accent\" strokeWidth={1.5} />\n <h2 className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Publish</h2>\n </div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Event ID</label>\n <input\n value={publishEventId}\n onChange={(e) => setPublishEventId(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"evt-1720368000000-a3f2\"\n />\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Subject</label>\n <input\n value={publishSubject || topic.topic}\n onChange={(e) => setPublishSubject(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n />\n {showWorkflowFields && (\n <div className=\"grid grid-cols-2 gap-x-3\">\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Workflow Name</label>\n <input\n value={publishWorkflowName}\n onChange={(e) => setPublishWorkflowName(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"myWorkflow\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Workflow ID</label>\n <input\n value={publishWorkflowId}\n onChange={(e) => setPublishWorkflowId(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"wf-001\"\n />\n </div>\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Task Queue</label>\n <input\n value={publishTaskQueue}\n onChange={(e) => setPublishTaskQueue(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"default\"\n />\n </div>\n {showStatus && (\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Status</label>\n <input\n value={publishStatus || statusDefault}\n onChange={(e) => setPublishStatus(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder={statusDefault}\n />\n </div>\n )}\n {fam === 'escalation' && (\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Escalation ID</label>\n <input\n value={publishEscalationId}\n onChange={(e) => setPublishEscalationId(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"esc-001\"\n />\n </div>\n )}\n {fam === 'activity' && (\n <div>\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Activity Name</label>\n <input\n value={publishActivityName}\n onChange={(e) => setPublishActivityName(e.target.value)}\n className=\"input w-full text-[11px] font-mono mb-3\"\n spellCheck={false}\n placeholder=\"myActivity\"\n />\n </div>\n )}\n </div>\n )}\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1\">Payload</label>\n <textarea\n value={publishPayload || defaultPayload}\n onChange={(e) => setPublishPayload(e.target.value)}\n className=\"input-json w-full text-[11px]\"\n rows={6}\n spellCheck={false}\n placeholder='{ \"key\": \"value\" }'\n />\n <label className=\"block text-[10px] text-text-quaternary uppercase tracking-wide mb-1 mt-3\">Event Preview</label>\n <pre className=\"bg-surface-sunken/60 rounded px-2 py-2 text-[10px] font-mono text-text-tertiary overflow-auto max-h-44 whitespace-pre\">{eventPreview}</pre>\n <div className=\"mt-3\">\n <button\n onClick={() => {\n publishMutation.mutate(\n { topic: topic.topic, event: buildPublishEvent() },\n { onSuccess: () => {\n refetch();\n // Generate a fresh event ID for the next publish\n setPublishEventId(`evt-${Date.now()}-${Math.random().toString(16).slice(2, 6)}`);\n } },\n );\n }}\n disabled={publishMutation.isPending}\n className=\"btn-primary text-xs w-full\"\n >\n {publishMutation.isPending ? 'Publishing…' : 'Publish'}\n </button>\n </div>\n {publishMutation.isSuccess && (\n <p className=\"text-[10px] text-status-success mt-2 animate-page-enter\">Event published</p>\n )}\n {publishMutation.isError && (\n <p className=\"text-[10px] text-status-error mt-2\">{publishMutation.error.message}</p>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* ── Edit mode ────────────────────────────────────────────── */}\n {editing && (\n <div className=\"space-y-6 max-w-3xl\">\n <div>\n <label className=\"section-header\">Description</label>\n <textarea\n value={editDescription}\n onChange={(e) => setEditDescription(e.target.value)}\n rows={3}\n className=\"input resize-none\"\n placeholder=\"What this topic represents\"\n />\n </div>\n <div>\n <label className=\"section-header\">Tags</label>\n <input\n type=\"text\"\n value={editTags}\n onChange={(e) => setEditTags(e.target.value)}\n placeholder=\"lifecycle, core, error\"\n className=\"input font-mono\"\n />\n <p className=\"hint\">Comma-separated. Used for filtering in the catalog.</p>\n </div>\n <div>\n <label className=\"section-header\">Payload Schema</label>\n <textarea\n value={editSchema}\n onChange={(e) => { setEditSchema(e.target.value); setSchemaError(''); }}\n rows={12}\n className=\"input-json w-full\"\n placeholder={'{\\n \"type\": \"object\",\\n \"properties\": {\\n \"orderId\": { \"type\": \"string\" }\\n }\\n}'}\n />\n {schemaError && <p className=\"text-[10px] text-status-error mt-1\">{schemaError}</p>}\n <p className=\"hint\">JSON Schema describing the event.data shape.</p>\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"names":["CATEGORY_COLORS","SectionHeader","Icon","color","children","jsxs","jsx","TopicDetailPage","encodedTopic","useParams","topicKey","navigate","useNavigate","topic","isLoading","refetch","isFetching","useTopic","settings","useSettings","subscriberLabel","_a","updateMutation","useUpdateTopic","deleteMutation","useDeleteTopic","publishMutation","usePublishTopic","editing","setEditing","useState","publishSubject","setPublishSubject","publishEventId","setPublishEventId","publishPayload","setPublishPayload","publishWorkflowName","setPublishWorkflowName","publishWorkflowId","setPublishWorkflowId","publishTaskQueue","setPublishTaskQueue","publishStatus","setPublishStatus","publishEscalationId","setPublishEscalationId","publishActivityName","setPublishActivityName","editDescription","setEditDescription","editTags","setEditTags","editSchema","setEditSchema","schemaError","setSchemaError","Radio","isSystem","editable","categoryPillCls","defaultPayload","_b","k","fam","showWorkflowFields","showStatus","statusDefault","buildPublishEvent","data","subject","event","eventPreview","rest","startEdit","cancelEdit","saveEdit","tags","t","payload_schema","handleDelete","BookOpen","Pencil","Trash2","Fragment","Save","X","_c","Tag","tag","DateValue","ListToolbar","JsonViewer","Braces","FlaskConical","Bot","Info","_d","sub","Send","e"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as x,j as e}from"./vendor-query-B2UbickB.js";import{u as j}from"./topics-0dXzPX8t.js";import{P as y}from"./PageHeader-DJo7yMUR.js";import{F as v,b as N,a as b}from"./FilterBar-B4Mk2PvT.js";import{aS as k,aT as w,b as C,B as S,Z as T,aU as B,v as R,aV as q,R as g}from"./vendor-icons-DOIDKgo6.js";import{c as A}from"./vendor-react-CXumBFUA.js";import"./index-C8k3Z2su.js";const E={task:q,workflow:R,escalation:B,activity:T,knowledge:S,agent:C,app:w,milestone:k};function G(){const s=A(),[a,l]=x.useState(""),[c,f]=x.useState(null),{data:m,isLoading:p}=j({limit:500}),i=(m==null?void 0:m.topics)??[],d=x.useMemo(()=>{const t=new Set;for(const r of i)t.add(r.category);return Array.from(t).sort()},[i]),u=x.useMemo(()=>{const t=a.toLowerCase().trim();return(c?[c]:d).map(o=>({name:o,topics:i.filter(n=>{var h;return n.category===o&&(!t||n.topic.toLowerCase().includes(t)||((h=n.description)==null?void 0:h.toLowerCase().includes(t)))})})).filter(o=>o.topics.length>0)},[i,d,a,c]);return e.jsxs("div",{children:[e.jsx(y,{title:"Event Topics",docsHash:"#docs:topics.md"}),!p&&d.length>0&&e.jsxs(v,{children:[e.jsx(N,{label:"Category",value:c??"",onChange:t=>f(t||null),options:d.map(t=>({value:t,label:t}))}),e.jsx(b,{label:"Search",value:a,onChange:l,placeholder:`${i.length} topics…`})]}),p?e.jsx("div",{className:"animate-pulse space-y-8 mt-4",children:[1,2,3].map(t=>e.jsxs("div",{children:[e.jsx("div",{className:"h-4 bg-surface-sunken rounded w-28 mb-4"}),e.jsx("div",{className:"space-y-3",children:[1,2,3,4].map(r=>e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"h-3 bg-surface-sunken rounded w-64"}),e.jsx("div",{className:"h-3 bg-surface-sunken rounded w-full"})]},r))})]},t))}):u.length===0?e.jsx("p",{className:"text-sm text-text-tertiary mt-8",children:a||c?"No topics match your filter.":"No topics registered yet."}):e.jsx("div",{className:"space-y-10",children:u.map(({name:t,topics:r})=>{const o=E[t]??g;return e.jsxs("div",{children:[e.jsxs("div",{className:"sticky top-[60px] z-10 bg-surface flex items-center gap-2 py-2 mb-2 border-b border-surface-border",children:[e.jsx(o,{className:"w-3 h-3 text-accent",strokeWidth:1.5}),e.jsx("h2",{className:"section-h2 capitalize",children:t}),e.jsx("span",{className:"text-xs text-text-quaternary",children:r.length})]}),e.jsx("div",{className:"divide-y divide-surface-border/30",children:r.map(n=>e.jsx(F,{topic:n,onClick:()=>s(`/topics/${encodeURIComponent(n.topic)}`)},n.topic))})]},t)})})]})}function F({topic:s,onClick:a}){return e.jsx("div",{role:"button",tabIndex:0,onClick:a,onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&a()},className:"group py-2 px-3 -mx-3 rounded-md cursor-pointer transition-colors text-left",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(g,{className:"w-3 h-3 shrink-0 text-text-quaternary group-hover:text-text-tertiary transition-colors",strokeWidth:1.5}),e.jsx("span",{className:"text-xs font-mono text-text-primary truncate shrink-0 max-w-[24rem]",children:s.topic}),e.jsx("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium shrink-0 bg-accent/10 text-accent",children:s.category}),(s.subscriber_count??0)>0&&e.jsx("span",{className:"inline-flex items-center justify-center min-w-[18px] px-1 py-0.5 rounded-full text-[10px] font-medium bg-accent/15 text-accent shrink-0",children:s.subscriber_count}),s.description&&e.jsx("p",{className:"flex-1 min-w-0 truncate text-[11px] text-text-tertiary group-hover:text-text-secondary transition-colors",children:s.description}),e.jsx("span",{className:"ml-auto text-[10px] font-mono text-text-quaternary shrink-0",children:s.source})]})})}export{G as TopicsPage};
|
|
2
|
+
//# sourceMappingURL=TopicsPage-CwYdVmyK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopicsPage-BXdc6pAU.js","sources":["../../src/pages/topics/TopicsPage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Radio,\n CheckSquare, GitBranch, AlertTriangle, Zap,\n BookOpen, Bot, AppWindow, Flag,\n} from 'lucide-react';\nimport { useTopics, type TopicCatalogEntry } from '../../api/topics';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../components/common/data/FilterBar';\nimport type { LucideIcon } from 'lucide-react';\n\n// ── Category meta ──────────────────────────────────────────────────────────────\n\nconst CATEGORY_ICONS: Record<string, LucideIcon> = {\n task: CheckSquare,\n workflow: GitBranch,\n escalation: AlertTriangle,\n activity: Zap,\n knowledge: BookOpen,\n agent: Bot,\n app: AppWindow,\n milestone: Flag,\n};\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function TopicsPage() {\n const navigate = useNavigate();\n const [search, setSearch] = useState('');\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n\n const { data, isLoading } = useTopics({ limit: 500 });\n const allTopics: TopicCatalogEntry[] = data?.topics ?? [];\n\n const categories = useMemo(() => {\n const seen = new Set<string>();\n for (const t of allTopics) seen.add(t.category);\n return Array.from(seen).sort();\n }, [allTopics]);\n\n const grouped = useMemo(() => {\n const q = search.toLowerCase().trim();\n const cats = activeCategory ? [activeCategory] : categories;\n return cats\n .map((cat) => ({\n name: cat,\n topics: allTopics.filter(\n (t) =>\n t.category === cat &&\n (!q || t.topic.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q)),\n ),\n }))\n .filter((g) => g.topics.length > 0);\n }, [allTopics, categories, search, activeCategory]);\n\n return (\n <div>\n <PageHeader title=\"Event Topics\" docsHash=\"#docs:topics.md\" />\n\n {/* Sticky filter bar: category select + search */}\n {!isLoading && categories.length > 0 && (\n <FilterBar>\n <FilterSelect\n label=\"Category\"\n value={activeCategory ?? ''}\n onChange={(v) => setActiveCategory(v || null)}\n options={categories.map((c) => ({ value: c, label: c }))}\n />\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder={`${allTopics.length} topics…`}\n />\n </FilterBar>\n )}\n\n {/* Topic list */}\n {isLoading ? (\n <div className=\"animate-pulse space-y-8 mt-4\">\n {[1, 2, 3].map((i) => (\n <div key={i}>\n <div className=\"h-4 bg-surface-sunken rounded w-28 mb-4\" />\n <div className=\"space-y-3\">\n {[1, 2, 3, 4].map((j) => (\n <div key={j} className=\"space-y-1.5\">\n <div className=\"h-3 bg-surface-sunken rounded w-64\" />\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n ) : grouped.length === 0 ? (\n <p className=\"text-sm text-text-tertiary mt-8\">\n {search || activeCategory ? 'No topics match your filter.' : 'No topics registered yet.'}\n </p>\n ) : (\n <div className=\"space-y-10\">\n {grouped.map(({ name, topics }) => {\n const Icon = CATEGORY_ICONS[name] ?? Radio;\n return (\n <div key={name}>\n <div className=\"sticky top-[60px] z-10 bg-surface flex items-center gap-2 py-2 mb-2 border-b border-surface-border\">\n <Icon className=\"w-3 h-3 text-accent\" strokeWidth={1.5} />\n <h2 className=\"section-h2 capitalize\">{name}</h2>\n <span className=\"text-xs text-text-quaternary\">{topics.length}</span>\n </div>\n <div className=\"divide-y divide-surface-border/30\">\n {topics.map((topic) => (\n <TopicRow\n key={topic.topic}\n topic={topic}\n onClick={() => navigate(`/topics/${encodeURIComponent(topic.topic)}`)}\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// ── Topic row ──────────────────────────────────────────────────────────────────\n\nfunction TopicRow({ topic, onClick }: { topic: TopicCatalogEntry; onClick: () => void }) {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') onClick(); }}\n className=\"group py-2 px-3 -mx-3 rounded-md cursor-pointer transition-colors text-left\"\n >\n <div className=\"flex items-center gap-3\">\n <Radio className=\"w-3 h-3 shrink-0 text-text-quaternary group-hover:text-text-tertiary transition-colors\" strokeWidth={1.5} />\n <span className=\"text-xs font-mono text-text-primary truncate shrink-0 max-w-[24rem]\">{topic.topic}</span>\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium shrink-0 bg-accent/10 text-accent\">\n {topic.category}\n </span>\n {(topic.subscriber_count ?? 0) > 0 && (\n <span className=\"inline-flex items-center justify-center min-w-[18px] px-1 py-0.5 rounded-full text-[10px] font-medium bg-accent/15 text-accent shrink-0\">\n {topic.subscriber_count}\n </span>\n )}\n {topic.description && (\n <p className=\"flex-1 min-w-0 truncate text-[11px] text-text-tertiary group-hover:text-text-secondary transition-colors\">\n {topic.description}\n </p>\n )}\n <span className=\"ml-auto text-[10px] font-mono text-text-quaternary shrink-0\">{topic.source}</span>\n </div>\n </div>\n );\n}\n"],"names":["CATEGORY_ICONS","CheckSquare","GitBranch","AlertTriangle","Zap","BookOpen","Bot","AppWindow","Flag","TopicsPage","navigate","useNavigate","search","setSearch","useState","activeCategory","setActiveCategory","data","isLoading","useTopics","allTopics","categories","useMemo","seen","grouped","q","cat","t","_a","g","jsxDEV","PageHeader","FilterBar","FilterSelect","v","c","FilterInput","i","j","name","topics","Icon","Radio","topic","TopicRow","onClick","e"],"mappings":"iYAcA,MAAMA,EAA6C,CACjD,KAAMC,EACN,SAAUC,EACV,WAAYC,EACZ,SAAUC,EACV,UAAWC,EACX,MAAOC,EACP,IAAKC,EACL,UAAWC,CACb,EAIO,SAASC,GAAa,CAC3B,MAAMC,EAAWC,EAAA,EACX,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAE,EACjC,CAACC,EAAgBC,CAAiB,EAAIF,EAAAA,SAAwB,IAAI,EAElE,CAAE,KAAAG,EAAM,UAAAC,CAAA,EAAcC,EAAU,CAAE,MAAO,IAAK,EAC9CC,GAAiCH,GAAA,YAAAA,EAAM,SAAU,CAAA,EAEjDI,EAAaC,EAAAA,QAAQ,IAAM,CAC/B,MAAMC,MAAW,IACjB,UAAW,KAAKH,EAAWG,EAAK,IAAI,EAAE,QAAQ,EAC9C,OAAO,MAAM,KAAKA,CAAI,EAAE,KAAA,CAC1B,EAAG,CAACH,CAAS,CAAC,EAERI,EAAUF,EAAAA,QAAQ,IAAM,CAC5B,MAAMG,EAAIb,EAAO,YAAA,EAAc,KAAA,EAE/B,OADaG,EAAiB,CAACA,CAAc,EAAIM,GAE9C,IAAKK,IAAS,CACb,KAAMA,EACN,OAAQN,EAAU,OACfO,GAAA,OACC,OAAAA,EAAE,WAAaD,IACd,CAACD,GAAKE,EAAE,MAAM,cAAc,SAASF,CAAC,KAAKG,EAAAD,EAAE,cAAF,YAAAC,EAAe,cAAc,SAASH,KAAC,CACvF,EACA,EACD,OAAQI,GAAMA,EAAE,OAAO,OAAS,CAAC,CACtC,EAAG,CAACT,EAAWC,EAAYT,EAAQG,CAAc,CAAC,EAElD,gBACG,MAAA,CACC,SAAA,CAAAe,SAACC,EAAA,CAAW,MAAM,eAAe,SAAS,iBAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAA4D,EAG3D,CAACb,GAAaG,EAAW,OAAS,YAChCW,EAAA,CACC,SAAA,CAAAF,EAAAA,OAACG,EAAA,CACC,MAAM,WACN,MAAOlB,GAAkB,GACzB,SAAWmB,GAAMlB,EAAkBkB,GAAK,IAAI,EAC5C,QAASb,EAAW,IAAKc,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAAA,EAJzD,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAMAL,EAAAA,OAACM,EAAA,CACC,MAAM,SACN,MAAOxB,EACP,SAAUC,EACV,YAAa,GAAGO,EAAU,MAAM,UAAA,EAJlC,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAaA,EAIDF,EACCY,EAAAA,OAAC,MAAA,CAAI,UAAU,+BACZ,SAAA,CAAC,EAAG,EAAG,CAAC,EAAE,IAAKO,YACb,MAAA,CACC,SAAA,CAAAP,EAAAA,OAAC,MAAA,CAAI,UAAU,yCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAyD,WACxD,MAAA,CAAI,UAAU,YACZ,SAAA,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,IAAKQ,GACjBR,EAAAA,OAAC,MAAA,CAAY,UAAU,cACrB,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,oCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoD,EACpDA,EAAAA,OAAC,MAAA,CAAI,UAAU,sCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsD,CAAA,CAAA,EAF9CQ,EAAV,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,CACD,GANH,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAOA,CAAA,CAAA,EATQD,EAAV,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAUA,CACD,GAbH,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAcA,EACEb,EAAQ,SAAW,EACrBM,EAAAA,OAAC,IAAA,CAAE,UAAU,kCACV,SAAAlB,GAAUG,EAAiB,+BAAiC,2BAAA,EAD/D,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAEAe,EAAAA,OAAC,MAAA,CAAI,UAAU,aACZ,SAAAN,EAAQ,IAAI,CAAC,CAAE,KAAAe,EAAM,OAAAC,CAAA,IAAa,CACjC,MAAMC,EAAOzC,EAAeuC,CAAI,GAAKG,EACrC,gBACG,MAAA,CACC,SAAA,CAAAZ,EAAAA,OAAC,MAAA,CAAI,UAAU,qGACb,SAAA,CAAAA,SAACW,EAAA,CAAK,UAAU,sBAAsB,YAAa,GAAA,EAAnD,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,EACxDX,SAAC,KAAA,CAAG,UAAU,wBAAyB,SAAAS,CAAA,EAAvC,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4C,EAC5CT,SAAC,OAAA,CAAK,UAAU,+BAAgC,WAAO,MAAA,EAAvD,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8D,CAAA,CAAA,EAHhE,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAIA,WACC,MAAA,CAAI,UAAU,oCACZ,SAAAU,EAAO,IAAKG,GACXb,EAAAA,OAACc,EAAA,CAEC,MAAAD,EACA,QAAS,IAAMjC,EAAS,WAAW,mBAAmBiC,EAAM,KAAK,CAAC,EAAE,CAAA,EAF/DA,EAAM,MADb,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKD,CAAA,EAPH,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAQA,CAAA,CAAA,EAdQJ,EAAV,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAeA,CAEJ,CAAC,CAAA,EArBH,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAsBA,CAAA,CAAA,EAjEJ,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAmEA,CAEJ,CAIA,SAASK,EAAS,CAAE,MAAAD,EAAO,QAAAE,GAA8D,CACvF,OACEf,EAAAA,OAAC,MAAA,CACC,KAAK,SACL,SAAU,EACV,QAAAe,EACA,UAAYC,GAAM,EAAMA,EAAE,MAAQ,SAAWA,EAAE,MAAQ,MAAKD,EAAA,CAAW,EACvE,UAAU,8EAEV,SAAAf,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,SAACY,EAAA,CAAM,UAAU,yFAAyF,YAAa,GAAA,EAAvH,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA4H,EAC5HZ,SAAC,OAAA,CAAK,UAAU,sEAAuE,WAAM,KAAA,EAA7F,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAmG,EACnGA,SAAC,OAAA,CAAK,UAAU,2GACb,WAAM,QAAA,EADT,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,GACEa,EAAM,kBAAoB,GAAK,YAC9B,OAAA,CAAK,UAAU,0IACb,SAAAA,EAAM,gBAAA,EADT,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAEDA,EAAM,aACLb,SAAC,KAAE,UAAU,2GACV,WAAM,aADT,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAEFA,SAAC,OAAA,CAAK,UAAU,8DAA+D,WAAM,MAAA,EAArF,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA4F,CAAA,CAAA,EAhB9F,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAiBA,CAAA,EAxBF,OAAA,GAAA,CAAA,SAAA,iDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CA2BJ"}
|
|
1
|
+
{"version":3,"file":"TopicsPage-CwYdVmyK.js","sources":["../../src/pages/topics/TopicsPage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n Radio,\n CheckSquare, GitBranch, AlertTriangle, Zap,\n BookOpen, Bot, AppWindow, Flag,\n} from 'lucide-react';\nimport { useTopics, type TopicCatalogEntry } from '../../api/topics';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../components/common/data/FilterBar';\nimport type { LucideIcon } from 'lucide-react';\n\n// ── Category meta ──────────────────────────────────────────────────────────────\n\nconst CATEGORY_ICONS: Record<string, LucideIcon> = {\n task: CheckSquare,\n workflow: GitBranch,\n escalation: AlertTriangle,\n activity: Zap,\n knowledge: BookOpen,\n agent: Bot,\n app: AppWindow,\n milestone: Flag,\n};\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function TopicsPage() {\n const navigate = useNavigate();\n const [search, setSearch] = useState('');\n const [activeCategory, setActiveCategory] = useState<string | null>(null);\n\n const { data, isLoading } = useTopics({ limit: 500 });\n const allTopics: TopicCatalogEntry[] = data?.topics ?? [];\n\n const categories = useMemo(() => {\n const seen = new Set<string>();\n for (const t of allTopics) seen.add(t.category);\n return Array.from(seen).sort();\n }, [allTopics]);\n\n const grouped = useMemo(() => {\n const q = search.toLowerCase().trim();\n const cats = activeCategory ? [activeCategory] : categories;\n return cats\n .map((cat) => ({\n name: cat,\n topics: allTopics.filter(\n (t) =>\n t.category === cat &&\n (!q || t.topic.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q)),\n ),\n }))\n .filter((g) => g.topics.length > 0);\n }, [allTopics, categories, search, activeCategory]);\n\n return (\n <div>\n <PageHeader title=\"Event Topics\" docsHash=\"#docs:topics.md\" />\n\n {/* Sticky filter bar: category select + search */}\n {!isLoading && categories.length > 0 && (\n <FilterBar>\n <FilterSelect\n label=\"Category\"\n value={activeCategory ?? ''}\n onChange={(v) => setActiveCategory(v || null)}\n options={categories.map((c) => ({ value: c, label: c }))}\n />\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder={`${allTopics.length} topics…`}\n />\n </FilterBar>\n )}\n\n {/* Topic list */}\n {isLoading ? (\n <div className=\"animate-pulse space-y-8 mt-4\">\n {[1, 2, 3].map((i) => (\n <div key={i}>\n <div className=\"h-4 bg-surface-sunken rounded w-28 mb-4\" />\n <div className=\"space-y-3\">\n {[1, 2, 3, 4].map((j) => (\n <div key={j} className=\"space-y-1.5\">\n <div className=\"h-3 bg-surface-sunken rounded w-64\" />\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n ) : grouped.length === 0 ? (\n <p className=\"text-sm text-text-tertiary mt-8\">\n {search || activeCategory ? 'No topics match your filter.' : 'No topics registered yet.'}\n </p>\n ) : (\n <div className=\"space-y-10\">\n {grouped.map(({ name, topics }) => {\n const Icon = CATEGORY_ICONS[name] ?? Radio;\n return (\n <div key={name}>\n <div className=\"sticky top-[60px] z-10 bg-surface flex items-center gap-2 py-2 mb-2 border-b border-surface-border\">\n <Icon className=\"w-3 h-3 text-accent\" strokeWidth={1.5} />\n <h2 className=\"section-h2 capitalize\">{name}</h2>\n <span className=\"text-xs text-text-quaternary\">{topics.length}</span>\n </div>\n <div className=\"divide-y divide-surface-border/30\">\n {topics.map((topic) => (\n <TopicRow\n key={topic.topic}\n topic={topic}\n onClick={() => navigate(`/topics/${encodeURIComponent(topic.topic)}`)}\n />\n ))}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// ── Topic row ──────────────────────────────────────────────────────────────────\n\nfunction TopicRow({ topic, onClick }: { topic: TopicCatalogEntry; onClick: () => void }) {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') onClick(); }}\n className=\"group py-2 px-3 -mx-3 rounded-md cursor-pointer transition-colors text-left\"\n >\n <div className=\"flex items-center gap-3\">\n <Radio className=\"w-3 h-3 shrink-0 text-text-quaternary group-hover:text-text-tertiary transition-colors\" strokeWidth={1.5} />\n <span className=\"text-xs font-mono text-text-primary truncate shrink-0 max-w-[24rem]\">{topic.topic}</span>\n <span className=\"inline-flex items-center px-1.5 py-0.5 rounded text-[10px] font-medium shrink-0 bg-accent/10 text-accent\">\n {topic.category}\n </span>\n {(topic.subscriber_count ?? 0) > 0 && (\n <span className=\"inline-flex items-center justify-center min-w-[18px] px-1 py-0.5 rounded-full text-[10px] font-medium bg-accent/15 text-accent shrink-0\">\n {topic.subscriber_count}\n </span>\n )}\n {topic.description && (\n <p className=\"flex-1 min-w-0 truncate text-[11px] text-text-tertiary group-hover:text-text-secondary transition-colors\">\n {topic.description}\n </p>\n )}\n <span className=\"ml-auto text-[10px] font-mono text-text-quaternary shrink-0\">{topic.source}</span>\n </div>\n </div>\n );\n}\n"],"names":["CATEGORY_ICONS","CheckSquare","GitBranch","AlertTriangle","Zap","BookOpen","Bot","AppWindow","Flag","TopicsPage","navigate","useNavigate","search","setSearch","useState","activeCategory","setActiveCategory","data","isLoading","useTopics","allTopics","categories","useMemo","seen","t","grouped","q","cat","_a","g","jsx","PageHeader","FilterBar","FilterSelect","v","c","FilterInput","i","j","jsxs","name","topics","Icon","Radio","topic","TopicRow","onClick","e"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{j as r}from"./vendor-query-B2UbickB.js";import{a as t}from"./users-B_LVbnUk.js";function m({userId:a,fallback:s}){const{data:e}=t(a);return e?r.jsx(r.Fragment,{children:e.display_name||e.email||e.external_id}):r.jsx(r.Fragment,{children:s??`${a.slice(0,8)}…`})}export{m as U};
|
|
2
|
+
//# sourceMappingURL=UserName-CRE7EZPU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserName-
|
|
1
|
+
{"version":3,"file":"UserName-CRE7EZPU.js","sources":["../../src/components/common/display/UserName.tsx"],"sourcesContent":["import { useUser } from '../../../api/users';\n\n/**\n * Resolves a user ID to their display name (or email, or truncated ID as fallback).\n * Renders inline — suitable for use inside <span>, <p>, etc.\n */\nexport function UserName({ userId, fallback }: { userId: string; fallback?: string }) {\n const { data: resolved } = useUser(userId);\n\n if (resolved) {\n return <>{resolved.display_name || resolved.email || resolved.external_id}</>;\n }\n\n // Still loading or no record — show fallback or truncated ID\n return <>{fallback ?? `${userId.slice(0, 8)}…`}</>;\n}\n"],"names":["UserName","userId","fallback","resolved","useUser","jsx","Fragment"],"mappings":"uFAMO,SAASA,EAAS,CAAE,OAAAC,EAAQ,SAAAC,GAAmD,CACpF,KAAM,CAAE,KAAMC,GAAaC,EAAQH,CAAM,EAEzC,OAAIE,oBACQ,SAAAA,EAAS,cAAgBA,EAAS,OAASA,EAAS,YAAY,EAIrEE,EAAAA,IAAAC,EAAAA,SAAA,CAAG,YAAY,GAAGL,EAAO,MAAM,EAAG,CAAC,CAAC,GAAA,CAAI,CACjD"}
|