@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
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./index-DgCS2Frb.js";import{P}from"./PageHeader-DcgGV0Y2.js";import{D as k}from"./DataTable-Bf4dgxll.js";import{F as D,b as N}from"./FilterBar-DEAbNQqp.js";import{S as w}from"./StickyPagination-Clm9H840.js";import{L as M}from"./ListToolbar-Dviaskni.js";import{b as E}from"./api-path-u2Jf9QXS.js";import{T as h}from"./TimestampCell-BPMCscic.js";import{E as Q}from"./ElapsedCell-roy4G5SQ.js";import{W as j}from"./WorkflowPill-Cc2MlYbB.js";import{E as V}from"./EmptyState-CLVm9KmA.js";import{R as c}from"./RowActions--m4F6GW8.js";import{u as _}from"./useFilterParams-Ch-a71bE.js";import{b as C}from"./useEventHooks-CUUeBSH1.js";import{u as $}from"./mcp-query-CSdQWxmv.js";import{c as f,v as W,w as g,x,y as S,z as q}from"./vendor-icons-CNyYGNsk.js";import{c as T}from"./vendor-react-zA2lQFDs.js";import"./vendor-query-DLp59M9_.js";const B={in_progress:"bg-status-active",completed:"bg-status-success",failed:"bg-status-error"};function m(a){return a.status==="completed"||Number(a.status)===0?"completed":a.is_live?"in_progress":"failed"}function F(a){return[{key:"workflow_id",label:"Workflow ID / Type",render:s=>{const t=m(s),r=B[t]??"bg-status-pending",l=t==="in_progress"?" animate-pulse":"";return e.jsxDEV("div",{className:"flex items-start gap-2 min-w-0",children:[e.jsxDEV("span",{className:`w-[9px] h-[9px] shrink-0 rounded-full dot-ring mt-1 ${r}${l}`,title:t},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:44,columnNumber:13},this),e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("span",{className:"font-mono text-xs text-text-primary truncate block",children:s.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:46,columnNumber:15},this),e.jsxDEV("div",{className:"mt-0.5",children:e.jsxDEV(j,{type:s.entity||"unknown"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:50,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:49,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:45,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:43,columnNumber:11},this)}},{key:"created_at",label:"Created",render:s=>e.jsxDEV(h,{date:s.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:60,columnNumber:24},this),className:"w-40",sortable:!0},{key:"updated_at",label:"Updated",render:s=>e.jsxDEV(h,{date:s.updated_at},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:67,columnNumber:24},this),className:"w-40",sortable:!0},{key:"duration",label:"Duration",render:s=>{const t=m(s);return e.jsxDEV(Q,{startDate:s.created_at,endDate:t==="in_progress"?null:s.updated_at,isLive:t==="in_progress"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:77,columnNumber:11},this)},className:"w-28"},{key:"actions",label:"",className:"w-28",render:s=>{const r=m(s)==="completed",l=s.entity==="mcpWorkflowBuilder";if(s.entity==="mcpWorkflowPlanner"){const i=s.set_id?`/mcp/queries/${s.workflow_id}?mode=plan&set_id=${s.set_id}`:`/mcp/queries/${s.workflow_id}?mode=plan`;return e.jsxDEV(c,{children:[e.jsxDEV("button",{onClick:p=>{p.stopPropagation(),a(`${i}&step=1`)},className:"opacity-0 group-hover/row:opacity-100 text-text-tertiary hover:text-accent transition-all",title:"Plan",children:e.jsxDEV(W,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:107,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:102,columnNumber:15},this),e.jsxDEV("button",{onClick:p=>{p.stopPropagation(),a(`${i}&step=2`)},className:`opacity-0 group-hover/row:opacity-100 transition-all ${r?"text-text-tertiary hover:text-status-success":"text-text-tertiary/30 cursor-not-allowed"}`,title:r?"Build":"Planning...",disabled:!r,children:e.jsxDEV(g,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:115,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:109,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:101,columnNumber:13},this)}return l?e.jsxDEV(c,{children:[e.jsxDEV("button",{onClick:i=>{i.stopPropagation(),a(`/mcp/queries/${s.workflow_id}?mode=builder&step=1`)},className:"opacity-0 group-hover/row:opacity-100 text-text-tertiary hover:text-accent transition-all",title:"Describe",children:e.jsxDEV(x,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:129,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:124,columnNumber:15},this),e.jsxDEV("button",{onClick:i=>{i.stopPropagation(),a(`/mcp/queries/${s.workflow_id}?mode=builder&step=2`)},className:`opacity-0 group-hover/row:opacity-100 transition-all ${r?"text-text-tertiary hover:text-status-success":"text-text-tertiary/30 cursor-not-allowed"}`,title:r?"Profile":"Building...",disabled:!r,children:e.jsxDEV(S,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:137,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:131,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:123,columnNumber:13},this):e.jsxDEV(c,{children:[e.jsxDEV("button",{onClick:i=>{i.stopPropagation(),a(`/mcp/queries/${s.workflow_id}?step=1`)},className:"opacity-0 group-hover/row:opacity-100 text-text-tertiary hover:text-accent transition-all",title:"Describe",children:e.jsxDEV(x,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:150,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:145,columnNumber:13},this),e.jsxDEV("button",{onClick:i=>{i.stopPropagation(),a(`/mcp/queries/${s.workflow_id}?step=2`)},className:"opacity-0 group-hover/row:opacity-100 text-text-tertiary hover:text-status-warning transition-all",title:"Discover",children:e.jsxDEV(q,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:157,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:152,columnNumber:13},this),e.jsxDEV("button",{onClick:i=>{i.stopPropagation(),a(`/mcp/queries/${s.workflow_id}?step=3`)},className:`opacity-0 group-hover/row:opacity-100 transition-all ${r?"text-text-tertiary hover:text-status-success":"text-text-tertiary/30 cursor-not-allowed"}`,title:r?"Compile":"Complete discovery first",disabled:!r,children:e.jsxDEV(g,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:165,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:159,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:144,columnNumber:11},this)}}]}function re(){const a=T(),s=F(a),{filters:t,setFilter:r,pagination:l,sort:u,setSort:i}=_({filters:{search:"",status:"",type:""},pageSize:20}),{data:p,isLoading:n,refetch:y}=$({limit:l.pageSize,offset:l.offset,search:t.search,status:t.status,entity:t.type||void 0});C();const d=(p==null?void 0:p.jobs)??[],b=(p==null?void 0:p.total)??0;return e.jsxDEV(e.Fragment,{children:[e.jsxDEV(P,{title:"MCP Tool Designer",docsHash:"#docs:dashboard.md:mcp-tool-designer",actions:e.jsxDEV("button",{onClick:()=>a("/mcp/queries/new"),className:"btn-primary text-xs inline-flex items-center gap-1.5",children:[e.jsxDEV(f,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:206,columnNumber:13},this),"Create New MCP Tool"]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:202,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:198,columnNumber:7},this),e.jsxDEV(D,{actions:e.jsxDEV(M,{onRefresh:()=>y(),apiPath:E("/workflow-states/jobs",{entity:t.type||"mcpQuery,mcpTriage,mcpWorkflowPlanner",limit:l.pageSize,offset:l.offset,sort_by:"created_at",order:"desc",status:t.status||void 0,search:t.search||void 0})},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:213,columnNumber:9},this),children:[e.jsxDEV(N,{label:"Type",value:t.type,onChange:o=>r("type",o),options:[{value:"mcpQuery",label:"Discovery"},{value:"mcpWorkflowPlanner",label:"Build"},{value:"mcpTriage",label:"Triage"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:226,columnNumber:11},this),e.jsxDEV(N,{label:"Status",value:t.status,onChange:o=>r("status",o),options:[{value:"completed",label:"Completed"},{value:"running",label:"Running"},{value:"failed",label:"Failed"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:236,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:212,columnNumber:7},this),e.jsxDEV(k,{columns:s,data:d,keyFn:o=>o.workflow_id,onRowClick:o=>{if(o.entity==="mcpWorkflowPlanner"){const v=o.set_id?`/mcp/queries/${o.workflow_id}?mode=plan&set_id=${o.set_id}`:`/mcp/queries/${o.workflow_id}?mode=plan`;a(v)}else o.entity==="mcpWorkflowBuilder"?a(`/mcp/queries/${o.workflow_id}?mode=builder`):a(`/mcp/queries/${o.workflow_id}`)},isLoading:n,emptyMessage:"",sort:u,onSort:i},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:248,columnNumber:7},this),!n&&d.length===0&&e.jsxDEV("div",{className:"cursor-pointer",onClick:()=>a("/mcp/queries/new"),children:e.jsxDEV(V,{icon:f,title:"No tool designs yet",description:"Click to create your first MCP tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:272,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:271,columnNumber:9},this),e.jsxDEV(w,{page:l.page,pageSize:l.pageSize,total:b,totalPages:l.totalPages(b),onPageChange:l.setPage},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:276,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpQueryPage.tsx",lineNumber:197,columnNumber:5},this)}export{re as McpQueryPage};
|
|
2
|
-
//# sourceMappingURL=McpQueryPage-C-8nIdBL.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as _,c as T,j as e,D as C,b as j,J as M,N as I}from"./index-DgCS2Frb.js";import{b as L,a as o}from"./vendor-query-DLp59M9_.js";import{b as J,c as K}from"./pipelines-DVkwxN64.js";import{S as U}from"./StatusBadge-mk-dJwPT.js";import{P as V}from"./PageHeader-DcgGV0Y2.js";import{C as $}from"./CopyableId-DS6IDMIX.js";import{C as f}from"./CollapsibleSection-Bn6Ks79X.js";import{u as A}from"./useCollapsedSections-CGNA5oKV.js";import{L as q}from"./ListToolbar-Dviaskni.js";import{S as B}from"./SwimlaneTimeline-C9X3IVqI.js";import{E as F}from"./EventTable-BaLNvCew.js";import{e as H,f as Q}from"./vendor-react-zA2lQFDs.js";import"./vendor-icons-CNyYGNsk.js";import"./StreamMessageDetail-Bikvs1Cz.js";import"./FilterBar-DEAbNQqp.js";const z={running:"in_progress",completed:"completed",failed:"failed"};function O({isRunning:t,onTerminate:m}){const[s,l]=o.useState(!1),a=o.useRef(null);return o.useEffect(()=>{if(!s)return;const n=i=>{a.current&&!a.current.contains(i.target)&&l(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[s]),t?e.jsxDEV("div",{className:"relative",ref:a,children:[e.jsxDEV("button",{onClick:()=>l(!s),className:"btn-primary text-xs",children:"Actions"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:51,columnNumber:7},this),s&&e.jsxDEV("div",{className:"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10",children:e.jsxDEV("button",{onClick:()=>{m(),l(!1)},className:"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover",children:"Terminate"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:56,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:55,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:50,columnNumber:5},this):null}function pe(){var E,P;const{jobId:t}=H(),[m]=Q(),s=m.get("namespace")||"",l=L(),{data:a,isLoading:n,error:i,refetch:g,isFetching:y}=J(t,s),w=K(),{data:d}=_(),{isCollapsed:b,toggle:N}=A("mcp-run-detail"),D=((E=d==null?void 0:d.telemetry)==null?void 0:E.traceUrl)??null,k=o.useCallback(u=>{!t||u.workflowId!==t||l.invalidateQueries({queryKey:["mcpRunExecution",t]})},[t,l]);if(T(`${I}.system.>`,k),n)return e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-64"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:93,columnNumber:9},this),e.jsxDEV("div",{className:"h-60 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:94,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:92,columnNumber:7},this);if(i||!a)return e.jsxDEV("div",{children:[e.jsxDEV(V,{title:"Pipeline Execution"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:102,columnNumber:9},this),e.jsxDEV("div",{className:"mt-4 text-center py-8",children:[e.jsxDEV("p",{className:"text-sm text-text-primary mb-1",children:(P=i==null?void 0:i.message)!=null&&P.includes("expired")?"Execution data is no longer available":"Unable to load execution"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:104,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:(i==null?void 0:i.message)??"The run could not be resolved."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:109,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:103,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:101,columnNumber:7},this);const{events:x,summary:r}=a,h=x.find(u=>{var R;return u.category==="activity"&&((R=u.attributes.kind)==null?void 0:R.includes("completed"))}),S=(h==null?void 0:h.attributes.result)??null,p=a.result,v=(p==null?void 0:p.data)??p??null;return e.jsxDEV("div",{children:[e.jsxDEV(V,{title:"Pipeline Execution",actions:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(q,{onRefresh:()=>g(),isFetching:y,apiPath:`/pipelines/${t}/execution?app_id=${s}`},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:136,columnNumber:13},this),e.jsxDEV(O,{isRunning:a.status==="running",onTerminate:()=>{confirm("Interrupt this pipeline execution? This cannot be undone.")&&w.mutate({jobId:a.workflow_id,topic:a.workflow_type,appId:s},{onSuccess:()=>g()})}},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:141,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:135,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:132,columnNumber:7},this),e.jsxDEV("div",{className:"bg-surface-sunken/50 rounded-md p-5 mb-8",children:[e.jsxDEV("div",{className:"flex items-center gap-4 mb-4",children:[e.jsxDEV("h2",{className:"text-sm font-mono text-text-primary truncate flex-1",children:a.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:160,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-4 shrink-0",children:[e.jsxDEV(c,{label:"Tools",value:r.activities.user},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:162,columnNumber:13},this),e.jsxDEV(c,{label:"System",value:r.activities.system,muted:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:163,columnNumber:13},this),r.child_workflows.total>0&&e.jsxDEV(c,{label:"Children",value:r.child_workflows.total},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:165,columnNumber:15},this),r.timers>0&&e.jsxDEV(c,{label:"Timers",value:r.timers},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:167,columnNumber:36},this),r.signals>0&&e.jsxDEV(c,{label:"Signals",value:r.signals},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:168,columnNumber:37},this),e.jsxDEV(U,{status:z[a.status]??a.status},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:169,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:161,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:159,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-6 gap-x-6",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Server"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:176,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary truncate",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:177,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:175,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:180,columnNumber:13},this),e.jsxDEV("p",{className:"text-xs font-mono text-text-primary truncate",children:a.workflow_type||"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:181,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:179,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Duration"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:184,columnNumber:13},this),e.jsxDEV(C,{ms:a.duration_ms,className:"font-mono text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:185,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:183,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Started"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:188,columnNumber:13},this),a.start_time?e.jsxDEV(j,{date:a.start_time,format:"datetime",className:"font-mono text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:190,columnNumber:17},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"--"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:191,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:187,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Completed"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:194,columnNumber:13},this),a.close_time?e.jsxDEV(j,{date:a.close_time,format:"datetime",className:"font-mono text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:196,columnNumber:17},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"--"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:197,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:193,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-0.5",children:"Trace"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:200,columnNumber:13},this),a.trace_id?e.jsxDEV($,{label:"",value:a.trace_id,href:D?D.replace("{traceId}",a.trace_id):void 0,external:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:202,columnNumber:15},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:209,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:199,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:174,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:157,columnNumber:7},this),e.jsxDEV("div",{className:"space-y-6",children:[e.jsxDEV(f,{title:"Details",sectionKey:"details",isCollapsed:b("details"),onToggle:N,children:e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[e.jsxDEV("div",{children:e.jsxDEV(M,{data:S??{},label:"Input"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:221,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:220,columnNumber:13},this),v!==null&&e.jsxDEV("div",{children:e.jsxDEV(M,{data:v,label:"Result"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:225,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:224,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:219,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:218,columnNumber:9},this),e.jsxDEV(f,{title:"Execution Timeline",sectionKey:"timeline",isCollapsed:b("timeline"),onToggle:N,children:e.jsxDEV(B,{events:x,outline:!0,jid:t,appId:s||"durable"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:233,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:232,columnNumber:9},this),e.jsxDEV(f,{title:"Events",sectionKey:"events",isCollapsed:b("events"),onToggle:N,children:e.jsxDEV(F,{events:x,jid:t,appId:s||"durable"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:238,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:237,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:216,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:131,columnNumber:5},this)}function c({label:t,value:m,muted:s}){return e.jsxDEV("div",{className:"flex items-center gap-1.5 text-xs",children:[e.jsxDEV("span",{className:"text-text-tertiary",children:t},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:250,columnNumber:7},this),e.jsxDEV("span",{className:`font-medium tabular-nums ${s?"text-text-tertiary":"text-text-primary"}`,children:m},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:251,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunDetailPage.tsx",lineNumber:249,columnNumber:5},this)}export{pe as McpRunDetailPage};
|
|
2
|
-
//# sourceMappingURL=McpRunDetailPage-CSq_0qqi.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as a,b as x}from"./index-DgCS2Frb.js";import{a as u}from"./vendor-query-DLp59M9_.js";import{a as k,u as S}from"./pipelines-DVkwxN64.js";import{a as w}from"./yaml-workflows-Bz7yEnhl.js";import{u as C}from"./useFilterParams-Ch-a71bE.js";import{u as F}from"./useNamespace-D-AjLnPK.js";import{b as T}from"./api-path-u2Jf9QXS.js";import{D as z}from"./DataTable-Bf4dgxll.js";import{W as $}from"./WorkflowPill-Cc2MlYbB.js";import{E as A}from"./ElapsedCell-roy4G5SQ.js";import{P as L}from"./PageHeader-DcgGV0Y2.js";import{F as U,b as g}from"./FilterBar-DEAbNQqp.js";import{S as W}from"./StickyPagination-Clm9H840.js";import{L as I}from"./ListToolbar-Dviaskni.js";import{R as O,a as B}from"./RowActions--m4F6GW8.js";import{u as H}from"./vendor-icons-CNyYGNsk.js";import{c as q}from"./vendor-react-zA2lQFDs.js";import"./controlplane-Djshb7fm.js";import"./EmptyState-CLVm9KmA.js";const G={running:"in_progress",completed:"completed",failed:"failed"},Y={in_progress:"bg-status-active",completed:"bg-status-success",failed:"bg-status-error"},J={running:"text-status-active",completed:"text-status-success",failed:"text-status-error"};function K(b,f){return[{key:"workflow_id",label:"Run ID",render:s=>{const t=Y[G[s.status]??s.status]??"bg-status-pending",r=s.status==="running"?" animate-pulse":"";return a.jsxDEV("div",{className:"flex items-center gap-2 min-w-0",children:[a.jsxDEV("span",{className:`w-1.5 h-1.5 shrink-0 rounded-full dot-ring ${t}${r}`,title:s.status},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:51,columnNumber:13},this),a.jsxDEV("span",{className:"font-mono text-xs text-text-primary truncate",children:s.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:52,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:50,columnNumber:11},this)}},{key:"entity",label:"Tool",render:s=>s.entity?a.jsxDEV($,{type:s.entity,variant:"pipeline",size:"xs"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:61,columnNumber:11},this):a.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:62,columnNumber:11},this),className:"w-44 shrink-0"},{key:"created_at",label:"Created",sortable:!0,render:s=>a.jsxDEV(x,{date:s.created_at,format:"relative",className:"text-xs text-text-secondary whitespace-nowrap"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:69,columnNumber:24},this),className:"w-32"},{key:"updated_at",label:"Updated",sortable:!0,render:s=>a.jsxDEV(x,{date:s.updated_at,format:"relative",className:"text-xs text-text-secondary whitespace-nowrap"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:76,columnNumber:24},this),className:"w-32"},{key:"duration",label:"Duration",render:s=>a.jsxDEV(A,{startDate:s.created_at,endDate:s.status==="running"?null:s.updated_at,isLive:s.status==="running"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:83,columnNumber:9},this),className:"w-28"},{key:"actions",label:"",render:s=>a.jsxDEV(O,{children:[a.jsxDEV(B,{icon:H,title:`Filter by ${s.entity}`,onClick:()=>b(s.entity)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:96,columnNumber:11},this),a.jsxDEV("button",{onClick:t=>{t.stopPropagation(),f(s.status)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity",title:`Filter by ${s.status}`,children:a.jsxDEV("svg",{className:`w-[18px] h-[18px] ${J[s.status]??"text-text-tertiary"} hover:opacity-70`,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,children:a.jsxDEV("circle",{cx:"12",cy:"12",r:"6"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:107,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:106,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:101,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:95,columnNumber:9},this),className:"w-24 text-right"}]}function ge(){const b=q(),{namespace:f,available:s}=F("namespace"),{filters:t,setFilter:r,setFilters:v,pagination:i,sort:m,setSort:y}=C({filters:{search:"",entity:"",status:"",namespace:""}}),[d,P]=u.useState(t.search);u.useEffect(()=>{if(d===t.search)return;const e=setTimeout(()=>r("search",d),300);return()=>clearTimeout(e)},[d,r,t.search]);const{data:l}=w(),h=u.useMemo(()=>{const e=new Set(s);for(const n of(l==null?void 0:l.app_ids)??[])e.add(n);return[...e].sort()},[s,l==null?void 0:l.app_ids]),o=t.namespace||f,{data:p}=k(o),{data:c,isLoading:R,refetch:M,isFetching:E}=S({app_id:o,limit:i.pageSize,offset:i.offset,entity:t.entity||void 0,search:t.search||void 0,status:t.status||void 0,sort_by:m.sort_by||"created_at",order:m.order||"desc"}),N=(c==null?void 0:c.total)??0,j=(c==null?void 0:c.jobs)??[],D=K(e=>r("entity",e),e=>r("status",e)),V=u.useMemo(()=>{const e=new Set(h);return o&&e.add(o),[...e].sort().map(n=>({value:n,label:n}))},[h,o]),_=u.useMemo(()=>{const e=new Set((p==null?void 0:p.entities)??[]);return t.entity&&!e.has(t.entity)&&e.add(t.entity),[...e].sort().map(n=>({value:n,label:n}))},[p==null?void 0:p.entities,t.entity]);return a.jsxDEV("div",{children:[a.jsxDEV(L,{title:"Pipeline Executions",docsHash:"#docs:dashboard.md:pipeline-executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:179,columnNumber:7},this),a.jsxDEV(U,{actions:a.jsxDEV(I,{onRefresh:()=>M(),isFetching:E,apiPath:T("/pipelines",{app_id:o,limit:i.pageSize,offset:i.offset,entity:t.entity||void 0,status:t.status||void 0,search:t.search||void 0,sort_by:m.sort_by||"created_at",order:m.order||"desc"})},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:182,columnNumber:9},this),children:[a.jsxDEV(g,{label:"Namespace",value:o,onChange:e=>{v({namespace:e,entity:""})},options:V,required:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:197,columnNumber:9},this),a.jsxDEV("input",{type:"text",placeholder:"Search run ID...",value:d,onChange:e=>P(e.target.value),className:"input text-[11px] py-1 px-2 w-56"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:206,columnNumber:9},this),a.jsxDEV(g,{label:"Tool",value:t.entity,onChange:e=>r("entity",e),options:_},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:213,columnNumber:9},this),a.jsxDEV(g,{label:"Status",value:t.status,onChange:e=>r("status",e),options:[{value:"running",label:"Running"},{value:"completed",label:"Completed"},{value:"failed",label:"Failed"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:219,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:181,columnNumber:7},this),a.jsxDEV(z,{columns:D,data:j,keyFn:e=>e.workflow_id,onRowClick:e=>b(`/mcp/executions/${encodeURIComponent(e.workflow_id)}?namespace=${o}`),isLoading:R,emptyMessage:"No pipeline executions found",sort:m,onSort:y},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:231,columnNumber:7},this),a.jsxDEV(W,{page:i.page,totalPages:i.totalPages(N),onPageChange:i.setPage,total:N,pageSize:i.pageSize,onPageSizeChange:i.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:242,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpRunsPage.tsx",lineNumber:178,columnNumber:5},this)}export{ge as McpRunsPage};
|
|
2
|
-
//# sourceMappingURL=McpRunsPage-BdK8ahX7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"McpRunsPage-BdK8ahX7.js","sources":["../../src/pages/mcp/McpRunsPage.tsx"],"sourcesContent":["import { useState, useEffect, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Filter } from 'lucide-react';\nimport { useMcpRuns, useMcpEntities } from '../../api/pipelines';\nimport { useYamlWorkflowAppIds } from '../../api/yaml-workflows';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { useNamespace } from '../../hooks/useNamespace';\nimport { buildApiPath } from '../../lib/api-path';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\nimport { ElapsedCell } from '../../components/common/display/ElapsedCell';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { RowAction, RowActionGroup } from '../../components/common/layout/RowActions';\nimport type { LTJob } from '../../api/types';\n\nconst statusMap: Record<string, string> = {\n running: 'in_progress',\n completed: 'completed',\n failed: 'failed',\n};\n\nconst STATUS_DOT: Record<string, string> = {\n in_progress: 'bg-status-active',\n completed: 'bg-status-success',\n failed: 'bg-status-error',\n};\n\nconst STATUS_COLORS: Record<string, string> = {\n running: 'text-status-active',\n completed: 'text-status-success',\n failed: 'text-status-error',\n};\n\nfunction buildColumns(\n onFilterEntity: (entity: string) => void,\n onFilterStatus: (status: string) => void,\n): Column<LTJob>[] {\n return [\n {\n key: 'workflow_id',\n label: 'Run ID',\n render: (row) => {\n const dotClass = STATUS_DOT[statusMap[row.status] ?? row.status] ?? 'bg-status-pending';\n const pulseClass = row.status === 'running' ? ' animate-pulse' : '';\n return (\n <div className=\"flex items-center gap-2 min-w-0\">\n <span className={`w-1.5 h-1.5 shrink-0 rounded-full dot-ring ${dotClass}${pulseClass}`} title={row.status} />\n <span className=\"font-mono text-xs text-text-primary truncate\">{row.workflow_id}</span>\n </div>\n );\n },\n },\n {\n key: 'entity',\n label: 'Tool',\n render: (row) => row.entity\n ? <WorkflowPill type={row.entity} variant=\"pipeline\" size=\"xs\" />\n : <span className=\"text-[10px] text-text-tertiary\">—</span>,\n className: 'w-44 shrink-0',\n },\n {\n key: 'created_at',\n label: 'Created',\n sortable: true,\n render: (row) => <DateValue date={row.created_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />,\n className: 'w-32',\n },\n {\n key: 'updated_at',\n label: 'Updated',\n sortable: true,\n render: (row) => <DateValue date={row.updated_at} format=\"relative\" className=\"text-xs text-text-secondary whitespace-nowrap\" />,\n className: 'w-32',\n },\n {\n key: 'duration',\n label: 'Duration',\n render: (row) => (\n <ElapsedCell\n startDate={row.created_at}\n endDate={row.status === 'running' ? null : row.updated_at}\n isLive={row.status === 'running'}\n />\n ),\n className: 'w-28',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => (\n <RowActionGroup>\n <RowAction\n icon={Filter}\n title={`Filter by ${row.entity}`}\n onClick={() => onFilterEntity(row.entity)}\n />\n <button\n onClick={(e) => { e.stopPropagation(); onFilterStatus(row.status); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity\"\n title={`Filter by ${row.status}`}\n >\n <svg className={`w-[18px] h-[18px] ${STATUS_COLORS[row.status] ?? 'text-text-tertiary'} hover:opacity-70`} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.5}>\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n </svg>\n </button>\n </RowActionGroup>\n ),\n className: 'w-24 text-right',\n },\n ];\n}\n\nexport function McpRunsPage() {\n const navigate = useNavigate();\n const { namespace: hookNamespace, available } = useNamespace('namespace');\n const { filters, setFilter, setFilters, pagination, sort, setSort } = useFilterParams({\n filters: { search: '', entity: '', status: '', namespace: '' },\n });\n\n const [searchInput, setSearchInput] = useState(filters.search);\n\n useEffect(() => {\n if (searchInput === filters.search) return;\n const timer = setTimeout(() => setFilter('search', searchInput), 300);\n return () => clearTimeout(timer);\n }, [searchInput, setFilter, filters.search]);\n\n const { data: appIdData } = useYamlWorkflowAppIds();\n\n // Merge real HotMesh namespaces (from controlplane/apps) with YAML workflow app_ids\n const allNamespaceNames = useMemo(() => {\n const set = new Set(available);\n for (const id of appIdData?.app_ids ?? []) {\n set.add(id);\n }\n return [...set].sort();\n }, [available, appIdData?.app_ids]);\n\n const activeNamespace = filters.namespace || hookNamespace;\n const { data: entitiesData } = useMcpEntities(activeNamespace);\n\n const { data: runsData, isLoading, refetch, isFetching } = useMcpRuns({\n app_id: activeNamespace,\n limit: pagination.pageSize,\n offset: pagination.offset,\n entity: filters.entity || undefined,\n search: filters.search || undefined,\n status: filters.status || undefined,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n });\n\n const total = runsData?.total ?? 0;\n const jobs = runsData?.jobs ?? [];\n\n const columns = buildColumns(\n (entity) => setFilter('entity', entity),\n (status) => setFilter('status', status),\n );\n\n const namespaces = useMemo(() => {\n const set = new Set(allNamespaceNames);\n if (activeNamespace) set.add(activeNamespace);\n return [...set].sort().map((id) => ({ value: id, label: id }));\n }, [allNamespaceNames, activeNamespace]);\n\n const entities = useMemo(() => {\n const known = new Set(entitiesData?.entities ?? []);\n if (filters.entity && !known.has(filters.entity)) known.add(filters.entity);\n return [...known].sort().map((e) => ({ value: e, label: e }));\n }, [entitiesData?.entities, filters.entity]);\n\n return (\n <div>\n <PageHeader title=\"Pipeline Executions\" docsHash=\"#docs:dashboard.md:pipeline-executions\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={buildApiPath('/pipelines', {\n app_id: activeNamespace,\n limit: pagination.pageSize,\n offset: pagination.offset,\n entity: filters.entity || undefined,\n status: filters.status || undefined,\n search: filters.search || undefined,\n sort_by: sort.sort_by || 'created_at',\n order: sort.order || 'desc',\n })}\n />\n }>\n <FilterSelect\n label=\"Namespace\"\n value={activeNamespace}\n onChange={(v) => {\n setFilters({ namespace: v, entity: '' });\n }}\n options={namespaces}\n required\n />\n <input\n type=\"text\"\n placeholder=\"Search run ID...\"\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n className=\"input text-[11px] py-1 px-2 w-56\"\n />\n <FilterSelect\n label=\"Tool\"\n value={filters.entity}\n onChange={(v) => setFilter('entity', v)}\n options={entities}\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'running', label: 'Running' },\n { value: 'completed', label: 'Completed' },\n { value: 'failed', label: 'Failed' },\n ]}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={jobs}\n keyFn={(row) => row.workflow_id}\n onRowClick={(row) => navigate(`/mcp/executions/${encodeURIComponent(row.workflow_id)}?namespace=${activeNamespace}`)}\n isLoading={isLoading}\n emptyMessage=\"No pipeline executions found\"\n sort={sort}\n onSort={setSort}\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":["statusMap","STATUS_DOT","STATUS_COLORS","buildColumns","onFilterEntity","onFilterStatus","row","dotClass","pulseClass","jsxDEV","WorkflowPill","DateValue","ElapsedCell","RowActionGroup","RowAction","Filter","e","McpRunsPage","navigate","useNavigate","hookNamespace","available","useNamespace","filters","setFilter","setFilters","pagination","sort","setSort","useFilterParams","searchInput","setSearchInput","useState","useEffect","timer","appIdData","useYamlWorkflowAppIds","allNamespaceNames","useMemo","set","id","activeNamespace","entitiesData","useMcpEntities","runsData","isLoading","refetch","isFetching","useMcpRuns","total","jobs","columns","entity","status","namespaces","entities","known","PageHeader","FilterBar","ListToolbar","buildApiPath","FilterSelect","v","DataTable","StickyPagination"],"mappings":"82BAmBA,MAAMA,EAAoC,CACxC,QAAS,cACT,UAAW,YACX,OAAQ,QACV,EAEMC,EAAqC,CACzC,YAAa,mBACb,UAAW,oBACX,OAAQ,iBACV,EAEMC,EAAwC,CAC5C,QAAS,qBACT,UAAW,sBACX,OAAQ,mBACV,EAEA,SAASC,EACPC,EACAC,EACiB,CACjB,MAAO,CACL,CACE,IAAK,cACL,MAAO,SACP,OAASC,GAAQ,CACf,MAAMC,EAAWN,EAAWD,EAAUM,EAAI,MAAM,GAAKA,EAAI,MAAM,GAAK,oBAC9DE,EAAaF,EAAI,SAAW,UAAY,iBAAmB,GACjE,OACEG,EAAAA,OAAC,MAAA,CAAI,UAAU,kCACb,SAAA,CAAAA,EAAAA,OAAC,OAAA,CAAK,UAAW,8CAA8CF,CAAQ,GAAGC,CAAU,GAAI,MAAOF,EAAI,MAAA,EAAnG,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA2G,EAC3GG,SAAC,OAAA,CAAK,UAAU,+CAAgD,WAAI,WAAA,EAApE,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAgF,CAAA,CAAA,EAFlF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,CAEJ,CAAA,EAEF,CACE,IAAK,SACL,MAAO,OACP,OAASH,GAAQA,EAAI,OACjBG,EAAAA,OAACC,EAAA,CAAa,KAAMJ,EAAI,OAAQ,QAAQ,WAAW,KAAK,IAAA,EAAxD,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6D,EAC7DG,SAAC,OAAA,CAAK,UAAU,iCAAiC,SAAA,KAAjD,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAkD,EACtD,UAAW,eAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,SAAU,GACV,OAASH,GAAQG,EAAAA,OAACE,EAAA,CAAU,KAAML,EAAI,WAAY,OAAO,WAAW,UAAU,+CAAA,EAA7D,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6G,EAC9H,UAAW,MAAA,EAEb,CACE,IAAK,aACL,MAAO,UACP,SAAU,GACV,OAASA,GAAQG,EAAAA,OAACE,EAAA,CAAU,KAAML,EAAI,WAAY,OAAO,WAAW,UAAU,+CAAA,EAA7D,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA6G,EAC9H,UAAW,MAAA,EAEb,CACE,IAAK,WACL,MAAO,WACP,OAASA,GACPG,EAAAA,OAACG,EAAA,CACC,UAAWN,EAAI,WACf,QAASA,EAAI,SAAW,UAAY,KAAOA,EAAI,WAC/C,OAAQA,EAAI,SAAW,SAAA,EAHzB,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EAMF,UAAW,MAAA,EAEb,CACE,IAAK,UACL,MAAO,GACP,OAASA,GACPG,EAAAA,OAACI,EAAA,CACC,SAAA,CAAAJ,EAAAA,OAACK,EAAA,CACC,KAAMC,EACN,MAAO,aAAaT,EAAI,MAAM,GAC9B,QAAS,IAAMF,EAAeE,EAAI,MAAM,CAAA,EAH1C,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAKAG,EAAAA,OAAC,SAAA,CACC,QAAUO,GAAM,CAAEA,EAAE,gBAAA,EAAmBX,EAAeC,EAAI,MAAM,CAAG,EACnE,UAAU,2DACV,MAAO,aAAaA,EAAI,MAAM,GAE9B,SAAAG,EAAAA,OAAC,MAAA,CAAI,UAAW,qBAAqBP,EAAcI,EAAI,MAAM,GAAK,oBAAoB,oBAAqB,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAa,IAC5K,SAAAG,EAAAA,OAAC,SAAA,CAAO,GAAG,KAAK,GAAG,KAAK,EAAE,GAAA,EAA1B,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8B,CAAA,EADhC,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAQA,CAAA,EAdF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAeA,EAEF,UAAW,iBAAA,CACb,CAEJ,CAEO,SAASQ,IAAc,CAC5B,MAAMC,EAAWC,EAAA,EACX,CAAE,UAAWC,EAAe,UAAAC,CAAA,EAAcC,EAAa,WAAW,EAClE,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAC,EAAY,WAAAC,EAAY,KAAAC,EAAM,QAAAC,CAAA,EAAYC,EAAgB,CACpF,QAAS,CAAE,OAAQ,GAAI,OAAQ,GAAI,OAAQ,GAAI,UAAW,EAAA,CAAG,CAC9D,EAEK,CAACC,EAAaC,CAAc,EAAIC,EAAAA,SAAST,EAAQ,MAAM,EAE7DU,EAAAA,UAAU,IAAM,CACd,GAAIH,IAAgBP,EAAQ,OAAQ,OACpC,MAAMW,EAAQ,WAAW,IAAMV,EAAU,SAAUM,CAAW,EAAG,GAAG,EACpE,MAAO,IAAM,aAAaI,CAAK,CACjC,EAAG,CAACJ,EAAaN,EAAWD,EAAQ,MAAM,CAAC,EAE3C,KAAM,CAAE,KAAMY,CAAA,EAAcC,EAAA,EAGtBC,EAAoBC,EAAAA,QAAQ,IAAM,CACtC,MAAMC,EAAM,IAAI,IAAIlB,CAAS,EAC7B,UAAWmB,KAAML,GAAA,YAAAA,EAAW,UAAW,CAAA,EACrCI,EAAI,IAAIC,CAAE,EAEZ,MAAO,CAAC,GAAGD,CAAG,EAAE,KAAA,CAClB,EAAG,CAAClB,EAAWc,GAAA,YAAAA,EAAW,OAAO,CAAC,EAE5BM,EAAkBlB,EAAQ,WAAaH,EACvC,CAAE,KAAMsB,GAAiBC,EAAeF,CAAe,EAEvD,CAAE,KAAMG,EAAU,UAAAC,EAAW,QAAAC,EAAS,WAAAC,CAAA,EAAeC,EAAW,CACpE,OAAQP,EACR,MAAOf,EAAW,SAClB,OAAQA,EAAW,OACnB,OAAQH,EAAQ,QAAU,OAC1B,OAAQA,EAAQ,QAAU,OAC1B,OAAQA,EAAQ,QAAU,OAC1B,QAASI,EAAK,SAAW,aACzB,MAAOA,EAAK,OAAS,MAAA,CACtB,EAEKsB,GAAQL,GAAA,YAAAA,EAAU,QAAS,EAC3BM,GAAON,GAAA,YAAAA,EAAU,OAAQ,CAAA,EAEzBO,EAAUhD,EACbiD,GAAW5B,EAAU,SAAU4B,CAAM,EACrCC,GAAW7B,EAAU,SAAU6B,CAAM,CAAA,EAGlCC,EAAahB,EAAAA,QAAQ,IAAM,CAC/B,MAAMC,EAAM,IAAI,IAAIF,CAAiB,EACrC,OAAII,GAAiBF,EAAI,IAAIE,CAAe,EACrC,CAAC,GAAGF,CAAG,EAAE,OAAO,IAAKC,IAAQ,CAAE,MAAOA,EAAI,MAAOA,GAAK,CAC/D,EAAG,CAACH,EAAmBI,CAAe,CAAC,EAEjCc,EAAWjB,EAAAA,QAAQ,IAAM,CAC7B,MAAMkB,EAAQ,IAAI,KAAId,GAAA,YAAAA,EAAc,WAAY,CAAA,CAAE,EAClD,OAAInB,EAAQ,QAAU,CAACiC,EAAM,IAAIjC,EAAQ,MAAM,GAAGiC,EAAM,IAAIjC,EAAQ,MAAM,EACnE,CAAC,GAAGiC,CAAK,EAAE,OAAO,IAAKxC,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAC9D,EAAG,CAAC0B,GAAA,YAAAA,EAAc,SAAUnB,EAAQ,MAAM,CAAC,EAE3C,gBACG,MAAA,CACC,SAAA,CAAAd,SAACgD,EAAA,CAAW,MAAM,sBAAsB,SAAS,wCAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA0F,EAE1FhD,SAACiD,GAAU,QACTjD,EAAAA,OAACkD,EAAA,CACC,UAAW,IAAMb,EAAA,EACjB,WAAAC,EACA,QAASa,EAAa,aAAc,CAClC,OAAQnB,EACR,MAAOf,EAAW,SAClB,OAAQA,EAAW,OACnB,OAAQH,EAAQ,QAAU,OAC1B,OAAQA,EAAQ,QAAU,OAC1B,OAAQA,EAAQ,QAAU,OAC1B,QAASI,EAAK,SAAW,aACzB,MAAOA,EAAK,OAAS,MAAA,CACtB,CAAA,EAZH,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAeA,SAAA,CAAAlB,EAAAA,OAACoD,EAAA,CACC,MAAM,YACN,MAAOpB,EACP,SAAWqB,GAAM,CACfrC,EAAW,CAAE,UAAWqC,EAAG,OAAQ,GAAI,CACzC,EACA,QAASR,EACT,SAAQ,EAAA,EAPV,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EASA7C,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,YAAY,mBACZ,MAAOqB,EACP,SAAW,GAAMC,EAAe,EAAE,OAAO,KAAK,EAC9C,UAAU,kCAAA,EALZ,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAOAtB,EAAAA,OAACoD,EAAA,CACC,MAAM,OACN,MAAOtC,EAAQ,OACf,SAAWuC,GAAMtC,EAAU,SAAUsC,CAAC,EACtC,QAASP,CAAA,EAJX,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMA9C,EAAAA,OAACoD,EAAA,CACC,MAAM,SACN,MAAOtC,EAAQ,OACf,SAAWuC,GAAMtC,EAAU,SAAUsC,CAAC,EACtC,QAAS,CACP,CAAE,MAAO,UAAW,MAAO,SAAA,EAC3B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,SAAU,MAAO,QAAA,CAAS,CACrC,EARF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CASA,CAAA,EA/CF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAgDA,EAEArD,EAAAA,OAACsD,EAAA,CACC,QAAAZ,EACA,KAAMD,EACN,MAAQ5C,GAAQA,EAAI,YACpB,WAAaA,GAAQY,EAAS,mBAAmB,mBAAmBZ,EAAI,WAAW,CAAC,cAAcmC,CAAe,EAAE,EACnH,UAAAI,EACA,aAAa,+BACb,KAAAlB,EACA,OAAQC,CAAA,EARV,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAWAnB,EAAAA,OAACuD,EAAA,CACC,KAAMtC,EAAW,KACjB,WAAYA,EAAW,WAAWuB,CAAK,EACvC,aAAcvB,EAAW,QACzB,MAAAuB,EACA,SAAUvB,EAAW,SACrB,iBAAkBA,EAAW,WAAA,EAN/B,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAOA,CAAA,EAvEF,OAAA,GAAA,CAAA,SAAA,+CAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAwEA,CAEJ"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./index-DgCS2Frb.js";import{a as n}from"./vendor-query-DLp59M9_.js";import{a as d}from"./vendor-react-zA2lQFDs.js";function x({open:r,onClose:o,title:m,children:t,maxWidth:s}){return n.useEffect(()=>{if(!r)return;const a=l=>{l.key==="Escape"&&o()};return document.addEventListener("keydown",a),()=>document.removeEventListener("keydown",a)},[r,o]),r?d.createPortal(e.jsxDEV("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[e.jsxDEV("div",{className:"absolute inset-0 bg-text-primary/30",onClick:o},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/Modal.tsx",lineNumber:27,columnNumber:7},this),e.jsxDEV("div",{className:`relative bg-surface-raised border border-surface-border rounded-lg shadow-xl w-full ${s??"max-w-md"} mx-4 max-h-[85vh] flex flex-col`,children:[e.jsxDEV("div",{className:"flex items-center justify-between px-6 py-4 border-b shrink-0",children:[e.jsxDEV("h2",{className:"text-sm font-medium text-text-primary",children:m},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/Modal.tsx",lineNumber:34,columnNumber:11},this),e.jsxDEV("button",{onClick:o,className:"text-text-tertiary hover:text-text-primary text-lg leading-none",children:"×"},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/Modal.tsx",lineNumber:35,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/Modal.tsx",lineNumber:33,columnNumber:9},this),e.jsxDEV("div",{className:"px-6 py-5 overflow-y-auto",children:t},void 0,!1,{fileName:"/app/dashboard/src/components/common/modal/Modal.tsx",lineNumber:42,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/Modal.tsx",lineNumber:32,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/modal/Modal.tsx",lineNumber:25,columnNumber:5},this),document.body):null}export{x as M};
|
|
2
|
-
//# sourceMappingURL=Modal-C6HI6btY.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as s}from"./index-DgCS2Frb.js";import{w as n}from"./vendor-icons-CNyYGNsk.js";function i({namespace:t,size:e="sm"}){const a=e==="md"?"px-2 py-0.5 text-[12px] gap-1.5":"px-1.5 py-px text-[11px] gap-1",m=e==="md"?"w-2.5 h-2.5":"w-2 h-2";return s.jsxDEV("span",{className:`inline-flex items-center ${a} font-mono text-text-tertiary bg-surface-sunken/50 rounded-md`,children:[s.jsxDEV(n,{className:`${m} shrink-0 text-text-quaternary`,strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/NamespacePill.tsx",lineNumber:20,columnNumber:7},this),t]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/NamespacePill.tsx",lineNumber:19,columnNumber:5},this)}export{i as N};
|
|
2
|
-
//# sourceMappingURL=NamespacePill-eGsbJBFa.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e,L as Ne}from"./index-DgCS2Frb.js";import{a as j}from"./vendor-query-DLp59M9_.js";import{b as ke}from"./roles-CpRcUIMm.js";import{i as $e}from"./useEventHooks-CUUeBSH1.js";import{P as Ce}from"./PageHeader-DcgGV0Y2.js";import{X as Oe,ae as le,at as we,ar as Re}from"./vendor-icons-CNyYGNsk.js";import{L as U,f as _e,c as Me}from"./vendor-react-zA2lQFDs.js";const fe=800,ge=270,A=40,Le=76,pe=24,qe=72,oe=fe-A-Le,ve=ge-pe-qe,E=pe+ve,xe=A+oe,g="0.5s cubic-bezier(0.4, 0, 0.2, 1)",he=9;function De(a){return`M ${(a.x-he).toFixed(1)} ${a.y.toFixed(1)} L ${(a.x+he).toFixed(1)} ${a.y.toFixed(1)}`}function Fe(a){return a.length===0?"":a.length===1?De(a[0]):a.map((s,o)=>`${o===0?"M":"L"} ${s.x.toFixed(1)} ${s.y.toFixed(1)}`).join(" ")}function Q(a){if(a.length===0)return"";if(a.length===1)return De(a[0]);const s=[];for(let o=0;o<a.length-1;o++){const l=a[Math.max(0,o-1)],p=a[o],m=a[o+1],r=a[Math.min(a.length-1,o+2)],d=(p.x+(m.x-l.x)/6).toFixed(1),u=(p.y+(m.y-l.y)/6).toFixed(1),n=(m.x-(r.x-p.x)/6).toFixed(1),c=(m.y-(r.y-p.y)/6).toFixed(1);o===0&&s.push(`M ${p.x.toFixed(1)} ${p.y.toFixed(1)}`),s.push(`C ${d} ${u}, ${n} ${c}, ${m.x.toFixed(1)} ${m.y.toFixed(1)}`)}return s.join(" ")}function Ae(a,s){if(a.length<2||s.length<2)return"";const o=Q(a),l=[...s].reverse(),p=Q(l),m=p.slice(p.indexOf("C"));return`${o} L ${l[0].x.toFixed(1)} ${l[0].y.toFixed(1)} ${m} Z`}function We(a){return a>=1e4?`${Math.round(a/1e3)}k`:a>=1e3?`${(a/1e3).toFixed(1)}k`:String(a)}function se(a){return a.length>0?a[a.length-1]:void 0}const M="#6366f1",W="#0ea5e9",R="#1E3A8A",X="#059669",ye="#b0e0e6",L="#5b93ad",Ie=13;function Te(a,s){const o=[...a].sort((r,d)=>r.y-d.y);let l=-1/0;const p=o.map(r=>{const d=Math.max(r.y+3,l+Ie);return l=d,{...r,labelY:d}}),m=p.length>0?p[p.length-1].labelY-s:0;if(m>0)for(const r of p)r.labelY-=m;return p}function Be({stations:a,selectedRole:s,onSelect:o,onUpstreamSelect:l,onPrioritySelect:p,periodHours:m}){const[r,d]=j.useState(null),u=a.length;if(u===0)return null;const n=t=>u===1?A+oe/2:A+t/(u-1)*oe,c=new Map(a.map((t,x)=>[t.role,n(x)])),N=a.map((t,x)=>{var k,H,Y,G;const b=t.target_per_hour??null,C=b!=null?b*m:null;return{idx:x,x:n(x),expected:C,actual:((k=t.metric)==null?void 0:k.resolved)??0,active:((H=t.metric)==null?void 0:H.claimed)??0,pending:((Y=t.metric)==null?void 0:Y.pending)??0,priorityCount:((G=t.metric)==null?void 0:G.priority_count)??0}}),v=N.some(t=>t.expected!=null),D=Math.max(1,...N.map(t=>t.expected??0),...N.map(t=>t.actual),...N.map(t=>t.expected!=null?t.pending:0))*1.15,$=t=>pe+ve*(1-Math.max(0,Math.min(t,D))/D),y=N.filter(t=>t.expected!=null),O=y.map(t=>({...t,y:$(t.expected)})),V=y.map(t=>({...t,y:$(t.actual)})),S=y.map(t=>({...t,y:$(t.active)})),P=y.map(t=>({...t,y:$(t.pending)})),I=Fe(O),T=Q(V),B=Q(S),Z=Q(P),_=se(V),K=se(O),q=se(S),J=se(P),ee=V.length>=2&&_?`${T} L ${_.x.toFixed(1)} ${E} L ${V[0].x.toFixed(1)} ${E} Z`:"",F=y.some(t=>t.pending>0||t.active>0),ae=F&&S.length>=2&&q?`${B} L ${q.x.toFixed(1)} ${E} L ${S[0].x.toFixed(1)} ${E} Z`:"",z=F?Ae(P,S):"",i=y.some(t=>t.active>0),h=y.some(t=>t.pending>t.active),w=Te([K?{key:"target",text:"Target",color:X,y:K.y}:null,_?{key:"actual",text:"Resolved",color:R,y:_.y}:null,i&&q?{key:"active",text:"Claimed",color:M,y:q.y}:null,h&&J?{key:"queued",text:"Pending",color:W,y:J.y}:null].filter(Boolean),E+4);return e.jsxDEV("svg",{viewBox:`0 0 ${fe} ${ge}`,className:"w-full h-full",preserveAspectRatio:"xMidYMid meet",style:{display:"block"},children:[a.map(t=>{if(!t.parent_role)return null;const x=c.get(t.parent_role);if(x==null)return null;const b=n(a.findIndex(C=>C.role===t.role));return e.jsxDEV("line",{x1:x,y1:E,x2:b,y2:E,stroke:"#e2e8f0",strokeWidth:.75},`dep-${t.role}`,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:239,columnNumber:16},this)}),ee&&e.jsxDEV("path",{d:ee,fill:R,opacity:.05,style:{transition:`d ${g}`}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:243,columnNumber:20},this),ae&&e.jsxDEV("path",{d:ae,fill:M,opacity:.12,style:{transition:`d ${g}`}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:249,columnNumber:9},this),z&&e.jsxDEV("path",{d:z,fill:W,opacity:.12,style:{transition:`d ${g}`}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:252,columnNumber:9},this),I&&e.jsxDEV("path",{d:I,fill:"none",stroke:X,strokeWidth:.5,strokeLinejoin:"round",opacity:.9,style:{transition:`d ${g}`}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:257,columnNumber:9},this),O.map(t=>e.jsxDEV("text",{x:t.x,y:t.y-3.5,textAnchor:"middle",fontSize:6.5,fill:X,fontFamily:"ui-monospace, monospace",fontWeight:"500",opacity:.7,style:{transition:`y ${g}`},children:Math.round(t.expected)},`tval-${t.idx}`,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:262,columnNumber:9},this)),F&&Z&&e.jsxDEV("path",{d:Z,fill:"none",stroke:W,strokeWidth:.75,strokeDasharray:"2 3",strokeLinecap:"round",opacity:.55,style:{transition:`d ${g}`}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:280,columnNumber:9},this),B&&e.jsxDEV("path",{d:B,fill:"none",stroke:M,strokeWidth:.75,strokeDasharray:"2 3",strokeLinecap:"round",opacity:.5,style:{transition:`d ${g}`}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:285,columnNumber:9},this),T&&e.jsxDEV("path",{d:T,fill:"none",stroke:R,strokeWidth:.6,strokeLinejoin:"round",strokeLinecap:"round",opacity:.65,style:{transition:`d ${g}`}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:290,columnNumber:9},this),S.map((t,x)=>{if(t.pending<=0&&t.active<=0)return null;const b=Math.max(2.5,Math.min(5,2.5+t.active/10)),C=t.pending>t.active,k=Math.min(P[x].y-4,t.y-b-4);return e.jsxDEV("g",{children:[t.pending>0&&e.jsxDEV("text",{x:t.x,y:k,textAnchor:"middle",fontSize:7.5,fill:C?W:"#64748b",fontFamily:"ui-monospace, monospace",fontWeight:"600",style:{transition:`y ${g}`},children:t.pending},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:307,columnNumber:15},this),e.jsxDEV("g",{transform:`translate(${t.x} ${t.y})`,style:{transition:`transform ${g}`},children:[e.jsxDEV("circle",{r:b,fill:M,opacity:.85},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:321,columnNumber:15},this),t.active>0&&e.jsxDEV("text",{y:b+9,textAnchor:"middle",fontSize:7.5,fill:M,fontFamily:"ui-monospace, monospace",fontWeight:"600",children:t.active},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:323,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:320,columnNumber:13},this)]},`active-${t.idx}`,!0,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:305,columnNumber:11},this)}),N.map(t=>{var ue;const x=a[t.idx],b=t.x,C=t.expected!=null?$(t.actual):E,k=Math.max(2.25,Math.min(4,2.25+t.actual/160)),H=x.role===s,Y=r===t.idx,G=t.expected==null?"idle · set a target rate to plot pace":`${t.actual} resolved · target ${Math.round(t.expected)}`+(t.pending>t.active?` · ${t.pending-t.active} pending`:"")+(t.active>0?` · ${t.active} claimed`:"")+(t.priorityCount>0?` · ${t.priorityCount} priority`:""),te=G.length*5.5+20,de=Math.max(A+te/2+4,Math.min(xe-te/2-4,b)),me=C-k-10;return e.jsxDEV("g",{onClick:()=>o(x.role),onMouseEnter:()=>d(t.idx),onMouseLeave:()=>d(null),style:{cursor:"pointer"},children:[e.jsxDEV("g",{transform:`translate(${b} ${C})`,style:{transition:`transform ${g}`},children:[e.jsxDEV("circle",{r:22,fill:"transparent"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:365,columnNumber:15},this),e.jsxDEV("circle",{r:k,fill:R,opacity:.9,style:{transition:`r ${g}`}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:366,columnNumber:15},this),t.expected!=null&&e.jsxDEV("text",{y:-k-5,textAnchor:"middle",fontSize:9.5,fill:R,fontFamily:"ui-monospace, monospace",fontWeight:"500",children:We(t.actual)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:368,columnNumber:17},this),Y&&!H&&e.jsxDEV("circle",{r:k+3,fill:"none",stroke:R,strokeWidth:1,opacity:.4},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:372,columnNumber:44},this),H&&e.jsxDEV("circle",{r:k+4,fill:"none",stroke:"#6366f1",strokeWidth:2},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:373,columnNumber:30},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:364,columnNumber:13},this),t.priorityCount>0&&e.jsxDEV("g",{transform:`translate(${b+15} ${Math.max(C-15,12)})`,onClick:ne=>{ne.stopPropagation(),p==null||p(x.role)},style:{cursor:"pointer",transition:`transform ${g}`},children:[e.jsxDEV("title",{children:`${t.priorityCount} past the priority threshold — click to pull oldest first`},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:389,columnNumber:17},this),e.jsxDEV("circle",{r:6.5+(String(t.priorityCount).length-1)*2,fill:ye,opacity:.9},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:390,columnNumber:17},this),e.jsxDEV("text",{y:2.5,textAnchor:"middle",fontSize:7,fill:L,fontFamily:"ui-monospace, monospace",fontWeight:"700",children:t.priorityCount},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:395,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:381,columnNumber:15},this),(((ue=x.upstream_roles)==null?void 0:ue.length)??0)>0&&e.jsxDEV("g",{transform:`translate(${b-20} ${E})`,onClick:ne=>{ne.stopPropagation(),l==null||l(x.upstream_roles[0])},style:{cursor:"pointer"},children:[e.jsxDEV("title",{children:`Fed by ${x.upstream_roles.join(", ")} — click to view that sequence`},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:421,columnNumber:17},this),e.jsxDEV("circle",{r:9,cy:-6,fill:"transparent"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:422,columnNumber:17},this),e.jsxDEV("path",{d:"M -7 -14 C -3 -14 -1 -9 0 -2",fill:"none",stroke:"#94a3b8",strokeWidth:1,strokeDasharray:"2 2",strokeLinecap:"round"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:423,columnNumber:17},this),e.jsxDEV("path",{d:"M 0 -2 L 8 -2",stroke:"#94a3b8",strokeWidth:1,strokeLinecap:"round"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:424,columnNumber:17},this),e.jsxDEV("path",{d:"M 8 -2 l -3.5 -2 v 4 z",fill:"#94a3b8"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:425,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:413,columnNumber:15},this),e.jsxDEV("text",{x:b,y:E+14,textAnchor:"middle",fontSize:9.5,fill:"#475569",fontFamily:"ui-sans-serif, sans-serif",fontWeight:"500",children:x.title??x.role},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:430,columnNumber:13},this),e.jsxDEV("text",{x:b,y:E+26,textAnchor:"middle",fontSize:8,fill:"#94a3b8",fontFamily:"ui-monospace, monospace",children:x.role},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:433,columnNumber:13},this),Y&&e.jsxDEV("g",{children:[e.jsxDEV("rect",{x:de-te/2,y:me-16,width:te,height:19,rx:3,fill:"#0f172a",opacity:.88},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:440,columnNumber:17},this),e.jsxDEV("text",{x:de,y:me-3,textAnchor:"middle",fontSize:8.5,fill:"white",fontFamily:"ui-monospace, monospace",children:G},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:441,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:439,columnNumber:15},this)]},x.role,!0,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:356,columnNumber:11},this)}),!v&&e.jsxDEV("text",{x:A+oe/2,y:E+48,textAnchor:"middle",fontSize:8.5,fill:"#94a3b8",fontFamily:"ui-sans-serif, sans-serif",children:"Set target_per_hour on each role in Admin → Roles to enable the pace chart"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:452,columnNumber:9},this),w.map(t=>e.jsxDEV("text",{x:xe+6,y:t.labelY,fontSize:8,fill:t.color,fontFamily:"ui-sans-serif, sans-serif",fontWeight:t.key==="actual"?700:500,opacity:t.key==="active"?.85:1,style:{transition:`y ${g}`},children:t.text},t.key,!1,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:459,columnNumber:9},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/PaceChart.tsx",lineNumber:232,columnNumber:5},this)}function ce(a){const s=`/escalations/available?role=${encodeURIComponent(a.role)}`;if(a.priority_facet){const o=JSON.stringify([{field:`metadata.${a.priority_facet}`,direction:"asc"}]);return`${s}&orderBy=${encodeURIComponent(o)}`}return`${s}&sort_by=created_at&order=asc`}const Pe=["15m","1h","24h","7d","30d"],ze=a=>Pe.includes(a);function re(a){if(a==null)return"—";if(a<1){const s=Math.round(a*60);return s<=0?"< 1s":`${s}s`}return a<60?`${a.toFixed(0)}m`:`${(a/60).toFixed(1)}h`}function ie({label:a,value:s}){return e.jsxDEV("div",{className:"flex items-center justify-between py-1",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary uppercase tracking-wider",children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:38,columnNumber:7},this),e.jsxDEV("span",{className:"text-xs font-mono font-medium text-text-primary tabular-nums",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:39,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:37,columnNumber:5},this)}function He({period:a,onChange:s}){return e.jsxDEV("div",{className:"flex items-center gap-1 mb-4",children:Pe.map(o=>e.jsxDEV("button",{onClick:()=>s(o),className:`px-2 py-0.5 text-[10px] font-mono rounded transition-colors ${a===o?"bg-accent/10 text-accent font-semibold":"text-text-quaternary hover:text-text-secondary"}`,children:o},o,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:48,columnNumber:9},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:46,columnNumber:5},this)}function Ye({role:a,globalPeriod:s,onClose:o}){const[l,p]=j.useState(ze(s)?s:"24h"),{data:m}=Ne(l),r=m==null?void 0:m.stations.find(c=>c.role===a.role),d=a.sla_minutes??void 0,u=a.target_per_hour??void 0,n=a.worker_count??void 0;return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex items-start justify-between mb-1",children:[e.jsxDEV("div",{className:"min-w-0 flex-1",children:[e.jsxDEV("div",{className:"flex items-baseline gap-1.5 flex-wrap",children:[e.jsxDEV("span",{className:"text-sm font-mono font-bold text-text-primary",children:a.role},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:80,columnNumber:13},this),a.title&&e.jsxDEV("span",{className:"text-[10px] text-text-secondary",children:a.title},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:82,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:79,columnNumber:11},this),a.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 line-clamp-2 leading-relaxed",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:86,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:78,columnNumber:9},this),e.jsxDEV("button",{onClick:o,className:"text-text-quaternary hover:text-text-secondary transition-colors mt-0.5 shrink-0 ml-2",children:e.jsxDEV(Oe,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:95,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:91,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:77,columnNumber:7},this),e.jsxDEV(U,{to:`/admin/roles/${encodeURIComponent(a.role)}`,className:"flex items-center gap-1 text-[10px] text-accent hover:underline mb-4",children:[e.jsxDEV(le,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:103,columnNumber:9},this),"Edit in Roles"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:99,columnNumber:7},this),e.jsxDEV(He,{period:l,onChange:p},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:107,columnNumber:7},this),(u||d||n)&&e.jsxDEV("div",{className:"flex items-center gap-4 mb-4 text-[10px]",children:[u&&e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"font-mono font-semibold text-text-primary",children:[u,"/h"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:114,columnNumber:15},this),e.jsxDEV("div",{className:"text-text-quaternary uppercase tracking-wider text-[8.5px]",children:"target"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:115,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:113,columnNumber:13},this),d&&e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"font-mono font-semibold text-text-primary",children:[d,"m"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:120,columnNumber:15},this),e.jsxDEV("div",{className:"text-text-quaternary uppercase tracking-wider text-[8.5px]",children:"SLA"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:121,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:119,columnNumber:13},this),n&&e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"font-mono font-semibold text-text-primary",children:n},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:126,columnNumber:15},this),e.jsxDEV("div",{className:"text-text-quaternary uppercase tracking-wider text-[8.5px]",children:"workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:127,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:125,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:111,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-2 gap-x-3",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] text-text-quaternary uppercase tracking-wider mb-1.5",children:"Wait (queue)"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:136,columnNumber:11},this),e.jsxDEV(ie,{label:"P99",value:re((r==null?void 0:r.wait.p99)??null)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:137,columnNumber:11},this),e.jsxDEV(ie,{label:"avg",value:re((r==null?void 0:r.wait.avg)??null)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:138,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:135,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] text-text-quaternary uppercase tracking-wider mb-1.5",children:"Work (proc.)"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:141,columnNumber:11},this),e.jsxDEV(ie,{label:"P99",value:re((r==null?void 0:r.work.p99)??null)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:142,columnNumber:11},this),e.jsxDEV(ie,{label:"avg",value:re((r==null?void 0:r.work.avg)??null)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:143,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:140,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:134,columnNumber:7},this),e.jsxDEV("div",{className:"border-t border-surface-border/40 pt-2 mt-3 space-y-1.5",children:[d&&e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:"SLA target"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:151,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs font-mono text-text-secondary",children:[d,"m"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:152,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:150,columnNumber:11},this),r&&r.priority_count>0&&e.jsxDEV(U,{to:ce(a),className:"flex items-center justify-between group",children:[e.jsxDEV("span",{className:"text-[10px]",style:{color:L},children:[r.priority_count," priority — pull oldest first"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:160,columnNumber:13},this),e.jsxDEV(le,{className:"w-3 h-3 transition-colors",style:{color:L}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:163,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:156,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:148,columnNumber:7},this),e.jsxDEV("div",{className:"mt-4 border-t border-surface-border/40 pt-3",children:e.jsxDEV(U,{to:`/escalations/available?role=${encodeURIComponent(a.role)}`,className:"flex items-center gap-1.5 text-[10px] text-accent hover:underline",children:["View full queue",e.jsxDEV(le,{className:"w-2.5 h-2.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:177,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:172,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:171,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:75,columnNumber:5},this)}function Ge({allMetrics:a,orderedRoles:s,period:o}){const l=a.reduce((n,c)=>n+c.pending,0),p=a.reduce((n,c)=>n+c.resolved,0),m=a.reduce((n,c)=>n+c.priority_count,0),r=new Map(a.map(n=>[n.role,n])),d=a.filter(n=>n.priority_count>0).length,u=a.filter(n=>n.pending>0).length;return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:"text-[9px] text-text-quaternary uppercase tracking-wider mb-3",children:["Pipeline · ",o]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:203,columnNumber:7},this),e.jsxDEV("div",{className:"mb-4",children:d>0?e.jsxDEV("p",{className:"text-[11px]",style:{color:L},children:[d," station",d>1?"s":""," with priority items"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:210,columnNumber:11},this):u>0?e.jsxDEV("p",{className:"text-[11px] text-status-warning",children:[u," station",u>1?"s":""," with backlog"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:214,columnNumber:11},this):p>0?e.jsxDEV("p",{className:"text-[11px] text-status-success",children:"Flowing — queue clear"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:218,columnNumber:11},this):e.jsxDEV("p",{className:"text-[11px] text-text-quaternary",children:"Quiet — awaiting work"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:220,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:208,columnNumber:7},this),e.jsxDEV("div",{className:"space-y-1.5 mb-4",children:[e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("span",{className:"text-[9px] text-text-quaternary uppercase tracking-wider",children:"Pending"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:227,columnNumber:11},this),e.jsxDEV("span",{className:`text-xs font-mono tabular-nums ${l>0?"text-text-primary font-semibold":"text-text-quaternary"}`,children:l},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:228,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:226,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("span",{className:"text-[9px] text-text-quaternary uppercase tracking-wider",children:["Resolved · ",o]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:233,columnNumber:11},this),e.jsxDEV("span",{className:"text-xs font-mono tabular-nums text-text-secondary",children:p},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:234,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:232,columnNumber:9},this),m>0&&e.jsxDEV("div",{className:"flex items-center justify-between",children:[e.jsxDEV("span",{className:"text-[9px] text-text-quaternary uppercase tracking-wider",children:"Priority"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:238,columnNumber:13},this),e.jsxDEV("span",{className:"text-xs font-mono tabular-nums font-semibold",style:{color:L},children:m},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:239,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:237,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:225,columnNumber:7},this),e.jsxDEV("div",{className:"border-t border-surface-border/40 pt-2 mb-1",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:"text-[8px] text-text-quaternary uppercase tracking-wider flex-1",children:"Station"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:249,columnNumber:11},this),e.jsxDEV("span",{className:"text-[8px] text-text-quaternary uppercase tracking-wider w-8 text-right shrink-0",children:"pend"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:250,columnNumber:11},this),e.jsxDEV("span",{className:"text-[8px] text-text-quaternary uppercase tracking-wider w-8 text-right shrink-0",children:"clmd"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:251,columnNumber:11},this),e.jsxDEV("span",{className:"text-[8px] text-text-quaternary uppercase tracking-wider w-8 text-right shrink-0",children:"res"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:252,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:248,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:247,columnNumber:7},this),e.jsxDEV("div",{className:"space-y-0.5",children:s.map(n=>{const c=r.get(n.role),N=(c==null?void 0:c.pending)??0,v=(c==null?void 0:c.claimed)??0,f=(c==null?void 0:c.resolved)??0,D=(c==null?void 0:c.priority_count)??0,$=n.title||n.role,y=D>0,O=N>0;return e.jsxDEV("div",{className:"flex items-center gap-2 py-0.5",children:[e.jsxDEV("span",{className:`text-[10px] font-mono flex-1 truncate ${O?"text-text-primary":"text-text-quaternary"}`,children:[$,y&&e.jsxDEV("span",{className:"ml-1 text-[8px] font-semibold",style:{color:L},children:[D," PRIORITY"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:277,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:270,columnNumber:15},this),e.jsxDEV("span",{className:`text-[10px] font-mono tabular-nums w-8 text-right shrink-0 ${O?"text-text-primary font-semibold":"text-text-quaternary"}`,children:N>0?N:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:282,columnNumber:15},this),e.jsxDEV("span",{className:`text-[10px] font-mono tabular-nums w-8 text-right shrink-0 ${v>0?"text-accent":"text-text-quaternary"}`,children:v>0?v:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:289,columnNumber:15},this),e.jsxDEV("span",{className:`text-[10px] font-mono tabular-nums w-8 text-right shrink-0 ${f>0?"text-text-secondary":"text-text-quaternary"}`,children:f>0?f:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:292,columnNumber:15},this)]},n.role,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:269,columnNumber:13},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:257,columnNumber:7},this),e.jsxDEV("p",{className:"text-[9px] text-text-quaternary mt-5",children:"Select a station for queue detail."},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:300,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:202,columnNumber:5},this)}function Ue({role:a,allMetrics:s,orderedRoles:o,globalPeriod:l,onClose:p}){return e.jsxDEV("div",{className:"w-[280px] shrink-0 px-6 py-8 flex flex-col overflow-y-auto min-h-0",children:a?e.jsxDEV(Ye,{role:a,globalPeriod:l,onClose:p},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:317,columnNumber:9},this):e.jsxDEV(Ge,{allMetrics:s,orderedRoles:o,period:l},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:319,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/StationDetailPanel.tsx",lineNumber:315,columnNumber:5},this)}const Ee=`${X}14`,je=`${W}14`,Ve=`${M}14`,Se=`${R}14`,Qe=["15m","1h","24h","7d","30d"],Xe={"15m":.25,"1h":1,"24h":24,"7d":168,"30d":720};function Ze(a){const s=a.filter(r=>r.ops_visible),o=new Map(s.map(r=>[r.role,r])),l=new Set,m=s.filter(r=>!r.parent_role||!o.has(r.parent_role)).map(r=>{const d=[],u=[{role:r,depth:0}];for(;u.length>0;){const n=u.shift();l.has(n.role.role)||(l.add(n.role.role),d.push(n),s.filter(c=>c.parent_role===n.role.role&&!l.has(c.role)).forEach(c=>u.push({role:c,depth:n.depth+1})))}return{origin:r,stations:d}});return s.filter(r=>!l.has(r.role)).forEach(r=>m.push({origin:r,stations:[{role:r,depth:0}]})),m.sort((r,d)=>d.stations.length-r.stations.length||r.origin.role.localeCompare(d.origin.role))}function be(a){if(a==null)return"—";if(a<1){const s=Math.round(a*60);return s<=0?"< 1s":`${s}s`}return a<60?`${a.toFixed(0)}m`:`${(a/60).toFixed(1)}h`}function Ke(a,s){if(!s||a===0)return{pct:null,color:"bg-surface-border"};const o=a/s,l=Math.round(o*100),p=o>1?"bg-status-warning":o<.2?"bg-status-draft":"bg-status-success";return{pct:l,color:p}}function Je({role:a,metric:s,selected:o,onClick:l}){var v;const p=(s==null?void 0:s.pending)??0,m=(s==null?void 0:s.claimed)??0,r=(s==null?void 0:s.resolved)??0,d=(s==null?void 0:s.priority_count)??0,u=a.target_per_hour??null,{pct:n,color:c}=Ke(p,u),N=n!=null?Math.min(100,n):0;return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{role:"button",tabIndex:0,onClick:l,onKeyDown:f=>{f.key==="Enter"&&l()},className:`grid items-center gap-4 pr-3 cursor-pointer transition-colors ${o?"border-l-2 !border-l-accent pl-2.5":"pl-3"}`,style:{gridTemplateColumns:"1fr 64px 56px 56px 60px 72px 72px 104px"},children:[e.jsxDEV("div",{className:"flex items-center gap-1.5 min-w-0 py-1.5",children:[e.jsxDEV("span",{className:"font-mono font-bold text-text-primary truncate text-[11px]",children:a.role},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:156,columnNumber:11},this),a.title&&e.jsxDEV("span",{className:"text-[10px] text-text-tertiary truncate",children:a.title},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:162,columnNumber:13},this),(((v=a.upstream_roles)==null?void 0:v.length)??0)>0&&e.jsxDEV("span",{title:`Fed by ${a.upstream_roles.join(", ")}`,className:"shrink-0 leading-none",children:e.jsxDEV(Re,{className:"w-3 h-3 text-text-quaternary"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:166,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:165,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:155,columnNumber:9},this),e.jsxDEV("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:Ee},children:e.jsxDEV("span",{className:`text-xs font-mono tabular-nums ${u!=null?"text-text-secondary":"text-text-quaternary"}`,children:u??"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:176,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:172,columnNumber:9},this),e.jsxDEV("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:je},children:e.jsxDEV("span",{className:`text-xs font-mono tabular-nums ${p>0?"text-text-primary font-semibold":"text-text-quaternary"}`,children:p},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:190,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:186,columnNumber:9},this),e.jsxDEV("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:Ve},children:e.jsxDEV("span",{className:`text-xs font-mono tabular-nums ${m>0?"text-accent font-semibold":"text-text-quaternary"}`,children:m},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:204,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:200,columnNumber:9},this),e.jsxDEV("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:Se},children:e.jsxDEV("span",{className:"text-xs font-mono tabular-nums text-text-quaternary",children:r},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:218,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:214,columnNumber:9},this),e.jsxDEV("span",{className:"text-xs font-mono tabular-nums text-right py-1.5 text-text-secondary",children:be((s==null?void 0:s.wait.p99)??null)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:224,columnNumber:9},this),e.jsxDEV("span",{className:"text-xs font-mono tabular-nums text-right py-1.5 text-text-secondary",children:be((s==null?void 0:s.work.p99)??null)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:229,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-2 py-1.5",children:[e.jsxDEV("div",{className:"w-12 h-1.5 bg-surface-sunken rounded-full overflow-hidden shrink-0",children:e.jsxDEV("div",{className:`h-full rounded-full ${c}`,style:{width:`${N}%`}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:236,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:235,columnNumber:11},this),e.jsxDEV("span",{className:`text-[10px] font-mono tabular-nums ${n!=null&&n>100?"text-status-warning font-semibold":"text-text-quaternary"}`,children:n!=null?`${n}%`:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:238,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:234,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:144,columnNumber:7},this),d>0&&e.jsxDEV("div",{className:"flex items-center gap-1.5 pb-2 pl-3.5",children:[e.jsxDEV("span",{className:"w-2.5 h-2.5 rounded-full dot-ring shrink-0",style:{backgroundColor:ye}},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:253,columnNumber:11},this),e.jsxDEV(U,{to:ce(a),className:"text-[10px] hover:underline",style:{color:L},onClick:f=>f.stopPropagation(),children:[d," priority — pull oldest first →"]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:257,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:252,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:143,columnNumber:5},this)}function ea(){const a=[{label:"ROLE"},{label:"TARGET/H",band:Ee,hue:X},{label:"PENDING",band:je,hue:W},{label:"CLAIMED",band:Ve,hue:M},{label:"RESOLVED",band:Se,hue:R},{label:"P99 WAIT"},{label:"P99 WORK"},{label:"TREND"}];return e.jsxDEV("div",{className:"grid items-center gap-4 px-3 border-b border-surface-border mb-0.5",style:{gridTemplateColumns:"1fr 64px 56px 56px 60px 72px 72px 104px"},children:a.map((s,o)=>s.band?e.jsxDEV("div",{className:"self-stretch flex items-center justify-end px-1.5",style:{backgroundColor:s.band},children:e.jsxDEV("span",{className:"text-[9px] font-semibold uppercase tracking-wider",style:{color:s.hue},children:s.label},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:297,columnNumber:13},this)},s.label,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:292,columnNumber:11},this):e.jsxDEV("span",{className:`text-[9px] font-semibold uppercase tracking-wider text-text-quaternary py-1.5 ${o>0&&o<7?"text-right":""}`,children:s.label},s.label,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:305,columnNumber:11},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:286,columnNumber:5},this)}function la(){var z;const[a,s]=j.useState("1h"),[o,l]=j.useState(null),[p,m]=j.useState(!1);$e();const{data:r,isLoading:d,refetch:u}=ke(),{data:n,isLoading:c,refetch:N}=Ne(a),v=(r==null?void 0:r.roles)??[],f=(n==null?void 0:n.stations)??[],D=j.useMemo(()=>Ze(v),[v]),[$,y]=_e(),O=$.get("fragment"),V=D.find(i=>i.origin.role===O)??D[0]??null,S=j.useCallback(i=>{l(null),y(h=>{const w=new URLSearchParams(h);return w.set("fragment",i),w})},[y]),P=(V==null?void 0:V.stations)??[],I=j.useMemo(()=>new Set(P.map(({role:i})=>i.role)),[P]),T=j.useMemo(()=>f.filter(i=>I.has(i.role)),[f,I]),B=j.useMemo(()=>P.map(({role:i})=>({role:i.role,title:i.title,parent_role:i.parent_role,target_per_hour:i.target_per_hour??null,upstream_roles:i.upstream_roles??[],metric:f.find(h=>h.role===i.role)})),[P,f]),Z=j.useCallback(i=>{const h=D.find(w=>w.stations.some(({role:t})=>t.role===i));h&&S(h.origin.role)},[D,S]),_=Me(),K=j.useCallback(i=>{const h=v.find(w=>w.role===i);h&&_(ce(h))},[v,_]),q=((z=P.find(({role:i})=>i.role===o))==null?void 0:z.role)??null,J=d||c,ee=async()=>{m(!0),await Promise.all([u(),N()]),m(!1)},F=i=>l(h=>h===i?null:i),ae=e.jsxDEV("div",{className:"flex items-center gap-0.5",children:Qe.map(i=>e.jsxDEV("button",{onClick:()=>s(i),className:`px-2.5 py-1 text-[10px] font-mono rounded transition-colors ${a===i?"bg-accent/10 text-accent font-semibold":"text-text-quaternary hover:text-text-secondary"}`,children:i},i,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:425,columnNumber:9},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:423,columnNumber:5},this);return e.jsxDEV("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsxDEV(Ce,{title:"Pace Board",docsHash:"#docs:dashboard.md:pace-board",center:ae,actions:e.jsxDEV("button",{onClick:ee,disabled:p,className:"text-text-quaternary hover:text-text-secondary transition-colors disabled:opacity-40",children:e.jsxDEV(we,{className:`w-3.5 h-3.5 ${p?"animate-spin":""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:452,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:447,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:442,columnNumber:7},this),J?e.jsxDEV("div",{className:"animate-pulse space-y-6 mt-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-64"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:459,columnNumber:11},this),e.jsxDEV("div",{className:"h-64 bg-surface-sunken rounded w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:460,columnNumber:11},this),e.jsxDEV("div",{className:"space-y-3",children:[1,2,3].map(i=>e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-full"},i,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:463,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:461,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:458,columnNumber:9},this):D.length===0?e.jsxDEV("div",{className:"mt-8",children:[e.jsxDEV("p",{className:"text-sm text-text-secondary mb-2",children:"Stations appear here once roles are marked visible in Operations."},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:469,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:["Go to"," ",e.jsxDEV(U,{to:"/admin/roles",className:"text-accent hover:underline",children:"Roles"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:472,columnNumber:13},this)," ","and enable ",e.jsxDEV("strong",{children:"Visible in Operations"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:475,columnNumber:24},this)," on roles that represent pipeline stations."]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:470,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:468,columnNumber:9},this):e.jsxDEV("div",{className:"flex flex-col flex-1 min-h-0",children:[D.length>1&&e.jsxDEV("div",{className:"flex items-center gap-0.5 px-4 pt-2",children:D.map(i=>{const h=i.origin.role===(V==null?void 0:V.origin.role);return e.jsxDEV("button",{onClick:()=>S(i.origin.role),className:`px-2.5 py-1 text-[10px] font-mono rounded transition-colors ${h?"bg-accent/10 text-accent font-semibold":"text-text-quaternary hover:text-text-secondary"}`,children:[i.origin.title??i.origin.role,e.jsxDEV("span",{className:`ml-1.5 tabular-nums ${h?"text-accent/60":"text-text-quaternary/60"}`,children:i.stations.length},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:500,columnNumber:21},this)]},i.origin.role,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:490,columnNumber:19},this)})},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:486,columnNumber:13},this),e.jsxDEV("div",{className:"flex-1 min-h-0 flex items-stretch overflow-hidden",children:[e.jsxDEV("div",{className:"flex-1 min-w-0 min-h-0 flex flex-col justify-center overflow-hidden p-4",children:e.jsxDEV(Be,{stations:B,selectedRole:o,onSelect:F,onUpstreamSelect:Z,onPrioritySelect:K,periodHours:Xe[a]},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:513,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:512,columnNumber:13},this),e.jsxDEV("div",{className:"w-px bg-surface-border shrink-0 self-stretch"},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:523,columnNumber:13},this),e.jsxDEV(Ue,{role:q,allMetrics:T,orderedRoles:P.map(i=>i.role),globalPeriod:a,onClose:()=>l(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:525,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:510,columnNumber:11},this),e.jsxDEV("div",{className:"max-h-[45vh] flex-none flex flex-col border-t border-surface-border overflow-hidden",children:[e.jsxDEV(ea,{},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:536,columnNumber:13},this),e.jsxDEV("div",{className:"flex-1 min-h-0 overflow-y-auto divide-y divide-surface-border/30",children:P.map(({role:i})=>e.jsxDEV(Je,{role:i,metric:f.find(h=>h.role===i.role),selected:o===i.role,onClick:()=>F(i.role)},i.role,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:539,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:537,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:535,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:481,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operations/OperationsPage.tsx",lineNumber:441,columnNumber:5},this)}export{la as OperationsPage};
|
|
2
|
-
//# sourceMappingURL=OperationsPage-DODPFmf2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OperationsPage-DODPFmf2.js","sources":["../../src/pages/operations/PaceChart.tsx","../../src/pages/operations/priority-link.ts","../../src/pages/operations/StationDetailPanel.tsx","../../src/pages/operations/OperationsPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { StationMetric } from '../../api/escalations';\n\nexport interface ChartStation {\n role: string;\n title: string | null;\n target_per_hour: number | null;\n parent_role: string | null;\n /** Roles feeding this station from other sequences — drawn as a merge glyph, not a bend in the line. */\n upstream_roles?: string[];\n metric: StationMetric | undefined;\n}\n\ninterface PaceChartProps {\n stations: ChartStation[];\n selectedRole: string | null;\n onSelect: (role: string) => void;\n /** Merge-glyph click — jump to the sequence that feeds this station. */\n onUpstreamSelect?: (upstreamRole: string) => void;\n /** Priority-badge click — open the station's queue oldest-first by its age facet. */\n onPrioritySelect?: (role: string) => void;\n /** Selected window length in hours — target count = target_per_hour × this. */\n periodHours: number;\n}\n\n// ── SVG layout ────────────────────────────────────────────────────────────────\n\nconst W = 800;\nconst H = 270;\nconst ML = 40;\nconst MR = 76;\nconst MT = 24;\nconst MB = 72;\n\nconst chartW = W - ML - MR;\nconst chartH = H - MT - MB;\nconst bottom = MT + chartH;\nconst right = ML + chartW;\n\n// Smooth transition applied when the window changes and values re-scale.\nconst EASE = '0.5s cubic-bezier(0.4, 0, 0.2, 1)';\n\n// ── Path builders ─────────────────────────────────────────────────────────────\n\n// A one-point curve still needs a stroke: a short segment — slightly longer\n// than an em dash — centered through the point. It anchors the dot and its\n// end label in vertical space when a sequence has a single station (or a\n// single station carries a target).\nconst SOLO_HALF = 9;\nfunction soloSegment(p: { x: number; y: number }): string {\n return `M ${(p.x - SOLO_HALF).toFixed(1)} ${p.y.toFixed(1)} L ${(p.x + SOLO_HALF).toFixed(1)} ${p.y.toFixed(1)}`;\n}\n\n/** Straight polyline — the target line is a discrete count per station. */\nfunction linePath(pts: { x: number; y: number }[]): string {\n if (pts.length === 0) return '';\n if (pts.length === 1) return soloSegment(pts[0]);\n return pts.map((p, i) => `${i === 0 ? 'M' : 'L'} ${p.x.toFixed(1)} ${p.y.toFixed(1)}`).join(' ');\n}\n\n/** Catmull-Rom → cubic bezier — smooth curves for the actual and active lines. */\nfunction catmullPath(pts: { x: number; y: number }[]): string {\n if (pts.length === 0) return '';\n if (pts.length === 1) return soloSegment(pts[0]);\n const segs: string[] = [];\n for (let i = 0; i < pts.length - 1; i++) {\n const p0 = pts[Math.max(0, i - 1)];\n const p1 = pts[i];\n const p2 = pts[i + 1];\n const p3 = pts[Math.min(pts.length - 1, i + 2)];\n const cp1x = (p1.x + (p2.x - p0.x) / 6).toFixed(1);\n const cp1y = (p1.y + (p2.y - p0.y) / 6).toFixed(1);\n const cp2x = (p2.x - (p3.x - p1.x) / 6).toFixed(1);\n const cp2y = (p2.y - (p3.y - p1.y) / 6).toFixed(1);\n if (i === 0) segs.push(`M ${p1.x.toFixed(1)} ${p1.y.toFixed(1)}`);\n segs.push(`C ${cp1x} ${cp1y}, ${cp2x} ${cp2y}, ${p2.x.toFixed(1)} ${p2.y.toFixed(1)}`);\n }\n return segs.join(' ');\n}\n\n/**\n * Closed region between two curves — upper spline forward, lower spline back.\n * Used for the queue-composition bands: the vertical thickness at any station\n * is the count difference between the two curves.\n */\nfunction bandPath(upper: { x: number; y: number }[], lower: { x: number; y: number }[]): string {\n if (upper.length < 2 || lower.length < 2) return '';\n const forward = catmullPath(upper);\n const rev = [...lower].reverse();\n const back = catmullPath(rev);\n // Drop the back path's leading M — the L below connects the two curves.\n const backSegs = back.slice(back.indexOf('C'));\n return `${forward} L ${rev[0].x.toFixed(1)} ${rev[0].y.toFixed(1)} ${backSegs} Z`;\n}\n\nfunction compact(n: number): string {\n return n >= 10000 ? `${Math.round(n / 1000)}k` : n >= 1000 ? `${(n / 1000).toFixed(1)}k` : String(n);\n}\n\nfunction last<T>(a: T[]): T | undefined {\n return a.length > 0 ? a[a.length - 1] : undefined;\n}\n\n// ── Colors ────────────────────────────────────────────────────────────────────\n\n// Shared queue-state palette — the chart bands and the station table columns\n// use the same hues so the two views read as one.\nexport const ACTIVE_COLOR = '#6366f1'; // claimed, being worked right now — indigo\nexport const QUEUED_COLOR = '#0ea5e9'; // pending and unclaimed, waiting in the queue — sky\nexport const RESOLVED_COLOR = '#1E3A8A'; // done — navy, matches the default theme accent\nexport const TARGET_COLOR = '#059669'; // target pace line — emerald\n\n// Priority — unclaimed items past the role's age threshold, the count the\n// floor pulls to the front of the rack. Powder blue for the badge circle;\n// the count text uses the same hue deepened enough to read at chart sizes.\nexport const PRIORITY_COLOR = '#b0e0e6';\nexport const PRIORITY_TEXT_COLOR = '#5b93ad';\n\n// ── End-label stacking — spread close labels so text doesn't collide ────────────\n\nconst MIN_GAP = 13;\nfunction spreadLabels<T extends { y: number }>(labels: T[], maxY: number): (T & { labelY: number })[] {\n const sorted = [...labels].sort((a, b) => a.y - b.y);\n let prev = -Infinity;\n const placed = sorted.map((l) => {\n const labelY = Math.max(l.y + 3, prev + MIN_GAP);\n prev = labelY;\n return { ...l, labelY };\n });\n // On a quiet window every curve sits at zero and the stack would descend\n // past the floor into the station titles — lift the whole stack back above\n // maxY instead.\n const overflow = placed.length > 0 ? placed[placed.length - 1].labelY - maxY : 0;\n if (overflow > 0) {\n for (const l of placed) l.labelY -= overflow;\n }\n return placed;\n}\n\n// ── Chart ─────────────────────────────────────────────────────────────────────\n\nexport function PaceChart({ stations, selectedRole, onSelect, onUpstreamSelect, onPrioritySelect, periodHours }: PaceChartProps) {\n const [hoveredIdx, setHoveredIdx] = useState<number | null>(null);\n\n const n = stations.length;\n if (n === 0) return null;\n\n const xOf = (i: number) => (n === 1 ? ML + chartW / 2 : ML + (i / (n - 1)) * chartW);\n const xMap = new Map(stations.map((s, i) => [s.role, xOf(i)]));\n\n // Per-station counts for the selected window:\n // - target : expected units = target_per_hour × periodHours (e.g. 22/h · 15m ≈ 5).\n // - actual : units resolved in the window (\"the number we see\").\n // - active : units in the queue being worked right now (claimed).\n const rows = stations.map((s, i) => {\n const target = s.target_per_hour ?? null;\n const expected = target != null ? target * periodHours : null;\n return {\n idx: i,\n x: xOf(i),\n expected,\n actual: s.metric?.resolved ?? 0,\n active: s.metric?.claimed ?? 0,\n pending: s.metric?.pending ?? 0,\n priorityCount: s.metric?.priority_count ?? 0,\n };\n });\n\n const hasTargets = rows.some((r) => r.expected != null);\n\n const dataMax = Math.max(\n 1,\n ...rows.map((r) => r.expected ?? 0),\n ...rows.map((r) => r.actual),\n ...rows.map((r) => (r.expected != null ? r.pending : 0)),\n );\n const maxVal = dataMax * 1.15;\n const yScale = (v: number) => MT + chartH * (1 - Math.max(0, Math.min(v, maxVal)) / maxVal);\n\n const withTarget = rows.filter((r) => r.expected != null);\n const targetPts = withTarget.map((r) => ({ ...r, y: yScale(r.expected as number) }));\n const actualPts = withTarget.map((r) => ({ ...r, y: yScale(r.actual) }));\n const activePts = withTarget.map((r) => ({ ...r, y: yScale(r.active) }));\n const pendingPts = withTarget.map((r) => ({ ...r, y: yScale(r.pending) }));\n\n const targetLinePath = linePath(targetPts);\n const actualSplinePath = catmullPath(actualPts);\n const activeSplinePath = catmullPath(activePts);\n const pendingSplinePath = catmullPath(pendingPts);\n\n const lastActual = last(actualPts);\n const lastTarget = last(targetPts);\n const lastActive = last(activePts);\n const lastPending = last(pendingPts);\n\n const areaPath =\n actualPts.length >= 2 && lastActual\n ? `${actualSplinePath} L ${lastActual.x.toFixed(1)} ${bottom} L ${actualPts[0].x.toFixed(1)} ${bottom} Z`\n : '';\n\n // Queue composition — pending splits into two stacked bands:\n // floor → active curve = claimed, being worked (indigo)\n // active → pending curve = waiting, unclaimed (sky)\n // When workers claim everything the instant it lands, the sky band collapses\n // to zero and the whole queue reads as indigo.\n const hasQueue = withTarget.some((r) => r.pending > 0 || r.active > 0);\n const workedBandPath =\n hasQueue && activePts.length >= 2 && lastActive\n ? `${activeSplinePath} L ${lastActive.x.toFixed(1)} ${bottom} L ${activePts[0].x.toFixed(1)} ${bottom} Z`\n : '';\n const queuedBandPath = hasQueue ? bandPath(pendingPts, activePts) : '';\n\n // Quiet lines keep their curves (flat at zero) but skip their end labels —\n // a stack of names pointing at nothing is noise.\n const showActiveLabel = withTarget.some((r) => r.active > 0);\n const showQueuedLabel = withTarget.some((r) => r.pending > r.active);\n const endLabels = spreadLabels(\n [\n lastTarget ? { key: 'target', text: 'Target', color: TARGET_COLOR, y: lastTarget.y } : null,\n lastActual ? { key: 'actual', text: 'Resolved', color: RESOLVED_COLOR, y: lastActual.y } : null,\n showActiveLabel && lastActive\n ? { key: 'active', text: 'Claimed', color: ACTIVE_COLOR, y: lastActive.y }\n : null,\n showQueuedLabel && lastPending\n ? { key: 'queued', text: 'Pending', color: QUEUED_COLOR, y: lastPending.y }\n : null,\n ].filter(Boolean) as { key: string; text: string; color: string; y: number }[],\n bottom + 4,\n );\n\n return (\n <svg viewBox={`0 0 ${W} ${H}`} className=\"w-full h-full\" preserveAspectRatio=\"xMidYMid meet\" style={{ display: 'block' }}>\n {/* Dependency connector lines (parent → child), drawn at chart floor */}\n {stations.map((s) => {\n if (!s.parent_role) return null;\n const px = xMap.get(s.parent_role);\n if (px == null) return null;\n const cx = xOf(stations.findIndex((r) => r.role === s.role));\n return <line key={`dep-${s.role}`} x1={px} y1={bottom} x2={cx} y2={bottom} stroke=\"#e2e8f0\" strokeWidth={0.75} />;\n })}\n\n {/* Area under the actual curve */}\n {areaPath && <path d={areaPath} fill={RESOLVED_COLOR} opacity={0.05} style={{ transition: `d ${EASE}` }} />}\n\n {/* Queue composition bands — the band heights split each station's\n pending total into claimed-and-worked (indigo, floor→active) and\n waiting-unclaimed (sky, active→pending). */}\n {workedBandPath && (\n <path d={workedBandPath} fill={ACTIVE_COLOR} opacity={0.12} style={{ transition: `d ${EASE}` }} />\n )}\n {queuedBandPath && (\n <path d={queuedBandPath} fill={QUEUED_COLOR} opacity={0.12} style={{ transition: `d ${EASE}` }} />\n )}\n\n {/* Target — thin red solid reference at the window's expected count */}\n {targetLinePath && (\n <path d={targetLinePath} fill=\"none\" stroke={TARGET_COLOR} strokeWidth={0.5} strokeLinejoin=\"round\" opacity={0.9} style={{ transition: `d ${EASE}` }} />\n )}\n\n {/* Per-role target for the window (target_per_hour × duration), just above the red line */}\n {targetPts.map((tp) => (\n <text\n key={`tval-${tp.idx}`}\n x={tp.x}\n y={tp.y - 3.5}\n textAnchor=\"middle\"\n fontSize={6.5}\n fill={TARGET_COLOR}\n fontFamily=\"ui-monospace, monospace\"\n fontWeight=\"500\"\n opacity={0.7}\n style={{ transition: `y ${EASE}` }}\n >\n {Math.round(tp.expected as number)}\n </text>\n ))}\n\n {/* Pending — thin dotted sky edge along the queue total (top of the bands) */}\n {hasQueue && pendingSplinePath && (\n <path d={pendingSplinePath} fill=\"none\" stroke={QUEUED_COLOR} strokeWidth={0.75} strokeDasharray=\"2 3\" strokeLinecap=\"round\" opacity={0.55} style={{ transition: `d ${EASE}` }} />\n )}\n\n {/* Active — thin dotted indigo, how many are claimed and being worked */}\n {activeSplinePath && (\n <path d={activeSplinePath} fill=\"none\" stroke={ACTIVE_COLOR} strokeWidth={0.75} strokeDasharray=\"2 3\" strokeLinecap=\"round\" opacity={0.5} style={{ transition: `d ${EASE}` }} />\n )}\n\n {/* Actual — thin solid, primary line */}\n {actualSplinePath && (\n <path d={actualSplinePath} fill=\"none\" stroke={RESOLVED_COLOR} strokeWidth={0.6} strokeLinejoin=\"round\" strokeLinecap=\"round\" opacity={0.65} style={{ transition: `d ${EASE}` }} />\n )}\n\n {/* Queue markers — a dot on the active line per station.\n Above the dot, at the pending edge: the queue total (sky when part of\n it is still waiting, slate when everything is claimed).\n Below the dot: active (claimed, being worked right now). */}\n {activePts.map((ap, i) => {\n if (ap.pending <= 0 && ap.active <= 0) return null;\n const ar = Math.max(2.5, Math.min(5, 2.5 + ap.active / 10));\n const hasWaiting = ap.pending > ap.active;\n // Anchor the queue-total label to the pending edge so it rides the top\n // of the band; keep it clear of the dot when the two curves touch.\n const pendingLabelY = Math.min(pendingPts[i].y - 4, ap.y - ar - 4);\n return (\n <g key={`active-${ap.idx}`}>\n {ap.pending > 0 && (\n <text\n x={ap.x}\n y={pendingLabelY}\n textAnchor=\"middle\"\n fontSize={7.5}\n fill={hasWaiting ? QUEUED_COLOR : '#64748b'}\n fontFamily=\"ui-monospace, monospace\"\n fontWeight=\"600\"\n style={{ transition: `y ${EASE}` }}\n >\n {ap.pending}\n </text>\n )}\n <g transform={`translate(${ap.x} ${ap.y})`} style={{ transition: `transform ${EASE}` }}>\n <circle r={ar} fill={ACTIVE_COLOR} opacity={0.85} />\n {ap.active > 0 && (\n <text y={ar + 9} textAnchor=\"middle\" fontSize={7.5} fill={ACTIVE_COLOR} fontFamily=\"ui-monospace, monospace\" fontWeight=\"600\">\n {ap.active}\n </text>\n )}\n </g>\n </g>\n );\n })}\n\n {/* Station nodes — actual (resolved) as a dot on the actual line, styled like\n the active dot but a bit larger (actual is the most important number).\n The count sits below the dot so it stays legible as numbers grow. */}\n {rows.map((row) => {\n const s = stations[row.idx];\n const x = row.x;\n const cy = row.expected != null ? yScale(row.actual) : bottom;\n // Same small scale as the active dot — a hair larger.\n const r = Math.max(2.25, Math.min(4, 2.25 + row.actual / 160));\n const isSelected = s.role === selectedRole;\n const isHovered = hoveredIdx === row.idx;\n\n const tooltip =\n row.expected == null\n ? 'idle · set a target rate to plot pace'\n : `${row.actual} resolved · target ${Math.round(row.expected)}`\n + (row.pending > row.active ? ` · ${row.pending - row.active} pending` : '')\n + (row.active > 0 ? ` · ${row.active} claimed` : '')\n + (row.priorityCount > 0 ? ` · ${row.priorityCount} priority` : '');\n const tipW = tooltip.length * 5.5 + 20;\n const tipX = Math.max(ML + tipW / 2 + 4, Math.min(right - tipW / 2 - 4, x));\n const tipY = cy - r - 10;\n\n return (\n <g\n key={s.role}\n onClick={() => onSelect(s.role)}\n onMouseEnter={() => setHoveredIdx(row.idx)}\n onMouseLeave={() => setHoveredIdx(null)}\n style={{ cursor: 'pointer' }}\n >\n {/* Animated marker group — slides vertically as the window rescales */}\n <g transform={`translate(${x} ${cy})`} style={{ transition: `transform ${EASE}` }}>\n <circle r={22} fill=\"transparent\" />\n <circle r={r} fill={RESOLVED_COLOR} opacity={0.9} style={{ transition: `r ${EASE}` }} />\n {row.expected != null && (\n <text y={-r - 5} textAnchor=\"middle\" fontSize={9.5} fill={RESOLVED_COLOR} fontFamily=\"ui-monospace, monospace\" fontWeight=\"500\">\n {compact(row.actual)}\n </text>\n )}\n {isHovered && !isSelected && <circle r={r + 3} fill=\"none\" stroke={RESOLVED_COLOR} strokeWidth={1} opacity={0.4} />}\n {isSelected && <circle r={r + 4} fill=\"none\" stroke=\"#6366f1\" strokeWidth={2} />}\n </g>\n\n {/* Priority badge — powder blue circle carrying the count of\n unclaimed items past the role's age threshold. Clicking opens\n the station's queue oldest-first by the priority facet so the\n runner grabs the top few and moves them to the front. */}\n {row.priorityCount > 0 && (\n <g\n transform={`translate(${x + 15} ${Math.max(cy - 15, 12)})`}\n onClick={(e) => {\n e.stopPropagation();\n onPrioritySelect?.(s.role);\n }}\n style={{ cursor: 'pointer', transition: `transform ${EASE}` }}\n >\n <title>{`${row.priorityCount} past the priority threshold — click to pull oldest first`}</title>\n <circle\n r={6.5 + (String(row.priorityCount).length - 1) * 2}\n fill={PRIORITY_COLOR}\n opacity={0.9}\n />\n <text\n y={2.5}\n textAnchor=\"middle\"\n fontSize={7}\n fill={PRIORITY_TEXT_COLOR}\n fontFamily=\"ui-monospace, monospace\"\n fontWeight=\"700\"\n >\n {row.priorityCount}\n </text>\n </g>\n )}\n\n {/* Merge affordance — this station also receives input from another\n sequence. The dashed drop into the floor says \"a side-quest\n lands here\"; clicking it opens that sequence. It is a symbol,\n deliberately not a line — the upstream is NOT a descendant. */}\n {(s.upstream_roles?.length ?? 0) > 0 && (\n <g\n transform={`translate(${x - 20} ${bottom})`}\n onClick={(e) => {\n e.stopPropagation();\n onUpstreamSelect?.(s.upstream_roles![0]);\n }}\n style={{ cursor: 'pointer' }}\n >\n <title>{`Fed by ${s.upstream_roles!.join(', ')} — click to view that sequence`}</title>\n <circle r={9} cy={-6} fill=\"transparent\" />\n <path d=\"M -7 -14 C -3 -14 -1 -9 0 -2\" fill=\"none\" stroke=\"#94a3b8\" strokeWidth={1} strokeDasharray=\"2 2\" strokeLinecap=\"round\" />\n <path d=\"M 0 -2 L 8 -2\" stroke=\"#94a3b8\" strokeWidth={1} strokeLinecap=\"round\" />\n <path d=\"M 8 -2 l -3.5 -2 v 4 z\" fill=\"#94a3b8\" />\n </g>\n )}\n\n {/* Station labels (fixed at the floor) */}\n <text x={x} y={bottom + 14} textAnchor=\"middle\" fontSize={9.5} fill=\"#475569\" fontFamily=\"ui-sans-serif, sans-serif\" fontWeight=\"500\">\n {s.title ?? s.role}\n </text>\n <text x={x} y={bottom + 26} textAnchor=\"middle\" fontSize={8} fill=\"#94a3b8\" fontFamily=\"ui-monospace, monospace\">\n {s.role}\n </text>\n\n {/* Tooltip */}\n {isHovered && (\n <g>\n <rect x={tipX - tipW / 2} y={tipY - 16} width={tipW} height={19} rx={3} fill=\"#0f172a\" opacity={0.88} />\n <text x={tipX} y={tipY - 3} textAnchor=\"middle\" fontSize={8.5} fill=\"white\" fontFamily=\"ui-monospace, monospace\">\n {tooltip}\n </text>\n </g>\n )}\n </g>\n );\n })}\n\n {/* No-target hint */}\n {!hasTargets && (\n <text x={ML + chartW / 2} y={bottom + 48} textAnchor=\"middle\" fontSize={8.5} fill=\"#94a3b8\" fontFamily=\"ui-sans-serif, sans-serif\">\n Set target_per_hour on each role in Admin → Roles to enable the pace chart\n </text>\n )}\n\n {/* End labels — text + count, rendered last so they sit above everything */}\n {endLabels.map((l) => (\n <text\n key={l.key}\n x={right + 6}\n y={l.labelY}\n fontSize={8}\n fill={l.color}\n fontFamily=\"ui-sans-serif, sans-serif\"\n fontWeight={l.key === 'actual' ? 700 : 500}\n opacity={l.key === 'active' ? 0.85 : 1}\n style={{ transition: `y ${EASE}` }}\n >\n {l.text}\n </text>\n ))}\n </svg>\n );\n}\n","import type { RoleDetail } from '../../api/roles';\n\n/**\n * Deep link to the available-escalations queue ordered oldest-first by the\n * role's priority age origin: the metadata facet when configured (faceted\n * orderBy, nulls last), else created_at. Mirrors the priority_count SQL so\n * the counted items sit at the top of the list the runner opens.\n */\nexport function priorityQueueLink(role: Pick<RoleDetail, 'role' | 'priority_facet'>): string {\n const base = `/escalations/available?role=${encodeURIComponent(role.role)}`;\n if (role.priority_facet) {\n const orderBy = JSON.stringify([{ field: `metadata.${role.priority_facet}`, direction: 'asc' }]);\n return `${base}&orderBy=${encodeURIComponent(orderBy)}`;\n }\n return `${base}&sort_by=created_at&order=asc`;\n}\n","import { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, ExternalLink } from 'lucide-react';\nimport { useStationMetrics } from '../../api/escalations';\nimport type { StationMetric } from '../../api/escalations';\nimport type { RoleDetail } from '../../api/roles';\nimport { PRIORITY_TEXT_COLOR } from './PaceChart';\nimport { priorityQueueLink } from './priority-link';\n\ninterface StationDetailPanelProps {\n role: RoleDetail | null;\n allMetrics: StationMetric[];\n orderedRoles: RoleDetail[];\n globalPeriod: string;\n onClose: () => void;\n}\n\n// Mirrors OperationsPage's selector — the panel reports the same windows the\n// chart can show, and opens on whichever one the chart has selected.\nconst PERIODS = ['15m', '1h', '24h', '7d', '30d'] as const;\ntype Period = (typeof PERIODS)[number];\n\nconst isPeriod = (p: string): p is Period => (PERIODS as readonly string[]).includes(p);\n\nfunction fmt(min: number | null): string {\n if (min == null) return '—';\n if (min < 1) {\n const s = Math.round(min * 60);\n return s <= 0 ? '< 1s' : `${s}s`;\n }\n if (min < 60) return `${min.toFixed(0)}m`;\n return `${(min / 60).toFixed(1)}h`;\n}\n\nfunction MetricRow({ label, value }: { label: string; value: string }) {\n return (\n <div className=\"flex items-center justify-between py-1\">\n <span className=\"text-[10px] text-text-tertiary uppercase tracking-wider\">{label}</span>\n <span className=\"text-xs font-mono font-medium text-text-primary tabular-nums\">{value}</span>\n </div>\n );\n}\n\nfunction PeriodSelector({ period, onChange }: { period: Period; onChange: (p: Period) => void }) {\n return (\n <div className=\"flex items-center gap-1 mb-4\">\n {PERIODS.map((p) => (\n <button\n key={p}\n onClick={() => onChange(p)}\n className={`px-2 py-0.5 text-[10px] font-mono rounded transition-colors ${\n period === p\n ? 'bg-accent/10 text-accent font-semibold'\n : 'text-text-quaternary hover:text-text-secondary'\n }`}\n >\n {p}\n </button>\n ))}\n </div>\n );\n}\n\nfunction RoleView({ role, globalPeriod, onClose }: { role: RoleDetail; globalPeriod: string; onClose: () => void }) {\n // Open on the chart's selected window so the panel's numbers agree with the\n // chart beside it; the local selector still lets the viewer drill around.\n const [period, setPeriod] = useState<Period>(isPeriod(globalPeriod) ? globalPeriod : '24h');\n const { data } = useStationMetrics(period);\n const metric = data?.stations.find((s) => s.role === role.role);\n const slaMinutes = role.sla_minutes ?? undefined;\n const targetPerHour = role.target_per_hour ?? undefined;\n const workerCount = role.worker_count ?? undefined;\n\n return (\n <>\n {/* Header */}\n <div className=\"flex items-start justify-between mb-1\">\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-baseline gap-1.5 flex-wrap\">\n <span className=\"text-sm font-mono font-bold text-text-primary\">{role.role}</span>\n {role.title && (\n <span className=\"text-[10px] text-text-secondary\">{role.title}</span>\n )}\n </div>\n {role.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 line-clamp-2 leading-relaxed\">\n {role.description}\n </p>\n )}\n </div>\n <button\n onClick={onClose}\n className=\"text-text-quaternary hover:text-text-secondary transition-colors mt-0.5 shrink-0 ml-2\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n <Link\n to={`/admin/roles/${encodeURIComponent(role.role)}`}\n className=\"flex items-center gap-1 text-[10px] text-accent hover:underline mb-4\"\n >\n <ExternalLink className=\"w-2.5 h-2.5\" />\n Edit in Roles\n </Link>\n\n <PeriodSelector period={period} onChange={setPeriod} />\n\n {/* Capacity settings */}\n {(targetPerHour || slaMinutes || workerCount) && (\n <div className=\"flex items-center gap-4 mb-4 text-[10px]\">\n {targetPerHour && (\n <div>\n <div className=\"font-mono font-semibold text-text-primary\">{targetPerHour}/h</div>\n <div className=\"text-text-quaternary uppercase tracking-wider text-[8.5px]\">target</div>\n </div>\n )}\n {slaMinutes && (\n <div>\n <div className=\"font-mono font-semibold text-text-primary\">{slaMinutes}m</div>\n <div className=\"text-text-quaternary uppercase tracking-wider text-[8.5px]\">SLA</div>\n </div>\n )}\n {workerCount && (\n <div>\n <div className=\"font-mono font-semibold text-text-primary\">{workerCount}</div>\n <div className=\"text-text-quaternary uppercase tracking-wider text-[8.5px]\">workers</div>\n </div>\n )}\n </div>\n )}\n\n {/* Two-column wait / work grid */}\n <div className=\"grid grid-cols-2 gap-x-3\">\n <div>\n <p className=\"text-[9px] text-text-quaternary uppercase tracking-wider mb-1.5\">Wait (queue)</p>\n <MetricRow label=\"P99\" value={fmt(metric?.wait.p99 ?? null)} />\n <MetricRow label=\"avg\" value={fmt(metric?.wait.avg ?? null)} />\n </div>\n <div>\n <p className=\"text-[9px] text-text-quaternary uppercase tracking-wider mb-1.5\">Work (proc.)</p>\n <MetricRow label=\"P99\" value={fmt(metric?.work.p99 ?? null)} />\n <MetricRow label=\"avg\" value={fmt(metric?.work.avg ?? null)} />\n </div>\n </div>\n\n {/* SLA + priority */}\n <div className=\"border-t border-surface-border/40 pt-2 mt-3 space-y-1.5\">\n {slaMinutes && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] text-text-tertiary\">SLA target</span>\n <span className=\"text-xs font-mono text-text-secondary\">{slaMinutes}m</span>\n </div>\n )}\n {metric && metric.priority_count > 0 && (\n <Link\n to={priorityQueueLink(role)}\n className=\"flex items-center justify-between group\"\n >\n <span className=\"text-[10px]\" style={{ color: PRIORITY_TEXT_COLOR }}>\n {metric.priority_count} priority — pull oldest first\n </span>\n <ExternalLink className=\"w-3 h-3 transition-colors\" style={{ color: PRIORITY_TEXT_COLOR }} />\n </Link>\n )}\n </div>\n\n {/* View queue — `role=` drives the visible filter bar on the escalations\n page (the JSON `roles=` facet param filters silently and leaves the\n bar reading \"all roles\"). */}\n <div className=\"mt-4 border-t border-surface-border/40 pt-3\">\n <Link\n to={`/escalations/available?role=${encodeURIComponent(role.role)}`}\n className=\"flex items-center gap-1.5 text-[10px] text-accent hover:underline\"\n >\n View full queue\n <ExternalLink className=\"w-2.5 h-2.5\" />\n </Link>\n </div>\n </>\n );\n}\n\nfunction OverviewPanel({\n allMetrics,\n orderedRoles,\n period,\n}: {\n allMetrics: StationMetric[];\n orderedRoles: RoleDetail[];\n period: string;\n}) {\n const totalPending = allMetrics.reduce((s, m) => s + m.pending, 0);\n const totalResolved = allMetrics.reduce((s, m) => s + m.resolved, 0);\n const totalPriority = allMetrics.reduce((s, m) => s + m.priority_count, 0);\n\n const metricByRole = new Map(allMetrics.map((m) => [m.role, m]));\n const stationsAtRisk = allMetrics.filter((m) => m.priority_count > 0).length;\n const stationsWithLoad = allMetrics.filter((m) => m.pending > 0).length;\n\n return (\n <>\n <p className=\"text-[9px] text-text-quaternary uppercase tracking-wider mb-3\">\n Pipeline · {period}\n </p>\n\n {/* Health headline */}\n <div className=\"mb-4\">\n {stationsAtRisk > 0 ? (\n <p className=\"text-[11px]\" style={{ color: PRIORITY_TEXT_COLOR }}>\n {stationsAtRisk} station{stationsAtRisk > 1 ? 's' : ''} with priority items\n </p>\n ) : stationsWithLoad > 0 ? (\n <p className=\"text-[11px] text-status-warning\">\n {stationsWithLoad} station{stationsWithLoad > 1 ? 's' : ''} with backlog\n </p>\n ) : totalResolved > 0 ? (\n <p className=\"text-[11px] text-status-success\">Flowing — queue clear</p>\n ) : (\n <p className=\"text-[11px] text-text-quaternary\">Quiet — awaiting work</p>\n )}\n </div>\n\n {/* Key counters */}\n <div className=\"space-y-1.5 mb-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[9px] text-text-quaternary uppercase tracking-wider\">Pending</span>\n <span className={`text-xs font-mono tabular-nums ${totalPending > 0 ? 'text-text-primary font-semibold' : 'text-text-quaternary'}`}>\n {totalPending}\n </span>\n </div>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[9px] text-text-quaternary uppercase tracking-wider\">Resolved · {period}</span>\n <span className=\"text-xs font-mono tabular-nums text-text-secondary\">{totalResolved}</span>\n </div>\n {totalPriority > 0 && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[9px] text-text-quaternary uppercase tracking-wider\">Priority</span>\n <span className=\"text-xs font-mono tabular-nums font-semibold\" style={{ color: PRIORITY_TEXT_COLOR }}>\n {totalPriority}\n </span>\n </div>\n )}\n </div>\n\n {/* Divider + column headers */}\n <div className=\"border-t border-surface-border/40 pt-2 mb-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[8px] text-text-quaternary uppercase tracking-wider flex-1\">Station</span>\n <span className=\"text-[8px] text-text-quaternary uppercase tracking-wider w-8 text-right shrink-0\">pend</span>\n <span className=\"text-[8px] text-text-quaternary uppercase tracking-wider w-8 text-right shrink-0\">clmd</span>\n <span className=\"text-[8px] text-text-quaternary uppercase tracking-wider w-8 text-right shrink-0\">res</span>\n </div>\n </div>\n\n {/* Station list in pipeline order */}\n <div className=\"space-y-0.5\">\n {orderedRoles.map((r) => {\n const m = metricByRole.get(r.role);\n const pending = m?.pending ?? 0;\n const claimed = m?.claimed ?? 0;\n const resolved = m?.resolved ?? 0;\n const priorityCount = m?.priority_count ?? 0;\n const label = r.title || r.role;\n const hasAlert = priorityCount > 0;\n const hasLoad = pending > 0;\n\n return (\n <div key={r.role} className=\"flex items-center gap-2 py-0.5\">\n <span\n className={`text-[10px] font-mono flex-1 truncate ${\n hasLoad ? 'text-text-primary' : 'text-text-quaternary'\n }`}\n >\n {label}\n {hasAlert && (\n <span className=\"ml-1 text-[8px] font-semibold\" style={{ color: PRIORITY_TEXT_COLOR }}>\n {priorityCount} PRIORITY\n </span>\n )}\n </span>\n <span\n className={`text-[10px] font-mono tabular-nums w-8 text-right shrink-0 ${\n hasLoad ? 'text-text-primary font-semibold' : 'text-text-quaternary'\n }`}\n >\n {pending > 0 ? pending : '—'}\n </span>\n <span className={`text-[10px] font-mono tabular-nums w-8 text-right shrink-0 ${claimed > 0 ? 'text-accent' : 'text-text-quaternary'}`}>\n {claimed > 0 ? claimed : '—'}\n </span>\n <span className={`text-[10px] font-mono tabular-nums w-8 text-right shrink-0 ${resolved > 0 ? 'text-text-secondary' : 'text-text-quaternary'}`}>\n {resolved > 0 ? resolved : '—'}\n </span>\n </div>\n );\n })}\n </div>\n\n <p className=\"text-[9px] text-text-quaternary mt-5\">\n Select a station for queue detail.\n </p>\n </>\n );\n}\n\nexport function StationDetailPanel({\n role,\n allMetrics,\n orderedRoles,\n globalPeriod,\n onClose,\n}: StationDetailPanelProps) {\n return (\n <div className=\"w-[280px] shrink-0 px-6 py-8 flex flex-col overflow-y-auto min-h-0\">\n {role ? (\n <RoleView role={role} globalPeriod={globalPeriod} onClose={onClose} />\n ) : (\n <OverviewPanel allMetrics={allMetrics} orderedRoles={orderedRoles} period={globalPeriod} />\n )}\n </div>\n );\n}\n","import { useState, useMemo, useCallback } from 'react';\nimport { Link, useNavigate, useSearchParams } from 'react-router-dom';\nimport { GitMerge, RefreshCw } from 'lucide-react';\nimport { useRoleDetails, type RoleDetail } from '../../api/roles';\nimport { useStationMetrics } from '../../api/escalations';\nimport type { StationMetric } from '../../api/escalations';\nimport { useStationMetricsEvents } from '../../hooks/useEventHooks';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport {\n PaceChart,\n ACTIVE_COLOR,\n QUEUED_COLOR,\n RESOLVED_COLOR,\n TARGET_COLOR,\n PRIORITY_COLOR,\n PRIORITY_TEXT_COLOR,\n type ChartStation,\n} from './PaceChart';\nimport { StationDetailPanel } from './StationDetailPanel';\nimport { priorityQueueLink } from './priority-link';\n\n// Column band tints — the same hues as the chart's queue-composition bands\n// (~8% alpha), so PENDING/ACTIVE/RESOLVED in the table visually continue the\n// sky/indigo/sage story told above.\nconst TARGET_BAND = `${TARGET_COLOR}14`;\nconst PENDING_BAND = `${QUEUED_COLOR}14`;\nconst ACTIVE_BAND = `${ACTIVE_COLOR}14`;\nconst RESOLVED_BAND = `${RESOLVED_COLOR}14`;\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nconst PERIODS = ['15m', '1h', '24h', '7d', '30d'] as const;\ntype Period = (typeof PERIODS)[number];\n\n// Window length in hours — used to express the target as a count for the\n// selected window (target_per_hour × hours), e.g. 22/h over 15m ≈ 5 expected.\nconst PERIOD_HOURS: Record<Period, number> = {\n '15m': 0.25,\n '1h': 1,\n '24h': 24,\n '7d': 168,\n '30d': 720,\n};\n\ninterface OrderedStation {\n role: RoleDetail;\n depth: number;\n}\n\n/**\n * One sequence of stations, named by its origin role. Execution is a graph;\n * each fragment is the human-readable line the user composed via parent_role.\n * Cross-fragment edges live in upstream_roles and render as a merge affordance\n * on the chart, never as a bend in the line.\n */\ninterface SequenceFragment {\n origin: RoleDetail;\n stations: OrderedStation[];\n}\n\n// ── Fragment builder — BFS per parent_role root, tracking actual depth ────────\n\nfunction buildFragments(roles: RoleDetail[]): SequenceFragment[] {\n const opsRoles = roles.filter((r) => r.ops_visible);\n const roleMap = new Map(opsRoles.map((r) => [r.role, r]));\n const visited = new Set<string>();\n\n // Roots: no parent, or parent not in ops set — each roots its own fragment.\n const roots = opsRoles.filter((r) => !r.parent_role || !roleMap.has(r.parent_role));\n\n const fragments: SequenceFragment[] = roots.map((root) => {\n const stations: OrderedStation[] = [];\n const queue: OrderedStation[] = [{ role: root, depth: 0 }];\n while (queue.length > 0) {\n const item = queue.shift()!;\n if (visited.has(item.role.role)) continue;\n visited.add(item.role.role);\n stations.push(item);\n opsRoles\n .filter((c) => c.parent_role === item.role.role && !visited.has(c.role))\n .forEach((c) => queue.push({ role: c, depth: item.depth + 1 }));\n }\n return { origin: root, stations };\n });\n\n // Unreachable (cycles / dangling) — each stands alone rather than vanishing.\n opsRoles\n .filter((r) => !visited.has(r.role))\n .forEach((r) => fragments.push({ origin: r, stations: [{ role: r, depth: 0 }] }));\n\n // Longest line first — the primary sequence leads; side-quests follow.\n return fragments.sort(\n (a, b) => b.stations.length - a.stations.length || a.origin.role.localeCompare(b.origin.role),\n );\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction fmtMin(v: number | null): string {\n if (v == null) return '—';\n if (v < 1) {\n const s = Math.round(v * 60);\n return s <= 0 ? '< 1s' : `${s}s`;\n }\n if (v < 60) return `${v.toFixed(0)}m`;\n return `${(v / 60).toFixed(1)}h`;\n}\n\nfunction loadBar(pending: number, target: number | null) {\n // No target, or nothing pending — there is no live load to trend. Show the\n // empty state rather than inventing a rate from historical throughput.\n if (!target || pending === 0) return { pct: null, color: 'bg-surface-border' };\n\n const ratio = pending / target;\n const pct = Math.round(ratio * 100);\n // Amber: backlog. Orange: some work but well under pace. Green: healthy.\n const color = ratio > 1.0 ? 'bg-status-warning' : ratio < 0.2 ? 'bg-status-draft' : 'bg-status-success';\n return { pct, color };\n}\n\n// ── Station table row ─────────────────────────────────────────────────────────\n\nfunction StationRow({\n role,\n metric,\n selected,\n onClick,\n}: {\n role: RoleDetail;\n metric: StationMetric | undefined;\n selected: boolean;\n onClick: () => void;\n}) {\n const pending = metric?.pending ?? 0;\n const claimed = metric?.claimed ?? 0;\n const resolved = metric?.resolved ?? 0;\n const priorityCount = metric?.priority_count ?? 0;\n const target = role.target_per_hour ?? null;\n const { pct, color } = loadBar(pending, target);\n const barWidth = pct != null ? Math.min(100, pct) : 0;\n\n return (\n <>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={onClick}\n onKeyDown={(e) => { if (e.key === 'Enter') onClick(); }}\n className={`grid items-center gap-4 pr-3 cursor-pointer transition-colors ${\n selected ? 'border-l-2 !border-l-accent pl-2.5' : 'pl-3'\n }`}\n style={{ gridTemplateColumns: '1fr 64px 56px 56px 60px 72px 72px 104px' }}\n >\n {/* Role name */}\n <div className=\"flex items-center gap-1.5 min-w-0 py-1.5\">\n <span\n className=\"font-mono font-bold text-text-primary truncate text-[11px]\"\n >\n {role.role}\n </span>\n {role.title && (\n <span className=\"text-[10px] text-text-tertiary truncate\">{role.title}</span>\n )}\n {(role.upstream_roles?.length ?? 0) > 0 && (\n <span title={`Fed by ${role.upstream_roles.join(', ')}`} className=\"shrink-0 leading-none\">\n <GitMerge className=\"w-3 h-3 text-text-quaternary\" />\n </span>\n )}\n </div>\n\n {/* Target / hour — emerald band, same hue as the chart's target line */}\n <div\n className=\"self-stretch flex items-center justify-end px-1.5\"\n style={{ backgroundColor: TARGET_BAND }}\n >\n <span\n className={`text-xs font-mono tabular-nums ${\n target != null ? 'text-text-secondary' : 'text-text-quaternary'\n }`}\n >\n {target != null ? target : '—'}\n </span>\n </div>\n\n {/* Pending — sky band, same hue as the chart's waiting band */}\n <div\n className=\"self-stretch flex items-center justify-end px-1.5\"\n style={{ backgroundColor: PENDING_BAND }}\n >\n <span\n className={`text-xs font-mono tabular-nums ${\n pending > 0 ? 'text-text-primary font-semibold' : 'text-text-quaternary'\n }`}\n >\n {pending}\n </span>\n </div>\n\n {/* Active — indigo band, same hue as the chart's worked band */}\n <div\n className=\"self-stretch flex items-center justify-end px-1.5\"\n style={{ backgroundColor: ACTIVE_BAND }}\n >\n <span\n className={`text-xs font-mono tabular-nums ${\n claimed > 0 ? 'text-accent font-semibold' : 'text-text-quaternary'\n }`}\n >\n {claimed}\n </span>\n </div>\n\n {/* Resolved — sage band, same hue as the chart's actual curve */}\n <div\n className=\"self-stretch flex items-center justify-end px-1.5\"\n style={{ backgroundColor: RESOLVED_BAND }}\n >\n <span className=\"text-xs font-mono tabular-nums text-text-quaternary\">\n {resolved}\n </span>\n </div>\n\n {/* P99 wait */}\n <span className=\"text-xs font-mono tabular-nums text-right py-1.5 text-text-secondary\">\n {fmtMin(metric?.wait.p99 ?? null)}\n </span>\n\n {/* P99 work */}\n <span className=\"text-xs font-mono tabular-nums text-right py-1.5 text-text-secondary\">\n {fmtMin(metric?.work.p99 ?? null)}\n </span>\n\n {/* Load mini-bar */}\n <div className=\"flex items-center gap-2 py-1.5\">\n <div className=\"w-12 h-1.5 bg-surface-sunken rounded-full overflow-hidden shrink-0\">\n <div className={`h-full rounded-full ${color}`} style={{ width: `${barWidth}%` }} />\n </div>\n <span\n className={`text-[10px] font-mono tabular-nums ${\n pct != null && pct > 100\n ? 'text-status-warning font-semibold'\n : 'text-text-quaternary'\n }`}\n >\n {pct != null ? `${pct}%` : '—'}\n </span>\n </div>\n </div>\n\n {/* Priority sub-row — unclaimed items past the role's age threshold */}\n {priorityCount > 0 && (\n <div className=\"flex items-center gap-1.5 pb-2 pl-3.5\">\n <span\n className=\"w-2.5 h-2.5 rounded-full dot-ring shrink-0\"\n style={{ backgroundColor: PRIORITY_COLOR }}\n />\n <Link\n to={priorityQueueLink(role)}\n className=\"text-[10px] hover:underline\"\n style={{ color: PRIORITY_TEXT_COLOR }}\n onClick={(e) => e.stopPropagation()}\n >\n {priorityCount} priority — pull oldest first →\n </Link>\n </div>\n )}\n </>\n );\n}\n\n// ── Table header ──────────────────────────────────────────────────────────────\n\nfunction TableHead() {\n // Queue-state columns carry the chart's band hue into the table.\n const cols: { label: string; band?: string; hue?: string }[] = [\n { label: 'ROLE' },\n { label: 'TARGET/H', band: TARGET_BAND, hue: TARGET_COLOR },\n { label: 'PENDING', band: PENDING_BAND, hue: QUEUED_COLOR },\n { label: 'CLAIMED', band: ACTIVE_BAND, hue: ACTIVE_COLOR },\n { label: 'RESOLVED', band: RESOLVED_BAND, hue: RESOLVED_COLOR },\n { label: 'P99 WAIT' },\n { label: 'P99 WORK' },\n { label: 'TREND' },\n ];\n return (\n <div\n className=\"grid items-center gap-4 px-3 border-b border-surface-border mb-0.5\"\n style={{ gridTemplateColumns: '1fr 64px 56px 56px 60px 72px 72px 104px' }}\n >\n {cols.map((col, i) =>\n col.band ? (\n <div\n key={col.label}\n className=\"self-stretch flex items-center justify-end px-1.5\"\n style={{ backgroundColor: col.band }}\n >\n <span\n className=\"text-[9px] font-semibold uppercase tracking-wider\"\n style={{ color: col.hue }}\n >\n {col.label}\n </span>\n </div>\n ) : (\n <span\n key={col.label}\n className={`text-[9px] font-semibold uppercase tracking-wider text-text-quaternary py-1.5 ${\n i > 0 && i < 7 ? 'text-right' : ''\n }`}\n >\n {col.label}\n </span>\n ),\n )}\n </div>\n );\n}\n\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function OperationsPage() {\n // 1h default: long enough to show a whole simulation shift's shape,\n // short enough that stale history doesn't drown the current run.\n const [period, setPeriod] = useState<Period>('1h');\n const [selectedRole, setSelectedRole] = useState<string | null>(null);\n const [refreshing, setRefreshing] = useState(false);\n\n // Push-driven refresh: every escalation event invalidates ['stationMetrics']\n // through the central event system (debounced, transport-agnostic). The\n // header's refresh button covers user-initiated reloads.\n useStationMetricsEvents();\n\n const { data: roleData, isLoading: rolesLoading, refetch: refetchRoles } = useRoleDetails();\n const {\n data: metricsData,\n isLoading: metricsLoading,\n refetch: refetchMetrics,\n } = useStationMetrics(period);\n\n const roles = roleData?.roles ?? [];\n const metrics = metricsData?.stations ?? [];\n\n // Sequence fragments, one per parent_role root. The active one is\n // DEEP-LINKED (?fragment=<origin role>) and each switch is a history entry,\n // so a shared link opens the same sequence and back/forward walks them.\n const fragments = useMemo((): SequenceFragment[] => buildFragments(roles), [roles]);\n const [searchParams, setSearchParams] = useSearchParams();\n const fragmentParam = searchParams.get('fragment');\n const activeFragment =\n fragments.find((f) => f.origin.role === fragmentParam) ?? fragments[0] ?? null;\n const selectFragment = useCallback(\n (origin: string) => {\n setSelectedRole(null);\n setSearchParams((prev) => {\n const p = new URLSearchParams(prev);\n p.set('fragment', origin);\n return p;\n });\n },\n [setSearchParams],\n );\n\n const ordered = activeFragment?.stations ?? [];\n const fragmentRoleSet = useMemo(\n () => new Set(ordered.map(({ role }) => role.role)),\n [ordered],\n );\n const fragmentMetrics = useMemo(\n () => metrics.filter((m) => fragmentRoleSet.has(m.role)),\n [metrics, fragmentRoleSet],\n );\n\n const chartStations = useMemo(\n (): ChartStation[] =>\n ordered.map(({ role: r }) => ({\n role: r.role,\n title: r.title,\n parent_role: r.parent_role,\n target_per_hour: r.target_per_hour ?? null,\n upstream_roles: r.upstream_roles ?? [],\n metric: metrics.find((m) => m.role === r.role),\n })),\n [ordered, metrics],\n );\n\n // Jump to the sequence that feeds this station — the merge glyph's click.\n const handleUpstreamSelect = useCallback(\n (upstreamRole: string) => {\n const target = fragments.find((f) =>\n f.stations.some(({ role }) => role.role === upstreamRole),\n );\n if (target) selectFragment(target.origin.role);\n },\n [fragments, selectFragment],\n );\n\n // Priority-badge click — open the station's queue oldest-first by its facet.\n const navigate = useNavigate();\n const handlePrioritySelect = useCallback(\n (roleName: string) => {\n const detail = roles.find((r) => r.role === roleName);\n if (detail) navigate(priorityQueueLink(detail));\n },\n [roles, navigate],\n );\n\n const selectedRoleDetail =\n ordered.find(({ role }) => role.role === selectedRole)?.role ?? null;\n\n const isLoading = rolesLoading || metricsLoading;\n\n const handleRefresh = async () => {\n setRefreshing(true);\n await Promise.all([refetchRoles(), refetchMetrics()]);\n setRefreshing(false);\n };\n\n const handleSelect = (role: string) =>\n setSelectedRole((prev) => (prev === role ? null : role));\n\n const periodSelector = (\n <div className=\"flex items-center gap-0.5\">\n {PERIODS.map((p) => (\n <button\n key={p}\n onClick={() => setPeriod(p)}\n className={`px-2.5 py-1 text-[10px] font-mono rounded transition-colors ${\n period === p\n ? 'bg-accent/10 text-accent font-semibold'\n : 'text-text-quaternary hover:text-text-secondary'\n }`}\n >\n {p}\n </button>\n ))}\n </div>\n );\n\n return (\n <div className=\"flex flex-col flex-1 min-h-0\">\n <PageHeader\n title=\"Pace Board\"\n docsHash=\"#docs:dashboard.md:pace-board\"\n center={periodSelector}\n actions={\n <button\n onClick={handleRefresh}\n disabled={refreshing}\n className=\"text-text-quaternary hover:text-text-secondary transition-colors disabled:opacity-40\"\n >\n <RefreshCw className={`w-3.5 h-3.5 ${refreshing ? 'animate-spin' : ''}`} />\n </button>\n }\n />\n\n {isLoading ? (\n <div className=\"animate-pulse space-y-6 mt-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-64 bg-surface-sunken rounded w-full\" />\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"h-8 bg-surface-sunken rounded w-full\" />\n ))}\n </div>\n </div>\n ) : fragments.length === 0 ? (\n <div className=\"mt-8\">\n <p className=\"text-sm text-text-secondary mb-2\">Stations appear here once roles are marked visible in Operations.</p>\n <p className=\"text-xs text-text-tertiary\">\n Go to{' '}\n <Link to=\"/admin/roles\" className=\"text-accent hover:underline\">\n Roles\n </Link>{' '}\n and enable <strong>Visible in Operations</strong> on roles that represent pipeline\n stations.\n </p>\n </div>\n ) : (\n /* Console layout: fixed header (above) → flexible middle → fixed table (30vh) */\n <div className=\"flex flex-col flex-1 min-h-0\">\n\n {/* Sequence picker — one tab per fragment, named by its origin role.\n Only rendered when there is more than one story to tell. */}\n {fragments.length > 1 && (\n <div className=\"flex items-center gap-0.5 px-4 pt-2\">\n {fragments.map((f) => {\n const isActive = f.origin.role === activeFragment?.origin.role;\n return (\n <button\n key={f.origin.role}\n onClick={() => selectFragment(f.origin.role)}\n className={`px-2.5 py-1 text-[10px] font-mono rounded transition-colors ${\n isActive\n ? 'bg-accent/10 text-accent font-semibold'\n : 'text-text-quaternary hover:text-text-secondary'\n }`}\n >\n {f.origin.title ?? f.origin.role}\n <span className={`ml-1.5 tabular-nums ${isActive ? 'text-accent/60' : 'text-text-quaternary/60'}`}>\n {f.stations.length}\n </span>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Middle row: flexible height — SVG fills left, sidebar fixed-width right */}\n <div className=\"flex-1 min-h-0 flex items-stretch overflow-hidden\">\n {/* SVG chart — scales to fill available space */}\n <div className=\"flex-1 min-w-0 min-h-0 flex flex-col justify-center overflow-hidden p-4\">\n <PaceChart\n stations={chartStations}\n selectedRole={selectedRole}\n onSelect={handleSelect}\n onUpstreamSelect={handleUpstreamSelect}\n onPrioritySelect={handlePrioritySelect}\n periodHours={PERIOD_HOURS[period]}\n />\n </div>\n {/* Vertical divider */}\n <div className=\"w-px bg-surface-border shrink-0 self-stretch\" />\n {/* Right sidebar — fixed width, scrolls its own content */}\n <StationDetailPanel\n role={selectedRoleDetail}\n allMetrics={fragmentMetrics}\n orderedRoles={ordered.map((o) => o.role)}\n globalPeriod={period}\n onClose={() => setSelectedRole(null)}\n />\n </div>\n\n {/* Bottom row: sized to its rows up to 45vh — header sticky, rows scroll */}\n <div className=\"max-h-[45vh] flex-none flex flex-col border-t border-surface-border overflow-hidden\">\n <TableHead />\n <div className=\"flex-1 min-h-0 overflow-y-auto divide-y divide-surface-border/30\">\n {ordered.map(({ role }) => (\n <StationRow\n key={role.role}\n role={role}\n metric={metrics.find((m) => m.role === role.role)}\n selected={selectedRole === role.role}\n onClick={() => handleSelect(role.role)}\n />\n ))}\n </div>\n </div>\n\n </div>\n )}\n </div>\n );\n}\n"],"names":["W","H","ML","MR","MT","MB","chartW","chartH","bottom","right","EASE","SOLO_HALF","soloSegment","p","linePath","pts","i","catmullPath","segs","p0","p1","p2","p3","cp1x","cp1y","cp2x","cp2y","bandPath","upper","lower","forward","rev","back","backSegs","compact","n","last","ACTIVE_COLOR","QUEUED_COLOR","RESOLVED_COLOR","TARGET_COLOR","PRIORITY_COLOR","PRIORITY_TEXT_COLOR","MIN_GAP","spreadLabels","labels","maxY","sorted","a","b","prev","placed","l","labelY","overflow","PaceChart","stations","selectedRole","onSelect","onUpstreamSelect","onPrioritySelect","periodHours","hoveredIdx","setHoveredIdx","useState","xOf","xMap","s","rows","target","expected","_a","_b","_c","_d","hasTargets","r","maxVal","yScale","v","withTarget","targetPts","actualPts","activePts","pendingPts","targetLinePath","actualSplinePath","activeSplinePath","pendingSplinePath","lastActual","lastTarget","lastActive","lastPending","areaPath","hasQueue","workedBandPath","queuedBandPath","showActiveLabel","showQueuedLabel","endLabels","px","cx","jsxDEV","tp","ap","ar","hasWaiting","pendingLabelY","row","x","cy","isSelected","isHovered","tooltip","tipW","tipX","tipY","e","priorityQueueLink","role","base","orderBy","PERIODS","isPeriod","fmt","min","MetricRow","label","value","PeriodSelector","period","onChange","RoleView","globalPeriod","onClose","setPeriod","data","useStationMetrics","metric","slaMinutes","targetPerHour","workerCount","Fragment","X","Link","ExternalLink","OverviewPanel","allMetrics","orderedRoles","totalPending","m","totalResolved","totalPriority","metricByRole","stationsAtRisk","stationsWithLoad","pending","claimed","resolved","priorityCount","hasAlert","hasLoad","StationDetailPanel","TARGET_BAND","PENDING_BAND","ACTIVE_BAND","RESOLVED_BAND","PERIOD_HOURS","buildFragments","roles","opsRoles","roleMap","visited","fragments","root","queue","item","fmtMin","loadBar","ratio","pct","color","StationRow","selected","onClick","barWidth","GitMerge","TableHead","cols","col","OperationsPage","setSelectedRole","refreshing","setRefreshing","useStationMetricsEvents","roleData","rolesLoading","refetchRoles","useRoleDetails","metricsData","metricsLoading","refetchMetrics","metrics","useMemo","searchParams","setSearchParams","useSearchParams","fragmentParam","activeFragment","f","selectFragment","useCallback","origin","ordered","fragmentRoleSet","fragmentMetrics","chartStations","handleUpstreamSelect","upstreamRole","navigate","useNavigate","handlePrioritySelect","roleName","detail","selectedRoleDetail","isLoading","handleRefresh","handleSelect","periodSelector","PageHeader","RefreshCw","isActive","o"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{k as O,x as S,s as P,v as j,j as a}from"./index-DgCS2Frb.js";import{f as C}from"./useEventHooks-CUUeBSH1.js";import{u as V}from"./roles-CpRcUIMm.js";import{u as L}from"./useFilterParams-Ch-a71bE.js";import{u as R}from"./useDebouncedValue-DmL3uNt_.js";import{b as k}from"./api-path-u2Jf9QXS.js";import{D as F}from"./DataTable-Bf4dgxll.js";import{P as T}from"./PageHeader-DcgGV0Y2.js";import{S as _}from"./StickyPagination-Clm9H840.js";import{R as z,a as A}from"./RowActions--m4F6GW8.js";import{a as w,T as M,E as I}from"./escalation-columns-CyLzgPkz.js";import{L as U}from"./ListToolbar-Dviaskni.js";import{a5 as q}from"./vendor-icons-CNyYGNsk.js";import{c as $}from"./vendor-react-zA2lQFDs.js";import"./vendor-query-DLp59M9_.js";import"./EmptyState-CLVm9KmA.js";import"./FilterBar-DEAbNQqp.js";import"./PriorityBadge-a7u8C9uY.js";import"./RolePill-BAeaQUXX.js";import"./WorkflowPill-Cc2MlYbB.js";import"./escalation-D8mrXtjS.js";function de(){C();const c=$(),{user:i}=O(),{filters:s,setFilter:u,pagination:e,sort:l,setSort:b}=L({filters:{role:"",type:"",priority:"",search:""}}),f=R(s.search,300),h=S(),{data:p}=V(),{data:n}=P(),m={assigned_to:i==null?void 0:i.userId,status:"pending",role:s.role||void 0,type:s.type||void 0,priority:s.priority?parseInt(s.priority):void 0,search:f||void 0,sort_by:l.sort_by||"created_at",order:l.order||"desc"},{data:o,isLoading:g,error:t,refetch:N,isFetching:x}=j({...m,limit:e.pageSize,offset:e.offset}),v=(o==null?void 0:o.escalations)??[],d=(o==null?void 0:o.total)??0,E=k("/escalations",{...m,limit:e.pageSize,offset:e.offset}),D={key:"actions",label:"",render:r=>a.jsxDEV(z,{children:a.jsxDEV(A,{icon:q,title:"Release escalation",onClick:()=>h.mutate(r.id),colorClass:"text-text-tertiary hover:text-status-warning"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/OperatorDashboard.tsx",lineNumber:65,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/OperatorDashboard.tsx",lineNumber:64,columnNumber:7},this),className:"w-16 text-right"},y=[M,...I,D];return a.jsxDEV("div",{children:[a.jsxDEV(T,{title:"My Escalations"},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/OperatorDashboard.tsx",lineNumber:85,columnNumber:7},this),a.jsxDEV(w,{filters:s,setFilter:u,roles:(p==null?void 0:p.roles)??[],types:(n==null?void 0:n.types)??[],actions:a.jsxDEV(U,{onRefresh:()=>N(),isFetching:x,apiPath:E},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/OperatorDashboard.tsx",lineNumber:93,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/OperatorDashboard.tsx",lineNumber:87,columnNumber:7},this),t&&a.jsxDEV("div",{className:"mb-4 px-4 py-3 rounded-md bg-status-error/10 border border-status-error/20 text-xs text-status-error",children:t.message==="Session expired"?"Your session has expired. Please log in again.":`Failed to load escalations: ${t.message}`},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/OperatorDashboard.tsx",lineNumber:102,columnNumber:9},this),a.jsxDEV(F,{columns:y,data:v,keyFn:r=>r.id,onRowClick:r=>c(`/escalations/detail/${r.id}`,{state:{from:"/escalations/queue"}}),isLoading:g,emptyMessage:t?"Unable to load data":"No assigned escalations",sort:l,onSort:b},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/OperatorDashboard.tsx",lineNumber:109,columnNumber:7},this),a.jsxDEV(_,{page:e.page,totalPages:e.totalPages(d),onPageChange:e.setPage,total:d,pageSize:e.pageSize,onPageSizeChange:e.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/operator/OperatorDashboard.tsx",lineNumber:120,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/operator/OperatorDashboard.tsx",lineNumber:84,columnNumber:5},this)}export{de as OperatorDashboard};
|
|
2
|
-
//# sourceMappingURL=OperatorDashboard-BbmgsOmQ.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./index-DgCS2Frb.js";import{B as m}from"./vendor-icons-CNyYGNsk.js";function i({title:s,actions:a,center:o,docsHash:t}){return e.jsxDEV("div",{className:"flex items-center gap-4 mb-10",children:[e.jsxDEV("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:[e.jsxDEV("h1",{className:"text-3xl font-light text-text-primary",children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeader.tsx",lineNumber:17,columnNumber:9},this),t&&e.jsxDEV("button",{onClick:()=>{window.location.hash=t},className:"text-text-quaternary hover:text-accent transition-colors mt-1",title:"Open docs for this page",children:e.jsxDEV(m,{className:"w-4 h-4",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeader.tsx",lineNumber:24,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeader.tsx",lineNumber:19,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/layout/PageHeader.tsx",lineNumber:16,columnNumber:7},this),o,a&&e.jsxDEV("div",{className:`flex items-center gap-3 ${o?"flex-1 justify-end":""}`,children:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeader.tsx",lineNumber:30,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/layout/PageHeader.tsx",lineNumber:15,columnNumber:5},this)}export{i as P};
|
|
2
|
-
//# sourceMappingURL=PageHeader-DcgGV0Y2.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./index-DgCS2Frb.js";import{B as i}from"./vendor-icons-CNyYGNsk.js";function c({title:r,subtitle:s,stats:t,actions:o,docsHash:m}){return e.jsxDEV("div",{className:"flex items-baseline justify-between mb-10",children:[e.jsxDEV("div",{className:"flex items-center gap-4",children:[e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("h1",{className:"text-3xl font-light text-text-primary",children:r},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:29,columnNumber:11},this),m&&e.jsxDEV("button",{onClick:()=>{window.location.hash=m},className:"text-text-quaternary hover:text-accent transition-colors mt-1",title:"Open docs for this page",children:e.jsxDEV(i,{className:"w-4 h-4",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:36,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:31,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:28,columnNumber:9},this),s&&e.jsxDEV("span",{className:"text-sm text-text-tertiary font-light",children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:41,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:27,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-5",children:[t==null?void 0:t.map(a=>e.jsxDEV("div",{className:"flex items-center gap-1.5 text-xs text-text-tertiary",children:[a.dotClass&&e.jsxDEV("span",{className:`w-1.5 h-1.5 rounded-full dot-ring ${a.dotClass}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:47,columnNumber:28},this),e.jsxDEV("span",{children:a.label},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:48,columnNumber:13},this),e.jsxDEV("span",{className:"font-medium text-text-secondary",children:a.value},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:49,columnNumber:13},this)]},a.label,!0,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:46,columnNumber:11},this)),o&&e.jsxDEV("div",{className:"flex items-center gap-3",children:o},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:52,columnNumber:21},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:44,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/layout/PageHeaderWithStats.tsx",lineNumber:26,columnNumber:5},this)}export{c as P};
|
|
2
|
-
//# sourceMappingURL=PageHeaderWithStats-Cf8TYFRh.js.map
|