@hotmeshio/long-tail 0.2.9 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/dashboard/dist/assets/AdminDashboard-Bb6zouF5.js +2 -0
  2. package/dashboard/dist/assets/{AdminDashboard-45Ya2uzl.js.map → AdminDashboard-Bb6zouF5.js.map} +1 -1
  3. package/dashboard/dist/assets/AgentConfigPage-DqHEK73E.js +13 -0
  4. package/dashboard/dist/assets/AgentConfigPage-DqHEK73E.js.map +1 -0
  5. package/dashboard/dist/assets/AgentDetailPage-WwA573u9.js +4 -0
  6. package/dashboard/dist/assets/AgentDetailPage-WwA573u9.js.map +1 -0
  7. package/dashboard/dist/assets/AgentsPage-BZkZ_hXN.js +2 -0
  8. package/dashboard/dist/assets/{AgentsPage--I4d5y9J.js.map → AgentsPage-BZkZ_hXN.js.map} +1 -1
  9. package/dashboard/dist/assets/AvailableEscalationsPage-C-Df3ZsZ.js +2 -0
  10. package/dashboard/dist/assets/AvailableEscalationsPage-C-Df3ZsZ.js.map +1 -0
  11. package/dashboard/dist/assets/BotPicker-CwfVVWxh.js +2 -0
  12. package/dashboard/dist/assets/{BotPicker-DgbzCesR.js.map → BotPicker-CwfVVWxh.js.map} +1 -1
  13. package/dashboard/dist/assets/CapabilitiesPage-DJEQ_5dV.js +2 -0
  14. package/dashboard/dist/assets/{CapabilitiesPage-B2S8_Gsc.js.map → CapabilitiesPage-DJEQ_5dV.js.map} +1 -1
  15. package/dashboard/dist/assets/CollapsibleSection-DaFQGU6S.js +2 -0
  16. package/dashboard/dist/assets/{CollapsibleSection-4Eo3b5ha.js.map → CollapsibleSection-DaFQGU6S.js.map} +1 -1
  17. package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +2 -0
  18. package/dashboard/dist/assets/{ConfirmDeleteModal-Bac7RmDD.js.map → ConfirmDeleteModal-dOxidrSR.js.map} +1 -1
  19. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +2 -0
  20. package/dashboard/dist/assets/{CopyableId-BhwdwAJN.js.map → CopyableId-DmLF-RqZ.js.map} +1 -1
  21. package/dashboard/dist/assets/CredentialsPage-D-tkqdhu.js +2 -0
  22. package/dashboard/dist/assets/{CredentialsPage-CSEBaYx1.js.map → CredentialsPage-D-tkqdhu.js.map} +1 -1
  23. package/dashboard/dist/assets/CronLabel-C6iCjsXd.js +2 -0
  24. package/dashboard/dist/assets/{CronLabel-DV2v2FlP.js.map → CronLabel-C6iCjsXd.js.map} +1 -1
  25. package/dashboard/dist/assets/CustomDurationPicker--wCtBkmT.js +2 -0
  26. package/dashboard/dist/assets/{CustomDurationPicker-B_Oxq_nK.js.map → CustomDurationPicker--wCtBkmT.js.map} +1 -1
  27. package/dashboard/dist/assets/DataTable-D9yuBv0w.js +2 -0
  28. package/dashboard/dist/assets/{DataTable-etck0Zmp.js.map → DataTable-D9yuBv0w.js.map} +1 -1
  29. package/dashboard/dist/assets/DropZone-2mGyDo1P.js +2 -0
  30. package/dashboard/dist/assets/{DropZone-BDpzHWsI.js.map → DropZone-2mGyDo1P.js.map} +1 -1
  31. package/dashboard/dist/assets/ElapsedCell-DKoH0bqR.js +2 -0
  32. package/dashboard/dist/assets/{ElapsedCell-D35Z-HSJ.js.map → ElapsedCell-DKoH0bqR.js.map} +1 -1
  33. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +2 -0
  34. package/dashboard/dist/assets/{EmptyState-Bk3_P-b8.js.map → EmptyState-BcsfPq9T.js.map} +1 -1
  35. package/dashboard/dist/assets/EscalationsOverview-C6A4Q9Ne.js +2 -0
  36. package/dashboard/dist/assets/{EscalationsOverview-Bt6gGFW4.js.map → EscalationsOverview-C6A4Q9Ne.js.map} +1 -1
  37. package/dashboard/dist/assets/EventTable-DWxH0vMp.js +2 -0
  38. package/dashboard/dist/assets/{EventTable-BMk93q8A.js.map → EventTable-DWxH0vMp.js.map} +1 -1
  39. package/dashboard/dist/assets/EventTopicPill-BUxxvpNg.js +2 -0
  40. package/dashboard/dist/assets/{EventTopicPill-9LcMnLF0.js.map → EventTopicPill-BUxxvpNg.js.map} +1 -1
  41. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +2 -0
  42. package/dashboard/dist/assets/{FilterBar-CZGTOMoo.js.map → FilterBar-Ck4K4rzu.js.map} +1 -1
  43. package/dashboard/dist/assets/HomePage-Tlu1j8fK.js +2 -0
  44. package/dashboard/dist/assets/{HomePage-Dtk7mgmf.js.map → HomePage-Tlu1j8fK.js.map} +1 -1
  45. package/dashboard/dist/assets/ListToolbar-DuON-br0.js +2 -0
  46. package/dashboard/dist/assets/{ListToolbar-CJEzypCM.js.map → ListToolbar-DuON-br0.js.map} +1 -1
  47. package/dashboard/dist/assets/McpOverview-byott48x.js +2 -0
  48. package/dashboard/dist/assets/{McpOverview-ChUa4l3t.js.map → McpOverview-byott48x.js.map} +1 -1
  49. package/dashboard/dist/assets/McpQueryDetailPage-ieZPpcPn.js +5 -0
  50. package/dashboard/dist/assets/{McpQueryDetailPage-04CTIN0v.js.map → McpQueryDetailPage-ieZPpcPn.js.map} +1 -1
  51. package/dashboard/dist/assets/McpQueryPage-BOO0ACYO.js +2 -0
  52. package/dashboard/dist/assets/{McpQueryPage-DFnHFdbr.js.map → McpQueryPage-BOO0ACYO.js.map} +1 -1
  53. package/dashboard/dist/assets/McpRunDetailPage-Di8s7-u9.js +2 -0
  54. package/dashboard/dist/assets/{McpRunDetailPage-B95c3bFw.js.map → McpRunDetailPage-Di8s7-u9.js.map} +1 -1
  55. package/dashboard/dist/assets/McpRunsPage-DdUVqUFi.js +2 -0
  56. package/dashboard/dist/assets/{McpRunsPage-DS43YmLU.js.map → McpRunsPage-DdUVqUFi.js.map} +1 -1
  57. package/dashboard/dist/assets/Modal-DEODGeqx.js +2 -0
  58. package/dashboard/dist/assets/{Modal-EUrK2c_A.js.map → Modal-DEODGeqx.js.map} +1 -1
  59. package/dashboard/dist/assets/OperatorDashboard-oGmDbNYv.js +2 -0
  60. package/dashboard/dist/assets/{OperatorDashboard-DBF_AbRH.js.map → OperatorDashboard-oGmDbNYv.js.map} +1 -1
  61. package/dashboard/dist/assets/PageHeader-DLjHNYHX.js +2 -0
  62. package/dashboard/dist/assets/{PageHeader-BuUnJ5NY.js.map → PageHeader-DLjHNYHX.js.map} +1 -1
  63. package/dashboard/dist/assets/PageHeaderWithStats-Oljg3n4j.js +2 -0
  64. package/dashboard/dist/assets/{PageHeaderWithStats-cQKaJBAM.js.map → PageHeaderWithStats-Oljg3n4j.js.map} +1 -1
  65. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +2 -0
  66. package/dashboard/dist/assets/{PriorityBadge-Bl0_pgex.js.map → PriorityBadge-DfQY9St9.js.map} +1 -1
  67. package/dashboard/dist/assets/ProcessDetailPage-Da-miMYZ.js +2 -0
  68. package/dashboard/dist/assets/{ProcessDetailPage-DgeXrHon.js.map → ProcessDetailPage-Da-miMYZ.js.map} +1 -1
  69. package/dashboard/dist/assets/ProcessesListPage-CW-2yFw_.js +2 -0
  70. package/dashboard/dist/assets/{ProcessesListPage-BGiiH4dW.js.map → ProcessesListPage-CW-2yFw_.js.map} +1 -1
  71. package/dashboard/dist/assets/RolePill-Bp10-WfX.js +2 -0
  72. package/dashboard/dist/assets/{RolePill-DsYF2JN9.js.map → RolePill-Bp10-WfX.js.map} +1 -1
  73. package/dashboard/dist/assets/RolesPage-Bg_hEu9H.js +2 -0
  74. package/dashboard/dist/assets/{RolesPage-CQ7vPamb.js.map → RolesPage-Bg_hEu9H.js.map} +1 -1
  75. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +2 -0
  76. package/dashboard/dist/assets/{RowActions-DBpvm3Jy.js.map → RowActions-Dg-Fsm5O.js.map} +1 -1
  77. package/dashboard/dist/assets/RunAsSelector-hYP59xHH.js +2 -0
  78. package/dashboard/dist/assets/{RunAsSelector-ZLKGTYP_.js.map → RunAsSelector-hYP59xHH.js.map} +1 -1
  79. package/dashboard/dist/assets/ServerName-C9lUCFYb.js +2 -0
  80. package/dashboard/dist/assets/{ServerName-B5-E7gZD.js.map → ServerName-C9lUCFYb.js.map} +1 -1
  81. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +2 -0
  82. package/dashboard/dist/assets/{StatCard-B7ySTryP.js.map → StatCard-DlgF0CJC.js.map} +1 -1
  83. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +2 -0
  84. package/dashboard/dist/assets/{StatusBadge-DNXTk01O.js.map → StatusBadge-XQlNFwmH.js.map} +1 -1
  85. package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +2 -0
  86. package/dashboard/dist/assets/{StepIndicator-ftNmaJsu.js.map → StepIndicator-CuUIGxKk.js.map} +1 -1
  87. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +2 -0
  88. package/dashboard/dist/assets/{StickyPagination-CI5AyVVd.js.map → StickyPagination-F9FZsRy9.js.map} +1 -1
  89. package/dashboard/dist/assets/SwimlaneTimeline-2JHwAM2f.js +2 -0
  90. package/dashboard/dist/assets/{SwimlaneTimeline-BA4aFrHf.js.map → SwimlaneTimeline-2JHwAM2f.js.map} +1 -1
  91. package/dashboard/dist/assets/TagInput-Dkljw_WI.js +2 -0
  92. package/dashboard/dist/assets/{TagInput-DfbVwc27.js.map → TagInput-Dkljw_WI.js.map} +1 -1
  93. package/dashboard/dist/assets/TaskDetailPage--9FEVeTB.js +2 -0
  94. package/dashboard/dist/assets/TaskDetailPage--9FEVeTB.js.map +1 -0
  95. package/dashboard/dist/assets/TaskQueuePill-DPwm25Cc.js +2 -0
  96. package/dashboard/dist/assets/{TaskQueuePill-Dtsa8CPO.js.map → TaskQueuePill-DPwm25Cc.js.map} +1 -1
  97. package/dashboard/dist/assets/TasksListPage-kCH4r-70.js +2 -0
  98. package/dashboard/dist/assets/{TasksListPage-Cw46VTuA.js.map → TasksListPage-kCH4r-70.js.map} +1 -1
  99. package/dashboard/dist/assets/TimeAgo-RPbch7Te.js +2 -0
  100. package/dashboard/dist/assets/{TimeAgo-Cx1kK1id.js.map → TimeAgo-RPbch7Te.js.map} +1 -1
  101. package/dashboard/dist/assets/TimestampCell-Dgpl-lKv.js +2 -0
  102. package/dashboard/dist/assets/{TimestampCell-VDp4nVn6.js.map → TimestampCell-Dgpl-lKv.js.map} +1 -1
  103. package/dashboard/dist/assets/ToolPill-D_DIWFJ5.js +2 -0
  104. package/dashboard/dist/assets/{ToolPill-BNaTJhu8.js.map → ToolPill-D_DIWFJ5.js.map} +1 -1
  105. package/dashboard/dist/assets/ToolTestPanel-D1TWdZQi.js +2 -0
  106. package/dashboard/dist/assets/{ToolTestPanel-BickLBjP.js.map → ToolTestPanel-D1TWdZQi.js.map} +1 -1
  107. package/dashboard/dist/assets/UserName-BXZGXJsU.js +2 -0
  108. package/dashboard/dist/assets/{UserName-DCdb6xnk.js.map → UserName-BXZGXJsU.js.map} +1 -1
  109. package/dashboard/dist/assets/WorkflowExecutionPage-DWlNYb2M.js +2 -0
  110. package/dashboard/dist/assets/{WorkflowExecutionPage-BZfxY1iB.js.map → WorkflowExecutionPage-DWlNYb2M.js.map} +1 -1
  111. package/dashboard/dist/assets/WorkflowPill-BbgVTGgI.js +2 -0
  112. package/dashboard/dist/assets/{WorkflowPill-BzhfqGa-.js.map → WorkflowPill-BbgVTGgI.js.map} +1 -1
  113. package/dashboard/dist/assets/WorkflowsDashboard-Dgq8RcD6.js +2 -0
  114. package/dashboard/dist/assets/{WorkflowsDashboard-B7M8kPoH.js.map → WorkflowsDashboard-Dgq8RcD6.js.map} +1 -1
  115. package/dashboard/dist/assets/WorkflowsOverview-DnInrUPO.js +2 -0
  116. package/dashboard/dist/assets/{WorkflowsOverview-1V8vQ-mo.js.map → WorkflowsOverview-DnInrUPO.js.map} +1 -1
  117. package/dashboard/dist/assets/YamlWorkflowsPage-z1Z9J-mc.js +2 -0
  118. package/dashboard/dist/assets/YamlWorkflowsPage-z1Z9J-mc.js.map +1 -0
  119. package/dashboard/dist/assets/{agents-SXs4tMLb.js → agents-C9RLPt1z.js} +2 -2
  120. package/dashboard/dist/assets/{agents-SXs4tMLb.js.map → agents-C9RLPt1z.js.map} +1 -1
  121. package/dashboard/dist/assets/{bots-Ci5aCzDK.js → bots-zyUDnQhH.js} +2 -2
  122. package/dashboard/dist/assets/{bots-Ci5aCzDK.js.map → bots-zyUDnQhH.js.map} +1 -1
  123. package/dashboard/dist/assets/{controlplane-BiPTCZeL.js → controlplane-v-5KV6pl.js} +2 -2
  124. package/dashboard/dist/assets/{controlplane-BiPTCZeL.js.map → controlplane-v-5KV6pl.js.map} +1 -1
  125. package/dashboard/dist/assets/escalation-BseAikei.js +2 -0
  126. package/dashboard/dist/assets/escalation-BseAikei.js.map +1 -0
  127. package/dashboard/dist/assets/escalation-columns-Cs2CkkEs.js +2 -0
  128. package/dashboard/dist/assets/escalation-columns-Cs2CkkEs.js.map +1 -0
  129. package/dashboard/dist/assets/helpers-DVICI_VA.js +2 -0
  130. package/dashboard/dist/assets/{helpers-CQZkvg6D.js.map → helpers-DVICI_VA.js.map} +1 -1
  131. package/dashboard/dist/assets/index-BMIU7Im5.js +63 -0
  132. package/dashboard/dist/assets/index-BMIU7Im5.js.map +1 -0
  133. package/dashboard/dist/assets/index-BP76o_S8.js +2 -0
  134. package/dashboard/dist/assets/{index-DV0_tQW3.js.map → index-BP76o_S8.js.map} +1 -1
  135. package/dashboard/dist/assets/index-BzBZo8Sn.js +2 -0
  136. package/dashboard/dist/assets/{index-C7FUIcaY.js.map → index-BzBZo8Sn.js.map} +1 -1
  137. package/dashboard/dist/assets/index-C0TSBQw8.js +2 -0
  138. package/dashboard/dist/assets/{index-COiEQlp9.js.map → index-C0TSBQw8.js.map} +1 -1
  139. package/dashboard/dist/assets/index-CPpNn3z2.js +6 -0
  140. package/dashboard/dist/assets/{index-DOE7HCzb.js.map → index-CPpNn3z2.js.map} +1 -1
  141. package/dashboard/dist/assets/index-D2tDlpuv.js +2 -0
  142. package/dashboard/dist/assets/{index-Bp5f2OWJ.js.map → index-D2tDlpuv.js.map} +1 -1
  143. package/dashboard/dist/assets/index-DDFK1A8T.js +2 -0
  144. package/dashboard/dist/assets/{index-q4T_i7zT.js.map → index-DDFK1A8T.js.map} +1 -1
  145. package/dashboard/dist/assets/index-DVFm5329.js +5 -0
  146. package/dashboard/dist/assets/index-DVFm5329.js.map +1 -0
  147. package/dashboard/dist/assets/index-DyqdoZPY.js +2 -0
  148. package/dashboard/dist/assets/{index-CSsOukxa.js.map → index-DyqdoZPY.js.map} +1 -1
  149. package/dashboard/dist/assets/index-M17tP_HX.js +15 -0
  150. package/dashboard/dist/assets/{index-DtbAmRkr.js.map → index-M17tP_HX.js.map} +1 -1
  151. package/dashboard/dist/assets/index-XCEX7Zof.js +2 -0
  152. package/dashboard/dist/assets/{index-hfravTJF.js.map → index-XCEX7Zof.js.map} +1 -1
  153. package/dashboard/dist/assets/index-tK8lfgAj.js +2 -0
  154. package/dashboard/dist/assets/index-tK8lfgAj.js.map +1 -0
  155. package/dashboard/dist/assets/{knowledge-D8osen1O.js → knowledge-BhK8xuod.js} +2 -2
  156. package/dashboard/dist/assets/{knowledge-D8osen1O.js.map → knowledge-BhK8xuod.js.map} +1 -1
  157. package/dashboard/dist/assets/{mcp-CUFhWTyT.js → mcp-CWFliwjc.js} +2 -2
  158. package/dashboard/dist/assets/{mcp-CUFhWTyT.js.map → mcp-CWFliwjc.js.map} +1 -1
  159. package/dashboard/dist/assets/{mcp-query-n1t4sNm7.js → mcp-query-Dm7_m5Fi.js} +2 -2
  160. package/dashboard/dist/assets/{mcp-query-n1t4sNm7.js.map → mcp-query-Dm7_m5Fi.js.map} +1 -1
  161. package/dashboard/dist/assets/{mcp-runs-BkRnXbcq.js → mcp-runs-aBDudwEi.js} +2 -2
  162. package/dashboard/dist/assets/{mcp-runs-BkRnXbcq.js.map → mcp-runs-aBDudwEi.js.map} +1 -1
  163. package/dashboard/dist/assets/namespaces-C45c4uoO.js +2 -0
  164. package/dashboard/dist/assets/{namespaces-CacF05ft.js.map → namespaces-C45c4uoO.js.map} +1 -1
  165. package/dashboard/dist/assets/{roles-CjLCgM_6.js → roles-BMAzzeHR.js} +2 -2
  166. package/dashboard/dist/assets/{roles-CjLCgM_6.js.map → roles-BMAzzeHR.js.map} +1 -1
  167. package/dashboard/dist/assets/settings-D0v7RI3o.js +2 -0
  168. package/dashboard/dist/assets/settings-D0v7RI3o.js.map +1 -0
  169. package/dashboard/dist/assets/{tasks-BLCzIHol.js → tasks-DwEUQ6my.js} +2 -2
  170. package/dashboard/dist/assets/{tasks-BLCzIHol.js.map → tasks-DwEUQ6my.js.map} +1 -1
  171. package/dashboard/dist/assets/{useEventHooks-AwwZnweF.js → useEventHooks-BccPxFR6.js} +2 -2
  172. package/dashboard/dist/assets/{useEventHooks-AwwZnweF.js.map → useEventHooks-BccPxFR6.js.map} +1 -1
  173. package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js → useExpandedRows-CkcEntB-.js} +2 -2
  174. package/dashboard/dist/assets/{useExpandedRows-Cg9iq6Vy.js.map → useExpandedRows-CkcEntB-.js.map} +1 -1
  175. package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js → useFilterParams-DZCAaBC7.js} +2 -2
  176. package/dashboard/dist/assets/{useFilterParams-CGRYFw_A.js.map → useFilterParams-DZCAaBC7.js.map} +1 -1
  177. package/dashboard/dist/assets/{useYamlActivityEvents-9Zs0PXY6.js → useYamlActivityEvents-BBioXSKA.js} +2 -2
  178. package/dashboard/dist/assets/{useYamlActivityEvents-9Zs0PXY6.js.map → useYamlActivityEvents-BBioXSKA.js.map} +1 -1
  179. package/dashboard/dist/assets/{users-BtLRzvZE.js → users-CCHT00of.js} +2 -2
  180. package/dashboard/dist/assets/{users-BtLRzvZE.js.map → users-CCHT00of.js.map} +1 -1
  181. package/dashboard/dist/assets/{vendor-icons-1qQ3NKfa.js → vendor-icons-E6836lXZ.js} +2 -2
  182. package/dashboard/dist/assets/{vendor-icons-1qQ3NKfa.js.map → vendor-icons-E6836lXZ.js.map} +1 -1
  183. package/dashboard/dist/assets/vendor-query-B2UbickB.js +18 -0
  184. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +1 -0
  185. package/dashboard/dist/assets/vendor-react-CX88sFS5.js +22 -0
  186. package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +1 -0
  187. package/dashboard/dist/assets/{workflows-B9xdIsfM.js → workflows-DNZf6Pmq.js} +2 -2
  188. package/dashboard/dist/assets/{workflows-B9xdIsfM.js.map → workflows-DNZf6Pmq.js.map} +1 -1
  189. package/dashboard/dist/assets/{yaml-workflows-xOJxyEsQ.js → yaml-workflows-BKZdGciI.js} +2 -2
  190. package/dashboard/dist/assets/{yaml-workflows-xOJxyEsQ.js.map → yaml-workflows-BKZdGciI.js.map} +1 -1
  191. package/dashboard/dist/index.html +4 -4
  192. package/package.json +2 -2
  193. package/dashboard/dist/assets/AdminDashboard-45Ya2uzl.js +0 -2
  194. package/dashboard/dist/assets/AgentConfigPage-BOASC5vi.js +0 -13
  195. package/dashboard/dist/assets/AgentConfigPage-BOASC5vi.js.map +0 -1
  196. package/dashboard/dist/assets/AgentDetailPage-5M7JTcFz.js +0 -4
  197. package/dashboard/dist/assets/AgentDetailPage-5M7JTcFz.js.map +0 -1
  198. package/dashboard/dist/assets/AgentsPage--I4d5y9J.js +0 -2
  199. package/dashboard/dist/assets/AvailableEscalationsPage-CXUkRz18.js +0 -2
  200. package/dashboard/dist/assets/AvailableEscalationsPage-CXUkRz18.js.map +0 -1
  201. package/dashboard/dist/assets/BotPicker-DgbzCesR.js +0 -2
  202. package/dashboard/dist/assets/CapabilitiesPage-B2S8_Gsc.js +0 -2
  203. package/dashboard/dist/assets/CollapsibleSection-4Eo3b5ha.js +0 -2
  204. package/dashboard/dist/assets/ConfirmDeleteModal-Bac7RmDD.js +0 -2
  205. package/dashboard/dist/assets/CopyableId-BhwdwAJN.js +0 -2
  206. package/dashboard/dist/assets/CredentialsPage-CSEBaYx1.js +0 -2
  207. package/dashboard/dist/assets/CronLabel-DV2v2FlP.js +0 -2
  208. package/dashboard/dist/assets/CustomDurationPicker-B_Oxq_nK.js +0 -2
  209. package/dashboard/dist/assets/DataTable-etck0Zmp.js +0 -2
  210. package/dashboard/dist/assets/DropZone-BDpzHWsI.js +0 -2
  211. package/dashboard/dist/assets/ElapsedCell-D35Z-HSJ.js +0 -2
  212. package/dashboard/dist/assets/EmptyState-Bk3_P-b8.js +0 -2
  213. package/dashboard/dist/assets/EscalationsOverview-Bt6gGFW4.js +0 -2
  214. package/dashboard/dist/assets/EventTable-BMk93q8A.js +0 -2
  215. package/dashboard/dist/assets/EventTopicPill-9LcMnLF0.js +0 -2
  216. package/dashboard/dist/assets/FilterBar-CZGTOMoo.js +0 -2
  217. package/dashboard/dist/assets/HomePage-Dtk7mgmf.js +0 -2
  218. package/dashboard/dist/assets/ListToolbar-CJEzypCM.js +0 -2
  219. package/dashboard/dist/assets/McpOverview-ChUa4l3t.js +0 -2
  220. package/dashboard/dist/assets/McpQueryDetailPage-04CTIN0v.js +0 -5
  221. package/dashboard/dist/assets/McpQueryPage-DFnHFdbr.js +0 -2
  222. package/dashboard/dist/assets/McpRunDetailPage-B95c3bFw.js +0 -2
  223. package/dashboard/dist/assets/McpRunsPage-DS43YmLU.js +0 -2
  224. package/dashboard/dist/assets/Modal-EUrK2c_A.js +0 -2
  225. package/dashboard/dist/assets/OperatorDashboard-DBF_AbRH.js +0 -2
  226. package/dashboard/dist/assets/PageHeader-BuUnJ5NY.js +0 -2
  227. package/dashboard/dist/assets/PageHeaderWithStats-cQKaJBAM.js +0 -2
  228. package/dashboard/dist/assets/PriorityBadge-Bl0_pgex.js +0 -2
  229. package/dashboard/dist/assets/ProcessDetailPage-DgeXrHon.js +0 -2
  230. package/dashboard/dist/assets/ProcessesListPage-BGiiH4dW.js +0 -2
  231. package/dashboard/dist/assets/RolePill-DsYF2JN9.js +0 -2
  232. package/dashboard/dist/assets/RolesPage-CQ7vPamb.js +0 -2
  233. package/dashboard/dist/assets/RowActions-DBpvm3Jy.js +0 -2
  234. package/dashboard/dist/assets/RunAsSelector-ZLKGTYP_.js +0 -2
  235. package/dashboard/dist/assets/ServerName-B5-E7gZD.js +0 -2
  236. package/dashboard/dist/assets/StatCard-B7ySTryP.js +0 -2
  237. package/dashboard/dist/assets/StatusBadge-DNXTk01O.js +0 -2
  238. package/dashboard/dist/assets/StepIndicator-ftNmaJsu.js +0 -2
  239. package/dashboard/dist/assets/StickyPagination-CI5AyVVd.js +0 -2
  240. package/dashboard/dist/assets/SwimlaneTimeline-BA4aFrHf.js +0 -2
  241. package/dashboard/dist/assets/TagInput-DfbVwc27.js +0 -2
  242. package/dashboard/dist/assets/TaskDetailPage-A_kHjYRn.js +0 -2
  243. package/dashboard/dist/assets/TaskDetailPage-A_kHjYRn.js.map +0 -1
  244. package/dashboard/dist/assets/TaskQueuePill-Dtsa8CPO.js +0 -2
  245. package/dashboard/dist/assets/TasksListPage-Cw46VTuA.js +0 -2
  246. package/dashboard/dist/assets/TimeAgo-Cx1kK1id.js +0 -2
  247. package/dashboard/dist/assets/TimestampCell-VDp4nVn6.js +0 -2
  248. package/dashboard/dist/assets/ToolPill-BNaTJhu8.js +0 -2
  249. package/dashboard/dist/assets/ToolTestPanel-BickLBjP.js +0 -2
  250. package/dashboard/dist/assets/UserName-DCdb6xnk.js +0 -2
  251. package/dashboard/dist/assets/WorkflowExecutionPage-BZfxY1iB.js +0 -2
  252. package/dashboard/dist/assets/WorkflowPill-BzhfqGa-.js +0 -2
  253. package/dashboard/dist/assets/WorkflowsDashboard-B7M8kPoH.js +0 -2
  254. package/dashboard/dist/assets/WorkflowsOverview-1V8vQ-mo.js +0 -2
  255. package/dashboard/dist/assets/YamlWorkflowsPage-BteCRoV5.js +0 -2
  256. package/dashboard/dist/assets/YamlWorkflowsPage-BteCRoV5.js.map +0 -1
  257. package/dashboard/dist/assets/escalation-D-zr9D9G.js +0 -2
  258. package/dashboard/dist/assets/escalation-D-zr9D9G.js.map +0 -1
  259. package/dashboard/dist/assets/escalation-columns-Bpp7Sdbd.js +0 -2
  260. package/dashboard/dist/assets/escalation-columns-Bpp7Sdbd.js.map +0 -1
  261. package/dashboard/dist/assets/helpers-CQZkvg6D.js +0 -2
  262. package/dashboard/dist/assets/index-Bp5f2OWJ.js +0 -2
  263. package/dashboard/dist/assets/index-C7FUIcaY.js +0 -2
  264. package/dashboard/dist/assets/index-COiEQlp9.js +0 -2
  265. package/dashboard/dist/assets/index-CSsOukxa.js +0 -2
  266. package/dashboard/dist/assets/index-DOE7HCzb.js +0 -6
  267. package/dashboard/dist/assets/index-DV0_tQW3.js +0 -2
  268. package/dashboard/dist/assets/index-Da8R5Fn_.js +0 -281
  269. package/dashboard/dist/assets/index-Da8R5Fn_.js.map +0 -1
  270. package/dashboard/dist/assets/index-DtbAmRkr.js +0 -15
  271. package/dashboard/dist/assets/index-DzL5pT70.js +0 -5
  272. package/dashboard/dist/assets/index-DzL5pT70.js.map +0 -1
  273. package/dashboard/dist/assets/index-OTsFiHXP.js +0 -2
  274. package/dashboard/dist/assets/index-OTsFiHXP.js.map +0 -1
  275. package/dashboard/dist/assets/index-hfravTJF.js +0 -2
  276. package/dashboard/dist/assets/index-q4T_i7zT.js +0 -2
  277. package/dashboard/dist/assets/namespaces-CacF05ft.js +0 -2
  278. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +0 -35
  279. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +0 -1
  280. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +0 -26
  281. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-DzL5pT70.js","sources":["../../src/pages/operator/escalation-detail/EscalationActionBar.tsx","../../src/pages/operator/escalation-detail/EscalationHero.tsx","../../src/components/common/display/SimpleMarkdown.tsx","../../src/components/escalation/RoundsExhaustedContext.tsx","../../src/components/escalation/TriageContext.tsx","../../src/components/escalation/ResolverForm.tsx","../../src/pages/operator/escalation-detail/ResolverSection.tsx","../../src/pages/operator/escalation-detail/EscalationDetailSections.tsx","../../src/pages/operator/escalation-detail/EscalationDetailPage.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { CountdownTimer } from '../../../components/common/display/CountdownTimer';\nimport { UserName } from '../../../components/common/display/UserName';\nimport { CustomDurationPicker } from '../../../components/common/form/CustomDurationPicker';\nimport { useClaimDurations } from '../../../hooks/useClaimDurations';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ActionBarMode =\n | 'available' // unclaimed — show claim controls\n | 'claimed_by_me' // I own it — show resolve/escalate/release\n | 'claimed_by_other'// someone else has it\n | 'terminal'; // resolved or cancelled — nothing to do\n\nexport type ActiveView = 'resolve' | 'escalate' | 'release';\n\nexport interface EscalationActionBarProps {\n mode: ActionBarMode;\n // Active view (controlled by parent)\n activeView: ActiveView;\n onActiveViewChange: (view: ActiveView) => void;\n // Claim\n onClaim: (minutes: number) => void;\n claimPending: boolean;\n // Resolve — JSON lives in viewport, bar reads it for submit\n workflowType: string | null;\n json: string;\n onResolve: (payload: Record<string, unknown>) => void;\n resolvePending: boolean;\n resolveError: Error | null;\n // Triage (controlled by parent — callout + overlay render in page body)\n requestTriage: boolean;\n triageNotes: string;\n // Escalate\n currentRole: string;\n escalationTargets: string[];\n onEscalate: (role: string) => void;\n escalatePending: boolean;\n escalateError: Error | null;\n // Release\n onRelease: () => void;\n releasePending: boolean;\n // Other user\n assignedTo?: string | null;\n assignedUntil?: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function EscalationActionBar(props: EscalationActionBarProps) {\n const {\n mode, activeView, onActiveViewChange,\n onClaim, claimPending,\n workflowType, json, onResolve, resolvePending, resolveError,\n requestTriage, triageNotes,\n currentRole, escalationTargets, onEscalate, escalatePending, escalateError,\n onRelease, releasePending,\n assignedTo, assignedUntil,\n } = props;\n\n const claimDurations = useClaimDurations();\n const [duration, setDuration] = useState('30');\n const [customMinutes, setCustomMinutes] = useState(0);\n const [parseError, setParseError] = useState('');\n const [escalateTarget, setEscalateTarget] = useState('');\n\n const isCustom = duration === 'custom';\n const onCustomChange = useCallback((m: number) => setCustomMinutes(m), []);\n\n if (mode === 'terminal') return null;\n\n const handleClaim = () => {\n const minutes = isCustom ? customMinutes : parseInt(duration);\n if (!minutes || minutes <= 0) return;\n onClaim(minutes);\n };\n\n const handleSubmitResolve = () => {\n setParseError('');\n\n // When triage is requested, ignore the form payload entirely.\n // Only the triage flag and notes matter — the form data (e.g.\n // approved: true) must NOT leak through, as it would confuse\n // the triage workflow into thinking the issue is already resolved.\n if (requestTriage) {\n const payload: Record<string, unknown> = {\n _lt: { needsTriage: true },\n };\n if (triageNotes.trim()) payload.notes = triageNotes.trim();\n onResolve(payload);\n return;\n }\n\n let payload: Record<string, unknown>;\n try {\n payload = JSON.parse(json);\n } catch {\n setParseError('Invalid JSON');\n return;\n }\n onResolve(payload);\n };\n\n const tabClass = (active: boolean) =>\n `text-xs transition-colors ${active ? 'text-accent font-medium' : 'text-text-tertiary hover:text-accent'}`;\n\n return (\n <div className=\"sticky h-[80px] bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-3 pb-5 z-10\" style={{ bottom: 'calc(var(--feed-height, 0px) - 8px)' }} data-testid=\"escalation-action-bar\">\n\n {/* ── Available: claim ── */}\n {mode === 'available' && (\n <div data-testid=\"claim-bar\">\n {/* Duration tab row */}\n <div className=\"flex items-center gap-4 mb-2\">\n {claimDurations.map((opt) => (\n <button\n key={opt.value}\n onClick={() => { setDuration(opt.value); setCustomMinutes(0); }}\n className={tabClass(!isCustom && duration === opt.value)}\n >\n {opt.label}\n </button>\n ))}\n <button\n onClick={() => setDuration('custom')}\n className={tabClass(isCustom)}\n >\n Other\n </button>\n </div>\n {/* Action row — right-aligned */}\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1\" />\n {isCustom && (\n <CustomDurationPicker onChange={onCustomChange} compact autoFocus />\n )}\n <button\n onClick={handleClaim}\n disabled={claimPending || (isCustom && customMinutes <= 0)}\n className=\"btn-primary text-xs\"\n >\n {claimPending ? 'Claiming...' : 'Claim'}\n </button>\n </div>\n </div>\n )}\n\n {/* ── Claimed by other ── */}\n {mode === 'claimed_by_other' && (\n <div className=\"flex items-center gap-4\" data-testid=\"claimed-other-bar\">\n <p className=\"text-sm text-text-secondary\">\n Claimed by <span className=\"font-medium text-text-primary\">{assignedTo ? <UserName userId={assignedTo} /> : 'unknown'}</span>\n </p>\n {assignedUntil && <CountdownTimer until={assignedUntil} />}\n </div>\n )}\n\n {/* ── Claimed by me ── */}\n {mode === 'claimed_by_me' && (\n <div data-testid=\"action-bar\">\n {/* Tab row */}\n <div className=\"flex items-center gap-4 mb-2\">\n <button\n onClick={() => onActiveViewChange('resolve')}\n className={tabClass(activeView === 'resolve')}\n >\n {workflowType ? 'Resolve' : 'Acknowledge'}\n </button>\n {escalationTargets.length > 0 && (\n <button\n onClick={() => onActiveViewChange('escalate')}\n className={tabClass(activeView === 'escalate')}\n >\n Escalate\n </button>\n )}\n <button\n onClick={() => onActiveViewChange('release')}\n className={`text-xs transition-colors ${activeView === 'release' ? 'text-status-error font-medium' : 'text-text-tertiary hover:text-status-error'}`}\n >\n Release\n </button>\n </div>\n\n {/* ── Resolve controls ── */}\n {activeView === 'resolve' && (\n workflowType ? (\n <div className=\"flex items-center gap-4\">\n <div className=\"flex-1\" />\n\n {parseError && <span className=\"text-xs text-status-error\">{parseError}</span>}\n {resolveError && <span className=\"text-xs text-status-error\">{resolveError.message}</span>}\n\n <button\n onClick={handleSubmitResolve}\n disabled={resolvePending}\n className=\"btn-primary text-xs\"\n >\n {resolvePending ? 'Submitting...' : requestTriage ? 'Send to Triage' : 'Submit'}\n </button>\n </div>\n ) : (\n <div className=\"flex items-center\">\n <span className=\"text-xs text-text-secondary\">Notification — acknowledge to resolve</span>\n <div className=\"flex-1\" />\n {resolveError && <span className=\"text-xs text-status-error mr-3\">{resolveError.message}</span>}\n <button\n onClick={() => onResolve({ acknowledged: true })}\n disabled={resolvePending}\n className=\"btn-primary text-xs\"\n >\n {resolvePending ? 'Acknowledging...' : 'Acknowledge'}\n </button>\n </div>\n )\n )}\n\n {/* ── Escalate controls ── */}\n {activeView === 'escalate' && (\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs text-text-secondary\">\n From <span className=\"font-medium text-text-primary\">{currentRole}</span> to\n </span>\n <select\n value={escalateTarget}\n onChange={(e) => setEscalateTarget(e.target.value)}\n className=\"select text-xs\"\n data-testid=\"escalate-select\"\n >\n <option value=\"\">Select role...</option>\n {escalationTargets.map((role) => (\n <option key={role} value={role}>{role}</option>\n ))}\n </select>\n <div className=\"flex-1\" />\n {escalateError && <span className=\"text-xs text-status-error\">{escalateError.message}</span>}\n <button\n onClick={() => onEscalate(escalateTarget)}\n disabled={!escalateTarget || escalatePending}\n className=\"btn-primary text-xs\"\n >\n {escalatePending ? 'Escalating...' : 'Escalate'}\n </button>\n </div>\n )}\n\n {/* ── Release controls ── */}\n {activeView === 'release' && (\n <div className=\"flex items-center gap-3\">\n <span className=\"text-xs text-text-secondary\">Release back to pool?</span>\n <div className=\"flex-1\" />\n <button onClick={() => onActiveViewChange('resolve')} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={onRelease}\n disabled={releasePending}\n className=\"btn-primary text-xs bg-status-error hover:bg-status-error/80\"\n >\n {releasePending ? 'Releasing...' : 'Yes, Release'}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { Bell, User } from 'lucide-react';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { CountdownTimer } from '../../../components/common/display/CountdownTimer';\nimport { Collapsible } from '../../../components/common/layout/Collapsible';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { CopyableId } from '../../../components/common/display/CopyableId';\nimport { UserName } from '../../../components/common/display/UserName';\nimport { isAckEscalation } from '../../../lib/escalation';\nimport type { LTEscalationRecord } from '../../../api/types';\n\nexport function EscalationHero({\n esc,\n claimedByMe: _claimedByMe,\n claimed,\n isTerminal,\n traceUrl,\n}: {\n esc: LTEscalationRecord;\n claimedByMe: boolean;\n claimed: boolean;\n isTerminal: boolean;\n traceUrl: string | null;\n}) {\n const [showDetails, setShowDetails] = useState(false);\n const isAck = isAckEscalation(esc);\n\n return (\n <>\n {/* Title */}\n <div className=\"flex items-center gap-3 mb-2\">\n {isAck && <Bell className=\"w-5 h-5 text-text-tertiary shrink-0\" />}\n <p className=\"text-[1.5rem] leading-snug font-light text-text-secondary\">\n {esc.type}{esc.subtype ? ` / ${esc.subtype}` : ''}\n </p>\n </div>\n\n {/* Description */}\n {esc.description && (\n <p className=\"text-sm leading-relaxed text-text-tertiary mb-4\">\n {esc.description}\n </p>\n )}\n\n {/* Meta bar — labeled sections, baseline-aligned values */}\n <div className=\"flex flex-wrap items-end gap-x-6 gap-y-3 mt-4 mb-2\">\n {/* Status */}\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Status</p>\n <span className=\"mb-1 inline-block\"><StatusBadge status={esc.status} /></span>\n </div>\n\n {/* Role */}\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Role</p>\n <RolePill role={esc.role} size=\"md\" />\n </div>\n\n {/* Created */}\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Created</p>\n <span className=\"inline-flex items-center mb-1 text-xs text-text-secondary\">\n <DateValue date={esc.created_at} />\n </span>\n </div>\n\n {/* Claimed by */}\n {esc.assigned_to && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Claimed by</p>\n <span className=\"inline-flex items-center gap-1.5 text-xs font-medium text-text-primary\">\n <User className=\"w-3 h-3 shrink-0 text-accent/75\" />\n <UserName userId={esc.assigned_to} />\n </span>\n </div>\n )}\n\n {/* Time left */}\n {claimed && !isTerminal && esc.assigned_until && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Time left</p>\n <span className=\"inline-flex items-center h-5\"><CountdownTimer until={esc.assigned_until} /></span>\n </div>\n )}\n\n {/* Resolved */}\n {esc.resolved_at && (\n <div>\n <p className=\"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">Resolved</p>\n <span className=\"inline-flex items-center h-5 text-xs text-text-secondary\">\n <DateValue date={esc.resolved_at} />\n </span>\n </div>\n )}\n\n {/* Details toggle */}\n <div>\n <button\n onClick={() => setShowDetails(!showDetails)}\n className=\"inline-flex items-center gap-1 h-5 text-xs text-text-tertiary hover:text-accent transition-colors\"\n >\n Details\n <svg\n className={`w-3 h-3 transition-transform duration-200 ${showDetails ? 'rotate-180' : ''}`}\n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n </div>\n </div>\n\n <Collapsible open={showDetails}>\n <div className=\"mt-4 bg-surface-raised border border-surface-border rounded-md p-4 flex flex-wrap gap-x-8 gap-y-4\">\n <div className=\"text-left\">\n <span className=\"text-[11px] font-medium text-text-secondary uppercase tracking-wide\">Priority</span>\n <p className=\"text-[12px] text-text-primary mt-0.5\">P{esc.priority}</p>\n </div>\n <CopyableId label=\"Escalation ID\" value={esc.id} />\n {esc.task_id && (\n <CopyableId label=\"Task\" value={esc.task_id} href={`/workflows/tasks/detail/${esc.task_id}`} />\n )}\n <CopyableId label=\"Workflow\" value={esc.workflow_type} />\n <CopyableId label=\"Workflow ID\" value={esc.workflow_id} />\n <CopyableId label=\"Task Queue\" value={esc.task_queue} />\n {esc.origin_id && esc.origin_id !== esc.workflow_id && (\n <CopyableId label=\"Origin\" value={esc.origin_id} />\n )}\n {esc.trace_id && (\n <CopyableId\n label=\"Trace\"\n value={esc.trace_id}\n href={traceUrl ? traceUrl.replace('{traceId}', esc.trace_id) : undefined}\n external\n />\n )}\n </div>\n </Collapsible>\n </>\n );\n}\n","/**\n * Lightweight markdown-to-HTML renderer for simple patterns.\n * No external dependency — handles bold, italic, code, links, headers, lists.\n */\n\nfunction renderInline(text: string): string {\n return text\n // Code spans\n .replace(/`([^`]+)`/g, '<code class=\"px-1 py-0.5 bg-surface-sunken rounded text-xs font-mono\">$1</code>')\n // Bold + italic\n .replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, '<strong><em>$1</em></strong>')\n // Bold\n .replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n // Italic\n .replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n // Links\n .replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, '<a href=\"$2\" class=\"text-accent-primary hover:underline\" target=\"_blank\" rel=\"noopener noreferrer\">$1</a>');\n}\n\nexport function SimpleMarkdown({ content, compact }: { content: string; compact?: boolean }) {\n // Extract fenced code blocks before line-by-line processing\n const segments: Array<{ type: 'code'; lang: string; code: string } | { type: 'text'; text: string }> = [];\n const fencePattern = /^```(\\w*)\\n([\\s\\S]*?)^```$/gm;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = fencePattern.exec(content)) !== null) {\n if (match.index > lastIndex) {\n segments.push({ type: 'text', text: content.slice(lastIndex, match.index) });\n }\n segments.push({ type: 'code', lang: match[1], code: match[2].replace(/\\n$/, '') });\n lastIndex = match.index + match[0].length;\n }\n if (lastIndex < content.length) {\n segments.push({ type: 'text', text: content.slice(lastIndex) });\n }\n\n const sizeClasses = compact\n ? { text: 'text-xs', heading: 'text-xs', list: 'text-xs', code: 'text-[11px]' }\n : { text: 'text-sm', heading: 'text-sm', list: 'text-sm', code: 'text-xs' };\n\n const allParts: string[] = [];\n for (const segment of segments) {\n if (segment.type === 'code') {\n const escaped = segment.code.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n allParts.push(\n `<pre class=\"my-2 p-2.5 bg-surface-sunken rounded-md overflow-x-auto\"><code class=\"${sizeClasses.code} font-mono text-text-secondary leading-relaxed\">${escaped}</code></pre>`,\n );\n continue;\n }\n allParts.push(...renderTextBlock(segment.text, sizeClasses));\n }\n\n return (\n <div\n className=\"prose-sm\"\n dangerouslySetInnerHTML={{ __html: allParts.join('\\n') }}\n />\n );\n}\n\nfunction renderTextBlock(\n text: string,\n sz: { text: string; heading: string; list: string; code: string },\n): string[] {\n const lines = text.split('\\n');\n const htmlParts: string[] = [];\n let inList = false;\n let inTable = false;\n let tableRows: string[][] = [];\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Table rows\n if (trimmed.startsWith('|') && trimmed.endsWith('|')) {\n const cells = trimmed.slice(1, -1).split('|').map((c) => c.trim());\n // Skip separator rows (|---|---|)\n if (cells.every((c) => /^[-:]+$/.test(c))) continue;\n if (!inTable) {\n inTable = true;\n tableRows = [];\n }\n tableRows.push(cells);\n continue;\n }\n if (inTable) {\n inTable = false;\n const [header, ...body] = tableRows;\n htmlParts.push('<div class=\"overflow-x-auto my-2\"><table class=\"text-xs w-full\"><thead><tr>');\n for (const h of header) {\n htmlParts.push(`<th class=\"text-left py-1 px-2 border-b border-border text-text-secondary font-medium\">${renderInline(h)}</th>`);\n }\n htmlParts.push('</tr></thead><tbody>');\n for (const row of body) {\n htmlParts.push('<tr>');\n for (const cell of row) {\n htmlParts.push(`<td class=\"py-1 px-2 border-b border-border/50\">${renderInline(cell)}</td>`);\n }\n htmlParts.push('</tr>');\n }\n htmlParts.push('</tbody></table></div>');\n tableRows = [];\n }\n\n // Empty line\n if (!trimmed) {\n if (inList) { htmlParts.push('</ul>'); inList = false; }\n continue;\n }\n\n // Headers\n if (trimmed.startsWith('### ')) {\n if (inList) { htmlParts.push('</ul>'); inList = false; }\n htmlParts.push(`<h4 class=\"${sz.heading} font-semibold text-text-primary mt-3 mb-1\">${renderInline(trimmed.slice(4))}</h4>`);\n continue;\n }\n if (trimmed.startsWith('## ')) {\n if (inList) { htmlParts.push('</ul>'); inList = false; }\n htmlParts.push(`<h3 class=\"${sz.heading} font-semibold text-text-primary mt-3 mb-1\">${renderInline(trimmed.slice(3))}</h3>`);\n continue;\n }\n\n // Horizontal rule\n if (/^[-*_]{3,}$/.test(trimmed)) {\n if (inList) { htmlParts.push('</ul>'); inList = false; }\n htmlParts.push('<hr class=\"border-border my-3\" />');\n continue;\n }\n\n // List items\n if (/^[-*] /.test(trimmed)) {\n if (!inList) { htmlParts.push('<ul class=\"space-y-1 my-1\">'); inList = true; }\n htmlParts.push(`<li class=\"${sz.list} text-text-secondary flex gap-2\"><span class=\"text-text-tertiary shrink-0\">-</span><span>${renderInline(trimmed.slice(2))}</span></li>`);\n continue;\n }\n\n // Paragraph\n if (inList) { htmlParts.push('</ul>'); inList = false; }\n htmlParts.push(`<p class=\"${sz.text} text-text-secondary my-1\">${renderInline(trimmed)}</p>`);\n }\n\n // Flush any remaining table\n if (inTable && tableRows.length) {\n const [header, ...body] = tableRows;\n htmlParts.push('<div class=\"overflow-x-auto my-2\"><table class=\"text-xs w-full\"><thead><tr>');\n for (const h of header) {\n htmlParts.push(`<th class=\"text-left py-1 px-2 border-b border-border text-text-secondary font-medium\">${renderInline(h)}</th>`);\n }\n htmlParts.push('</tr></thead><tbody>');\n for (const row of body) {\n htmlParts.push('<tr>');\n for (const cell of row) {\n htmlParts.push(`<td class=\"py-1 px-2 border-b border-border/50\">${renderInline(cell)}</td>`);\n }\n htmlParts.push('</tr>');\n }\n htmlParts.push('</tbody></table></div>');\n }\n\n if (inList) htmlParts.push('</ul>');\n\n return htmlParts;\n}\n","import { useState } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { JsonViewer } from '../common/data/JsonViewer';\nimport { SimpleMarkdown } from '../common/display/SimpleMarkdown';\n\ninterface RoundsExhaustedContextProps {\n payload: Record<string, unknown>;\n isTerminal?: boolean;\n resolverPayload?: Record<string, unknown> | null;\n onRetryTriage?: () => void;\n isRetrying?: boolean;\n aiEnabled?: boolean;\n}\n\nfunction SectionLabel({ children }: { children: React.ReactNode }) {\n return (\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1.5\">{children}</p>\n );\n}\n\nexport function RoundsExhaustedContext({ payload, isTerminal, resolverPayload, onRetryTriage, isRetrying, aiEnabled = false }: RoundsExhaustedContextProps) {\n const title = payload.title as string | undefined;\n const summary = payload.summary as string | undefined;\n const diagnosis = payload.diagnosis as string | undefined;\n const toolCalls = payload.tool_calls_made as number | undefined;\n const result = payload.result as Record<string, unknown> | null | undefined;\n\n // Detect triage resolution\n const ltMeta = resolverPayload?._lt as Record<string, unknown> | undefined;\n const wasTriaged = ltMeta?.triaged === true;\n const triageWorkflowId = ltMeta?.triageWorkflowId as string | undefined;\n const isResolvedByTriage = isTerminal && wasTriaged;\n\n const [showResult, setShowResult] = useState(false);\n\n // Resolved by triage — show success state\n if (isResolvedByTriage) {\n return (\n <div className=\"rounded-md border border-status-success/30 bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border\">\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-4 h-4 text-status-success shrink-0\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 1a7 7 0 110 14A7 7 0 018 1zm3.36 4.65a.5.5 0 00-.72 0L7 9.29 5.36 7.65a.5.5 0 10-.72.7l2 2a.5.5 0 00.72 0l4-4a.5.5 0 000-.7z\" />\n </svg>\n <span className=\"text-xs font-medium text-status-success\">Resolved by AI Triage</span>\n </div>\n {typeof toolCalls === 'number' && (\n <span className=\"text-[10px] font-mono px-2 py-0.5 rounded-full bg-status-success/10 text-status-success\">\n {toolCalls} tool calls used\n </span>\n )}\n </div>\n\n {/* Body */}\n <div className=\"px-4 py-4 space-y-4\">\n {title && (\n <p className=\"text-sm font-medium text-text-primary\">{title}</p>\n )}\n\n {diagnosis && (\n <div>\n <SectionLabel>Triage diagnosis</SectionLabel>\n <div className=\"text-xs text-text-primary leading-relaxed\">\n <SimpleMarkdown content={diagnosis} />\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-3\">\n {triageWorkflowId && (\n <Link\n to={`/workflows/executions/${triageWorkflowId}`}\n className=\"text-[10px] text-accent hover:underline\"\n >\n View triage execution\n </Link>\n )}\n </div>\n </div>\n </div>\n );\n }\n\n // Default: warning state\n return (\n <div className=\"rounded-md border border-status-warning/30 bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border\">\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-4 h-4 text-status-warning shrink-0\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 1a7 7 0 110 14A7 7 0 018 1zm0 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 4zm0 7a.75.75 0 100-1.5.75.75 0 000 1.5z\" />\n </svg>\n <span className=\"text-xs font-medium text-status-warning\">Tool Rounds Exhausted</span>\n </div>\n {typeof toolCalls === 'number' && (\n <span className=\"text-[10px] font-mono px-2 py-0.5 rounded-full bg-status-warning/10 text-status-warning\">\n {toolCalls} tool calls used\n </span>\n )}\n </div>\n\n {/* Body */}\n <div className=\"px-4 py-4 space-y-4\">\n {title && (\n <p className=\"text-sm font-medium text-text-primary\">{title}</p>\n )}\n\n {summary && (\n <div>\n <SectionLabel>What happened</SectionLabel>\n <div className=\"text-xs text-text-secondary leading-relaxed\">\n <SimpleMarkdown content={summary} />\n </div>\n </div>\n )}\n\n {diagnosis && (\n <div>\n <SectionLabel>What went wrong</SectionLabel>\n <div className=\"text-xs text-text-primary leading-relaxed\">\n <SimpleMarkdown content={diagnosis} />\n </div>\n </div>\n )}\n\n {result != null && (\n <div>\n <button\n onClick={() => setShowResult(!showResult)}\n className=\"flex items-center gap-1 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary hover:text-text-secondary transition-colors\"\n >\n <svg className={`w-3 h-3 transition-transform ${showResult ? 'rotate-90' : ''}`} viewBox=\"0 0 12 12\" fill=\"currentColor\">\n <path d=\"M4.5 2l4 4-4 4\" />\n </svg>\n Partial results\n </button>\n {showResult && (\n <div className=\"mt-2\">\n <JsonViewer data={result} defaultMode=\"tree\" />\n </div>\n )}\n </div>\n )}\n\n {aiEnabled && onRetryTriage && !isTerminal && (\n <div className=\"pt-2\">\n <button\n onClick={onRetryTriage}\n disabled={isRetrying}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-xs font-medium bg-accent text-text-inverse rounded-md hover:bg-accent/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors\"\n >\n <svg className=\"w-3.5 h-3.5\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n <path d=\"M7 1a6 6 0 100 12A6 6 0 007 1zm2.5 6.5l-3.5 2V5.5l3.5 2z\" />\n </svg>\n {isRetrying ? 'Sending to triage...' : 'Retry with AI Triage'}\n </button>\n </div>\n )}\n </div>\n </div>\n );\n}\n","interface TriageData {\n diagnosis?: string;\n actions_taken?: string[];\n tool_calls_made?: number;\n confidence?: number;\n recommendation?: string;\n correctedData?: Record<string, unknown>;\n originalData?: Record<string, unknown>;\n}\n\ntype Diff = { key: string; label: string; original: unknown; corrected: unknown };\n\n/**\n * Renders a triage summary when escalation payload contains `_triage`.\n *\n * Fully generic — no knowledge of workflow types or field semantics.\n * Diffs `_triage.originalData` against the payload to detect changes.\n * Follows the unboxed section pattern used throughout the dashboard.\n */\nexport function TriageContext({ triage, payload }: {\n triage: TriageData;\n payload: Record<string, unknown>;\n}) {\n const confidence = triage.confidence ?? 0;\n const confidenceColor =\n confidence >= 0.8 ? 'text-status-success' :\n confidence >= 0.5 ? 'text-status-pending' :\n 'text-status-error';\n\n // Generic diff: compare originalData fields to current payload\n const diffs = computeDiffs(triage.originalData, payload);\n\n return (\n <div className=\"space-y-5\">\n {/* Diagnosis + metadata — unboxed, natural flow */}\n {triage.diagnosis && (\n <p className=\"text-sm text-text-primary leading-relaxed\">\n {triage.diagnosis}\n </p>\n )}\n\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-text-tertiary\">\n {triage.tool_calls_made != null && (\n <span>{triage.tool_calls_made} tool call{triage.tool_calls_made !== 1 ? 's' : ''}</span>\n )}\n {triage.tool_calls_made != null && <span className=\"text-text-quaternary\">&middot;</span>}\n <span className={`font-medium ${confidenceColor}`}>\n {Math.round(confidence * 100)}% confidence\n </span>\n </div>\n\n {triage.actions_taken && triage.actions_taken.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5\">\n {triage.actions_taken.map((action, i) => (\n <span\n key={i}\n className=\"inline-flex items-center gap-1.5 px-2 py-0.5 text-[11px]\n text-text-secondary\"\n >\n <svg className=\"w-3 h-3 text-status-success shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2.5}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n {action}\n </span>\n ))}\n </div>\n )}\n\n {triage.recommendation && (\n <p className=\"text-[11px] text-text-tertiary italic\">\n {triage.recommendation}\n </p>\n )}\n\n {/* Generic before/after diffs — separated by subtle dividers */}\n {diffs.length > 0 && (\n <div className=\"space-y-4 pt-2\">\n {diffs.map((diff) => (\n <DiffRow key={diff.key} diff={diff} />\n ))}\n </div>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Generic diff computation\n// ---------------------------------------------------------------------------\n\nfunction computeDiffs(\n original: Record<string, unknown> | undefined,\n current: Record<string, unknown>,\n): Diff[] {\n if (!original) return [];\n\n const diffs: Diff[] = [];\n for (const key of Object.keys(original)) {\n if (key.startsWith('_')) continue;\n const origVal = original[key];\n const currVal = current[key];\n if (currVal === undefined) continue;\n\n if (JSON.stringify(origVal) !== JSON.stringify(currVal)) {\n diffs.push({\n key,\n label: key.replace(/[_-]/g, ' '),\n original: origVal,\n corrected: currVal,\n });\n }\n }\n return diffs;\n}\n\n// ---------------------------------------------------------------------------\n// Diff row — clean, unboxed before/after\n// ---------------------------------------------------------------------------\n\nfunction DiffRow({ diff }: { diff: Diff }) {\n const origStr = renderValue(diff.original);\n const corrStr = renderValue(diff.corrected);\n\n // Both are primitives — side by side with subtle separator\n if (origStr !== null && corrStr !== null) {\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-3\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {diff.label} <span className=\"normal-case font-normal\">(original)</span>\n </p>\n <p className=\"text-sm text-text-tertiary leading-relaxed line-through decoration-text-tertiary/30\">\n {origStr}\n </p>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {diff.label} <span className=\"normal-case font-normal text-status-success\">(corrected)</span>\n </p>\n <p className=\"text-sm text-text-primary leading-relaxed\">\n {corrStr}\n </p>\n </div>\n </div>\n );\n }\n\n // Complex values — stacked\n return (\n <div className=\"space-y-3\">\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {diff.label} <span className=\"normal-case font-normal\">(original)</span>\n </p>\n <pre className=\"text-xs text-text-tertiary font-mono whitespace-pre-wrap leading-relaxed\">\n {typeof diff.original === 'object' ? JSON.stringify(diff.original, null, 2) : String(diff.original)}\n </pre>\n </div>\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {diff.label} <span className=\"normal-case font-normal text-status-success\">(corrected)</span>\n </p>\n <pre className=\"text-xs text-text-primary font-mono whitespace-pre-wrap leading-relaxed\">\n {typeof diff.corrected === 'object' ? JSON.stringify(diff.corrected, null, 2) : String(diff.corrected)}\n </pre>\n </div>\n </div>\n );\n}\n\n/** Render a value as a string if it's a primitive, null otherwise */\nfunction renderValue(val: unknown): string | null {\n if (val === null || val === undefined) return 'null';\n if (typeof val === 'string') return val;\n if (typeof val === 'number' || typeof val === 'boolean') return String(val);\n return null;\n}\n","import { useState, useEffect, useCallback } from 'react';\n\ntype JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };\n\n/**\n * Renders a JSON object as an editable form with typed inputs.\n *\n * - Strings → text input (textarea if > 80 chars)\n * - Booleans → toggle switch\n * - Numbers → number input\n * - Null → disabled placeholder\n * - Objects → nested section\n * - Arrays of strings → tag display\n * - Keys starting with `_` → hidden (preserved in output)\n *\n * Calls `onChange` with the full JSON string on every edit.\n */\nexport function ResolverForm({ value, onChange }: {\n value: string;\n onChange: (json: string) => void;\n}) {\n const [data, setData] = useState<Record<string, JsonValue>>({});\n const [hidden, setHidden] = useState<Record<string, JsonValue>>({});\n const [formSchema, setFormSchema] = useState<Record<string, any> | null>(null);\n const [parseError, setParseError] = useState(false);\n\n // Parse incoming JSON\n useEffect(() => {\n try {\n const parsed = JSON.parse(value);\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n const visible: Record<string, JsonValue> = {};\n const internal: Record<string, JsonValue> = {};\n for (const [k, v] of Object.entries(parsed)) {\n if (k.startsWith('_')) {\n internal[k] = v as JsonValue;\n } else {\n visible[k] = v as JsonValue;\n }\n }\n setData(visible);\n setHidden(internal);\n setFormSchema(\n internal._form_schema && typeof internal._form_schema === 'object'\n ? internal._form_schema as Record<string, any>\n : null,\n );\n setParseError(false);\n }\n } catch {\n setParseError(true);\n }\n }, [value]);\n\n const emitChange = useCallback((updated: Record<string, JsonValue>) => {\n setData(updated);\n onChange(JSON.stringify({ ...updated, ...hidden }, null, 2));\n }, [hidden, onChange]);\n\n const updateField = useCallback((key: string, val: JsonValue) => {\n emitChange({ ...data, [key]: val });\n }, [data, emitChange]);\n\n if (parseError) {\n return (\n <p className=\"text-xs text-status-error\">\n Unable to parse resolver data as form. Use the JSON editor below.\n </p>\n );\n }\n\n const entries = Object.entries(data);\n if (entries.length === 0) {\n return (\n <p className=\"text-xs text-text-tertiary italic\">\n No resolver fields defined.\n </p>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n {entries.map(([key, val]) => (\n <FieldRow\n key={key}\n fieldKey={key}\n value={val}\n onChange={(v) => updateField(key, v)}\n schema={formSchema}\n />\n ))}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Field row — renders appropriate input per type\n// ---------------------------------------------------------------------------\n\nfunction FieldRow({ fieldKey, value, onChange, schema }: {\n fieldKey: string;\n value: JsonValue;\n onChange: (v: JsonValue) => void;\n schema?: Record<string, any> | null;\n}) {\n const label = fieldKey.replace(/[_-]/g, ' ');\n const fieldSchema = schema?.properties?.[fieldKey] as Record<string, any> | undefined;\n\n // Boolean → checkbox\n if (typeof value === 'boolean') {\n return (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={value}\n onChange={(e) => onChange(e.target.checked)}\n className=\"w-3.5 h-3.5 rounded accent-accent\"\n />\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n {label}\n </span>\n </label>\n );\n }\n\n // Number\n if (typeof value === 'number') {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n <input\n type=\"number\"\n value={value}\n onChange={(e) => onChange(parseFloat(e.target.value) || 0)}\n step=\"any\"\n className=\"input text-sm w-full mt-1\"\n />\n </div>\n );\n }\n\n // String\n if (typeof value === 'string') {\n const isPassword = fieldSchema?.format === 'password';\n const enumValues = fieldSchema?.enum as string[] | undefined;\n const helperText = fieldSchema?.description as string | undefined;\n\n if (enumValues?.length) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n {helperText && <p className=\"text-[10px] text-text-tertiary mt-0.5\">{helperText}</p>}\n <select\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"input text-sm w-full mt-1\"\n >\n {enumValues.map((opt) => (\n <option key={opt} value={opt}>{opt}</option>\n ))}\n </select>\n </div>\n );\n }\n\n if (isPassword) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n {helperText && <p className=\"text-[10px] text-text-tertiary mt-0.5\">{helperText}</p>}\n <input\n type=\"password\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"input text-sm w-full mt-1\"\n autoComplete=\"off\"\n />\n </div>\n );\n }\n\n if (value.length > 80) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n {helperText && <p className=\"text-[10px] text-text-tertiary mt-0.5\">{helperText}</p>}\n <textarea\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"input text-sm w-full mt-1 leading-relaxed\"\n rows={Math.min(6, Math.ceil(value.length / 60))}\n />\n </div>\n );\n }\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n {helperText && <p className=\"text-[10px] text-text-tertiary mt-0.5\">{helperText}</p>}\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"input text-sm w-full mt-1\"\n />\n </div>\n );\n }\n\n // Null\n if (value === null) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n <p className=\"text-xs text-text-tertiary italic mt-1\">null</p>\n </div>\n );\n }\n\n // Array of primitives\n if (Array.isArray(value)) {\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n <div className=\"flex flex-wrap gap-1.5 mt-1\">\n {value.map((item, i) => (\n <span\n key={i}\n className=\"px-2 py-0.5 text-[11px] font-mono bg-surface-sunken rounded text-text-secondary\"\n >\n {String(item)}\n </span>\n ))}\n </div>\n </div>\n );\n }\n\n // Nested object → recursive\n if (typeof value === 'object') {\n const entries = Object.entries(value);\n return (\n <div>\n <FieldLabel>{label}</FieldLabel>\n <div className=\"ml-4 mt-2 pl-4 border-l border-accent-faint space-y-3\">\n {entries.map(([k, v]) => (\n <FieldRow\n key={k}\n fieldKey={k}\n value={v}\n onChange={(updated) => onChange({ ...value, [k]: updated })}\n />\n ))}\n </div>\n </div>\n );\n }\n\n return null;\n}\n\nfunction FieldLabel({ children }: { children: React.ReactNode }) {\n return (\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n {children}\n </label>\n );\n}\n","import { useState } from 'react';\nimport { ResolverForm } from '../../../components/escalation/ResolverForm';\n\nexport function ResolverSection({\n json,\n onJsonChange,\n requestTriage,\n onRequestTriageChange,\n triageNotes,\n onTriageNotesChange,\n aiEnabled = false,\n}: {\n json: string;\n onJsonChange: (v: string) => void;\n requestTriage: boolean;\n onRequestTriageChange: (v: boolean) => void;\n triageNotes: string;\n onTriageNotesChange: (v: string) => void;\n aiEnabled?: boolean;\n}) {\n const [resolverView, setResolverView] = useState<'form' | 'json'>('form');\n\n return (\n <>\n {/* Toolbar row: form/JSON toggle + triage callout */}\n <div className=\"flex items-center justify-between mb-3\">\n {aiEnabled && requestTriage ? (\n <button\n onClick={() => onRequestTriageChange(false)}\n className=\"group flex items-center gap-2 text-left\"\n data-testid=\"triage-cancel\"\n >\n <span className=\"flex items-center justify-center w-5 h-5 rounded-full bg-accent/10 text-accent shrink-0\">\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </span>\n <span className=\"text-xs text-text-secondary group-hover:text-text-primary transition-colors\">\n AI Triage active.{' '}\n <span className=\"text-accent group-hover:underline\">Cancel</span>\n </span>\n </button>\n ) : aiEnabled ? (\n <button\n onClick={() => onRequestTriageChange(true)}\n className=\"group flex items-center gap-2.5 text-left my-4\"\n data-testid=\"triage-callout\"\n >\n <span className=\"flex items-center justify-center w-6 h-6 rounded-full bg-accent/10 text-accent shrink-0 animate-[triage-glow_6s_ease-in-out_infinite]\">\n <svg className=\"w-3.5 h-3.5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={2}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M9.663 17h4.674M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n </span>\n <span className=\"text-[13px] text-text-secondary group-hover:text-text-primary transition-colors\">\n This form doesn&apos;t capture the issue?{' '}\n <span className=\"text-accent group-hover:underline\">Request AI Triage</span>\n </span>\n </button>\n ) : (\n <span />\n )}\n\n {!requestTriage && (\n <button\n onClick={() => setResolverView(resolverView === 'form' ? 'json' : 'form')}\n className=\"text-[10px] text-text-tertiary hover:text-accent transition-colors\"\n >\n {resolverView === 'form' ? 'Raw JSON' : 'Form'}\n </button>\n )}\n </div>\n\n <div className=\"relative min-h-[200px]\">\n {/* Form controls */}\n <div className={requestTriage ? 'pointer-events-none select-none' : ''}>\n {resolverView === 'form' ? (\n <ResolverForm value={json} onChange={onJsonChange} />\n ) : (\n <textarea\n value={json}\n onChange={(e) => onJsonChange(e.target.value)}\n className=\"input-json w-full\"\n rows={8}\n spellCheck={false}\n data-testid=\"resolve-json\"\n />\n )}\n </div>\n\n {/* Triage overlay — occludes the form when AI Triage is checked */}\n {aiEnabled && requestTriage && (\n <div\n className=\"absolute inset-0 z-10 flex flex-col bg-surface/90 backdrop-blur-[2px] rounded-md border border-accent/20 p-5\"\n data-testid=\"triage-overlay\"\n >\n <p className=\"text-xs text-text-secondary mb-3 leading-relaxed\">\n The resolution form will not be submitted. Describe the issue\n so AI triage can diagnose and fix it using available tools.\n The corrected result will come back as a new escalation for\n your review.\n </p>\n <textarea\n value={triageNotes}\n onChange={(e) => onTriageNotesChange(e.target.value)}\n placeholder=\"e.g. Content is in Spanish — needs translation to English before review...\"\n className=\"input text-xs w-full flex-1 min-h-[80px] resize-none\"\n autoFocus\n data-testid=\"triage-notes\"\n />\n </div>\n )}\n </div>\n </>\n );\n}\n","import { Link } from 'react-router-dom';\nimport { KeyRound } from 'lucide-react';\nimport { CollapsibleSection } from '../../../components/common/layout/CollapsibleSection';\nimport { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport { RoundsExhaustedContext } from '../../../components/escalation/RoundsExhaustedContext';\nimport { TriageContext } from '../../../components/escalation/TriageContext';\nimport { ResolverSection } from './ResolverSection';\nimport { useAI } from '../../../hooks/useAI';\nimport type { ActiveView } from './EscalationActionBar';\n\ninterface EscalationContextProps {\n isRoundsExhausted: boolean;\n payloadObj: Record<string, unknown> | null;\n isTerminal: boolean;\n resolverPayload: Record<string, unknown> | null;\n onRetryTriage: () => Promise<void>;\n isRetrying: boolean;\n}\n\nexport function EscalationContextBlocks({\n isRoundsExhausted,\n payloadObj,\n isTerminal,\n resolverPayload,\n onRetryTriage,\n isRetrying,\n}: EscalationContextProps) {\n const aiEnabled = useAI();\n return (\n <>\n {/* Rounds-exhausted structured context */}\n {isRoundsExhausted && payloadObj && (\n <div className=\"mt-8\">\n <RoundsExhaustedContext\n payload={payloadObj}\n isTerminal={isTerminal}\n resolverPayload={resolverPayload}\n onRetryTriage={onRetryTriage}\n isRetrying={isRetrying}\n aiEnabled={aiEnabled}\n />\n </div>\n )}\n\n {/* Missing credential context */}\n {payloadObj?.category === 'missing_credential' && (\n <div className=\"mt-8 bg-status-warning/10 border border-status-warning/30 rounded-md px-5 py-4 flex items-start gap-3\">\n <KeyRound size={20} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-sm font-medium text-text-primary mb-1\">Missing Credential</p>\n <p className=\"text-xs text-text-secondary mb-3\">\n This workflow requires a <span className=\"font-medium capitalize\">{String(payloadObj.provider)}</span> credential\n to continue. Register one and then resolve this escalation to retry.\n </p>\n <Link\n to=\"/credentials\"\n className=\"btn-primary text-xs inline-flex items-center gap-1.5\"\n >\n <KeyRound size={12} />\n Go to Credentials\n </Link>\n </div>\n </div>\n )}\n </>\n );\n}\n\ninterface CollapsibleSectionsProps {\n collapsed: Record<string, boolean>;\n toggleSection: (key: string) => void;\n esc: {\n envelope?: unknown;\n workflow_type?: string | null;\n metadata?: unknown;\n };\n escalationPayload: unknown;\n resolverPayload: unknown;\n triageData?: Record<string, unknown>;\n payloadObj: Record<string, unknown> | null;\n isTerminal: boolean;\n claimedByMe: boolean;\n activeView: ActiveView;\n metadataFormSchema: unknown;\n json: string;\n onJsonChange: (v: string) => void;\n requestTriage: boolean;\n onRequestTriageChange: (v: boolean) => void;\n triageNotes: string;\n onTriageNotesChange: (v: string) => void;\n}\n\nexport function EscalationCollapsibleSections({\n collapsed,\n toggleSection,\n esc,\n escalationPayload,\n resolverPayload,\n triageData,\n payloadObj,\n isTerminal,\n claimedByMe,\n activeView,\n metadataFormSchema,\n json,\n onJsonChange,\n requestTriage,\n onRequestTriageChange,\n triageNotes,\n onTriageNotesChange,\n}: CollapsibleSectionsProps) {\n const aiEnabled = useAI();\n return (\n <div className=\"mt-8 space-y-6\">\n {/* Input/Output */}\n <CollapsibleSection\n title=\"Input / Output\"\n sectionKey=\"context\"\n isCollapsed={collapsed.context ?? true}\n onToggle={toggleSection}\n contentClassName=\"mt-4 ml-9\"\n >\n <div className=\"space-y-6\">\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {!!esc.envelope && (\n <div>\n <JsonViewer data={esc.envelope} label=\"Input Envelope\" />\n </div>\n )}\n {escalationPayload != null && (\n <div>\n <JsonViewer data={escalationPayload} label=\"Escalation Context\" />\n </div>\n )}\n </div>\n\n {resolverPayload != null && (\n <div className=\"max-w-xl\">\n <JsonViewer data={resolverPayload} label=\"Resolver Payload\" />\n </div>\n )}\n </div>\n </CollapsibleSection>\n\n {/* Triage context */}\n {triageData && payloadObj && (\n <CollapsibleSection\n title=\"AI Triage\"\n sectionKey=\"triage\"\n isCollapsed={!!collapsed.triage}\n onToggle={toggleSection}\n contentClassName=\"mt-4 ml-9\"\n >\n <TriageContext triage={triageData} payload={payloadObj} />\n </CollapsibleSection>\n )}\n\n {/* Resolver form */}\n {!isTerminal && claimedByMe && activeView === 'resolve' && !!(esc.workflow_type || metadataFormSchema) && (\n <CollapsibleSection\n title=\"Submit Your Resolution\"\n sectionKey=\"resolver\"\n isCollapsed={!!collapsed.resolver}\n onToggle={toggleSection}\n contentClassName=\"mt-4 ml-9\"\n >\n <ResolverSection\n json={json}\n onJsonChange={onJsonChange}\n requestTriage={requestTriage}\n onRequestTriageChange={onRequestTriageChange}\n triageNotes={triageNotes}\n onTriageNotesChange={onTriageNotesChange}\n aiEnabled={aiEnabled}\n />\n </CollapsibleSection>\n )}\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { useAuth } from '../../../hooks/useAuth';\nimport {\n useEscalation,\n useClaimEscalation,\n useResolveEscalation,\n useEscalateToRole,\n} from '../../../api/escalations';\nimport { useEscalationTargets } from '../../../api/roles';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { isEffectivelyClaimed } from '../../../lib/escalation';\nimport { useWorkflowConfigs } from '../../../api/workflows';\nimport { useSettings } from '../../../api/settings';\nimport { useEscalationDetailEvents } from '../../../hooks/useEventHooks';\nimport { EscalationActionBar } from './EscalationActionBar';\nimport { EscalationHero } from './EscalationHero';\nimport type { ActionBarMode, ActiveView } from './EscalationActionBar';\nimport { EscalationContextBlocks, EscalationCollapsibleSections } from './EscalationDetailSections';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction safeParse(value: string | null | undefined): unknown {\n if (!value) return null;\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\nfunction hasTriageData(payload: string | null | undefined): boolean {\n if (!payload) return false;\n try {\n const p = JSON.parse(payload);\n return !!(p && typeof p === 'object' && p._triage);\n } catch { return false; }\n}\n\n// ---------------------------------------------------------------------------\n// Main page\n// ---------------------------------------------------------------------------\n\nexport function EscalationDetailPage() {\n const { id } = useParams<{ id: string }>();\n const { user } = useAuth();\n const navigate = useNavigate();\n const { data: esc, isLoading } = useEscalation(id!);\n useEscalationDetailEvents(id);\n const claim = useClaimEscalation();\n const resolve = useResolveEscalation();\n const escalate = useEscalateToRole();\n const { data: escalationTargets } = useEscalationTargets(esc?.role ?? '');\n const { data: workflowConfigs } = useWorkflowConfigs();\n const { data: settings } = useSettings();\n\n const wfConfig = workflowConfigs?.find((c) => c.workflow_type === esc?.workflow_type);\n const traceUrl = settings?.telemetry?.traceUrl ?? null;\n const [activeView, setActiveView] = useState<ActiveView>('resolve');\n const [json, setJson] = useState('{}');\n\n // Section collapse state\n const [collapsed, setCollapsed] = useState<Record<string, boolean>>({ context: false });\n const toggleSection = (key: string) =>\n setCollapsed((prev) => ({ ...prev, [key]: !prev[key] }));\n\n const [requestTriage, setRequestTriage] = useState(false);\n const [triageNotes, setTriageNotes] = useState('');\n const resolverSchema = wfConfig?.resolver_schema ?? null;\n const metadataFormSchema = (esc?.metadata as any)?.form_schema ?? null;\n const effectiveSchema = metadataFormSchema ?? resolverSchema;\n useEffect(() => {\n const formSchema = metadataFormSchema ?? (resolverSchema?.properties ? resolverSchema : null);\n if (formSchema?.properties) {\n const initial: Record<string, any> = { _form_schema: formSchema };\n for (const [key, def] of Object.entries(formSchema.properties)) {\n const fieldDef = def as Record<string, any>;\n initial[key] = fieldDef.default ?? '';\n }\n setJson(JSON.stringify(initial, null, 2));\n } else {\n setJson(effectiveSchema ? JSON.stringify(effectiveSchema, null, 2) : '{}');\n }\n }, [effectiveSchema, metadataFormSchema, resolverSchema]);\n\n const hasTriage = hasTriageData(esc?.escalation_payload);\n const isRoundsExhausted = esc?.subtype === 'rounds_exhausted';\n const isWaitForHuman = esc?.subtype === 'wait_for_human';\n useEffect(() => {\n if (hasTriage || isRoundsExhausted) {\n setCollapsed((prev) => ({ ...prev, context: true }));\n }\n if (isWaitForHuman && metadataFormSchema) {\n setCollapsed((prev) => ({ ...prev, context: true, resolver: false }));\n }\n }, [hasTriage, isRoundsExhausted, isWaitForHuman, metadataFormSchema]);\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-8\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-32 bg-surface-sunken rounded w-full\" />\n </div>\n );\n }\n\n if (!esc) {\n return <p className=\"text-sm text-text-secondary\">Escalation not found.</p>;\n }\n\n const claimed = isEffectivelyClaimed(esc);\n const claimedByMe = claimed && esc.assigned_to === user?.userId;\n const claimedByOther = claimed && !claimedByMe;\n const isTerminal = esc.status === 'resolved' || esc.status === 'cancelled';\n\n const escalationPayload = safeParse(esc.escalation_payload);\n const resolverPayload = safeParse(esc.resolver_payload);\n\n const payloadObj = (typeof escalationPayload === 'object' && escalationPayload !== null && !Array.isArray(escalationPayload))\n ? escalationPayload as Record<string, unknown>\n : null;\n const triageData = payloadObj?._triage as Record<string, unknown> | undefined;\n\n const actionBarMode: ActionBarMode = isTerminal\n ? 'terminal'\n : claimedByMe\n ? 'claimed_by_me'\n : claimedByOther\n ? 'claimed_by_other'\n : 'available';\n\n const handleClaim = (durationMinutes: number) => {\n claim.mutate({ id: esc.id, durationMinutes });\n setCollapsed({ context: true, triage: true, resolver: false });\n };\n\n const goBack = () => navigate(-1);\n\n const handleResolve = async (payload: Record<string, unknown>) => {\n await resolve.mutateAsync({ id: esc.id, resolverPayload: payload });\n goBack();\n };\n\n const handleEscalate = async (targetRole: string) => {\n if (!targetRole) return;\n await escalate.mutateAsync({ id: esc.id, targetRole });\n goBack();\n };\n\n const handleRetryTriage = async () => {\n if (!claimedByMe) {\n await claim.mutateAsync({ id: esc.id, durationMinutes: 30 });\n }\n const diagnosis = (payloadObj?.diagnosis as string) || esc.description || '';\n await resolve.mutateAsync({\n id: esc.id,\n resolverPayload: { _lt: { needsTriage: true }, notes: diagnosis },\n });\n goBack();\n };\n\n const handleRelease = async () => {\n await claim.mutateAsync({ id: esc.id, durationMinutes: 0 });\n goBack();\n };\n\n return (\n <div className=\"min-h-[calc(100vh-9rem)] flex flex-col\">\n <PageHeader title=\"Escalation\" />\n\n <EscalationHero\n esc={esc}\n claimedByMe={claimedByMe}\n claimed={claimed}\n isTerminal={isTerminal}\n traceUrl={traceUrl}\n />\n\n <EscalationContextBlocks\n isRoundsExhausted={isRoundsExhausted}\n payloadObj={payloadObj}\n isTerminal={isTerminal}\n resolverPayload={resolverPayload as Record<string, unknown> | null}\n onRetryTriage={handleRetryTriage}\n isRetrying={claim.isPending || resolve.isPending}\n />\n\n <EscalationCollapsibleSections\n collapsed={collapsed}\n toggleSection={toggleSection}\n esc={esc}\n escalationPayload={escalationPayload}\n resolverPayload={resolverPayload}\n triageData={triageData}\n payloadObj={payloadObj}\n isTerminal={isTerminal}\n claimedByMe={claimedByMe}\n activeView={activeView}\n metadataFormSchema={metadataFormSchema}\n json={json}\n onJsonChange={setJson}\n requestTriage={requestTriage}\n onRequestTriageChange={setRequestTriage}\n triageNotes={triageNotes}\n onTriageNotesChange={setTriageNotes}\n />\n\n <div className=\"flex-1\" />\n\n <EscalationActionBar\n mode={actionBarMode}\n activeView={activeView}\n onActiveViewChange={setActiveView}\n onClaim={handleClaim}\n claimPending={claim.isPending}\n workflowType={esc.workflow_type}\n json={json}\n onResolve={handleResolve}\n resolvePending={resolve.isPending}\n resolveError={resolve.error as Error | null}\n requestTriage={requestTriage}\n triageNotes={triageNotes}\n currentRole={esc.role}\n escalationTargets={escalationTargets?.targets ?? []}\n onEscalate={handleEscalate}\n escalatePending={escalate.isPending}\n escalateError={escalate.error as Error | null}\n onRelease={handleRelease}\n releasePending={claim.isPending}\n assignedTo={esc.assigned_to}\n assignedUntil={esc.assigned_until}\n />\n </div>\n );\n}\n"],"names":["EscalationActionBar","props","mode","activeView","onActiveViewChange","onClaim","claimPending","workflowType","json","onResolve","resolvePending","resolveError","requestTriage","triageNotes","currentRole","escalationTargets","onEscalate","escalatePending","escalateError","onRelease","releasePending","assignedTo","assignedUntil","claimDurations","useClaimDurations","duration","setDuration","useState","customMinutes","setCustomMinutes","parseError","setParseError","escalateTarget","setEscalateTarget","isCustom","onCustomChange","useCallback","m","handleClaim","minutes","handleSubmitResolve","payload","tabClass","active","jsxDEV","opt","CustomDurationPicker","UserName","CountdownTimer","e","role","EscalationHero","esc","_claimedByMe","claimed","isTerminal","traceUrl","showDetails","setShowDetails","isAck","isAckEscalation","Fragment","Bell","StatusBadge","RolePill","DateValue","User","Collapsible","CopyableId","renderInline","text","SimpleMarkdown","content","compact","segments","fencePattern","lastIndex","match","sizeClasses","allParts","segment","escaped","renderTextBlock","sz","lines","htmlParts","inList","inTable","tableRows","line","trimmed","cells","c","header","body","h","row","cell","SectionLabel","children","RoundsExhaustedContext","resolverPayload","onRetryTriage","isRetrying","aiEnabled","title","summary","diagnosis","toolCalls","result","ltMeta","wasTriaged","triageWorkflowId","isResolvedByTriage","showResult","setShowResult","Link","JsonViewer","TriageContext","triage","confidence","confidenceColor","diffs","computeDiffs","action","i","diff","DiffRow","original","current","key","origVal","currVal","origStr","renderValue","corrStr","val","ResolverForm","value","onChange","data","setData","hidden","setHidden","formSchema","setFormSchema","useEffect","parsed","visible","internal","k","v","emitChange","updated","updateField","entries","FieldRow","fieldKey","schema","label","fieldSchema","_a","FieldLabel","isPassword","enumValues","helperText","item","ResolverSection","onJsonChange","onRequestTriageChange","onTriageNotesChange","resolverView","setResolverView","EscalationContextBlocks","isRoundsExhausted","payloadObj","useAI","KeyRound","EscalationCollapsibleSections","collapsed","toggleSection","escalationPayload","triageData","claimedByMe","metadataFormSchema","CollapsibleSection","safeParse","hasTriageData","p","EscalationDetailPage","id","useParams","user","useAuth","navigate","useNavigate","isLoading","useEscalation","useEscalationDetailEvents","claim","useClaimEscalation","resolve","useResolveEscalation","escalate","useEscalateToRole","useEscalationTargets","workflowConfigs","useWorkflowConfigs","settings","useSettings","wfConfig","setActiveView","setJson","setCollapsed","prev","setRequestTriage","setTriageNotes","resolverSchema","_b","effectiveSchema","initial","def","fieldDef","hasTriage","isWaitForHuman","isEffectivelyClaimed","claimedByOther","actionBarMode","durationMinutes","goBack","handleResolve","handleEscalate","targetRole","handleRetryTriage","handleRelease","PageHeader"],"mappings":"83BAqDO,SAASA,GAAoBC,EAAiC,CACnE,KAAM,CACJ,KAAAC,EAAM,WAAAC,EAAY,mBAAAC,EAClB,QAAAC,EAAS,aAAAC,EACT,aAAAC,EAAc,KAAAC,EAAM,UAAAC,EAAW,eAAAC,EAAgB,aAAAC,EAC/C,cAAAC,EAAe,YAAAC,EACf,YAAAC,EAAa,kBAAAC,EAAmB,WAAAC,EAAY,gBAAAC,EAAiB,cAAAC,EAC7D,UAAAC,EAAW,eAAAC,EACX,WAAAC,EAAY,cAAAC,CAAA,EACVrB,EAEEsB,EAAiBC,GAAA,EACjB,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,IAAI,EACvC,CAACC,EAAeC,CAAgB,EAAIF,EAAAA,SAAS,CAAC,EAC9C,CAACG,EAAYC,CAAa,EAAIJ,EAAAA,SAAS,EAAE,EACzC,CAACK,EAAgBC,CAAiB,EAAIN,EAAAA,SAAS,EAAE,EAEjDO,EAAWT,IAAa,SACxBU,EAAiBC,EAAAA,YAAaC,GAAcR,EAAiBQ,CAAC,EAAG,EAAE,EAEzE,GAAInC,IAAS,WAAY,OAAO,KAEhC,MAAMoC,EAAc,IAAM,CACxB,MAAMC,EAAUL,EAAWN,EAAgB,SAASH,CAAQ,EACxD,CAACc,GAAWA,GAAW,GAC3BlC,EAAQkC,CAAO,CACjB,EAEMC,EAAsB,IAAM,CAOhC,GANAT,EAAc,EAAE,EAMZnB,EAAe,CACjB,MAAM6B,EAAmC,CACvC,IAAK,CAAE,YAAa,EAAA,CAAK,EAEvB5B,EAAY,KAAA,IAAQ4B,EAAQ,MAAQ5B,EAAY,KAAA,GACpDJ,EAAUgC,CAAO,EACjB,MACF,CAEA,IAAIA,EACJ,GAAI,CACFA,EAAU,KAAK,MAAMjC,CAAI,CAC3B,MAAQ,CACNuB,EAAc,cAAc,EAC5B,MACF,CACAtB,EAAUgC,CAAO,CACnB,EAEMC,EAAYC,GAChB,6BAA6BA,EAAS,0BAA4B,sCAAsC,GAE1G,OACEC,SAAC,MAAA,CAAI,UAAU,4GAA4G,MAAO,CAAE,OAAQ,qCAAA,EAAyC,cAAY,wBAG5L,SAAA,CAAA1C,IAAS,aACR0C,SAAC,MAAA,CAAI,cAAY,YAEf,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,+BACZ,SAAA,CAAArB,EAAe,IAAKsB,GACnBD,EAAAA,OAAC,SAAA,CAEC,QAAS,IAAM,CAAElB,EAAYmB,EAAI,KAAK,EAAGhB,EAAiB,CAAC,CAAG,EAC9D,UAAWa,EAAS,CAACR,GAAYT,IAAaoB,EAAI,KAAK,EAEtD,SAAAA,EAAI,KAAA,EAJAA,EAAI,MADX,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOD,EACDD,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMlB,EAAY,QAAQ,EACnC,UAAWgB,EAASR,CAAQ,EAC7B,SAAA,OAAA,EAHD,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAfF,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAgBA,EAEAU,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,QAAA,EAAf,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwB,EACvBV,YACEY,GAAA,CAAqB,SAAUX,EAAgB,QAAO,GAAC,UAAS,IAAjE,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAkE,EAEpES,EAAAA,OAAC,SAAA,CACC,QAASN,EACT,SAAUhC,GAAiB4B,GAAYN,GAAiB,EACxD,UAAU,sBAET,WAAe,cAAgB,OAAA,EALlC,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAXF,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAYA,CAAA,CAAA,EAhCF,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAiCA,EAID1B,IAAS,oBACR0C,EAAAA,OAAC,OAAI,UAAU,0BAA0B,cAAY,oBACnD,SAAA,CAAAA,EAAAA,OAAC,IAAA,CAAE,UAAU,8BAA8B,SAAA,CAAA,cAC9BA,EAAAA,OAAC,QAAK,UAAU,gCAAiC,WAAaA,SAACG,GAAA,CAAS,OAAQ1B,CAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8B,EAAK,WAAjG,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2G,CAAA,CAAA,EADxH,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACCC,GAAiBsB,EAAAA,OAACI,GAAA,CAAe,MAAO1B,CAAA,EAAvB,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsC,CAAA,CAAA,EAJ1D,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EAIDpB,IAAS,iBACR0C,SAAC,MAAA,CAAI,cAAY,aAEf,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMxC,EAAmB,SAAS,EAC3C,UAAWsC,EAASvC,IAAe,SAAS,EAE3C,WAAe,UAAY,aAAA,EAJ9B,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAMCY,EAAkB,OAAS,GAC1B6B,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMxC,EAAmB,UAAU,EAC5C,UAAWsC,EAASvC,IAAe,UAAU,EAC9C,SAAA,UAAA,EAHD,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAOFyC,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMxC,EAAmB,SAAS,EAC3C,UAAW,6BAA6BD,IAAe,UAAY,gCAAkC,4CAA4C,GAClJ,SAAA,SAAA,EAHD,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EApBF,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAqBA,EAGCA,IAAe,YACdI,EACEqC,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,QAAA,EAAf,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwB,EAEvBd,GAAcc,EAAAA,OAAC,OAAA,CAAK,UAAU,4BAA6B,SAAAd,CAAA,EAA7C,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,EACtEnB,GAAgBiC,EAAAA,OAAC,OAAA,CAAK,UAAU,4BAA6B,WAAa,SAA1D,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAkE,EAEnFA,EAAAA,OAAC,SAAA,CACC,QAASJ,EACT,SAAU9B,EACV,UAAU,sBAET,SAAAA,EAAiB,gBAAkBE,EAAgB,iBAAmB,QAAA,EALzE,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,EAEAgC,SAAC,MAAA,CAAI,UAAU,oBACb,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAU,8BAA8B,SAAA,uCAAA,EAA9C,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmF,EACnFA,EAAAA,OAAC,MAAA,CAAI,UAAU,QAAA,EAAf,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwB,EACvBjC,GAAgBiC,EAAAA,OAAC,OAAA,CAAK,UAAU,iCAAkC,WAAa,SAA/D,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAuE,EACxFA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMnC,EAAU,CAAE,aAAc,GAAM,EAC/C,SAAUC,EACV,UAAU,sBAET,WAAiB,mBAAqB,aAAA,EALzC,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAWA,GAKHP,IAAe,YACdyC,SAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,OAAA,CAAK,UAAU,8BAA8B,SAAA,CAAA,QACvCA,SAAC,OAAA,CAAK,UAAU,gCAAiC,SAAA9B,CAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6D,EAAO,KAAA,CAAA,EAD3E,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACA8B,EAAAA,OAAC,SAAA,CACC,MAAOZ,EACP,SAAWiB,GAAMhB,EAAkBgB,EAAE,OAAO,KAAK,EACjD,UAAU,iBACV,cAAY,kBAEZ,SAAA,CAAAL,SAAC,SAAA,CAAO,MAAM,GAAG,SAAA,gBAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA+B,EAC9B7B,EAAkB,IAAKmC,YACrB,SAAA,CAAkB,MAAOA,EAAO,SAAAA,GAApBA,EAAb,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsC,CACvC,CAAA,CAAA,EATH,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAWAN,EAAAA,OAAC,MAAA,CAAI,UAAU,QAAA,EAAf,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwB,EACvB1B,GAAiB0B,EAAAA,OAAC,OAAA,CAAK,UAAU,4BAA6B,WAAc,SAA3D,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmE,EACrFA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAM5B,EAAWgB,CAAc,EACxC,SAAU,CAACA,GAAkBf,EAC7B,UAAU,sBAET,WAAkB,gBAAkB,UAAA,EALvC,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAvBF,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAwBA,EAIDd,IAAe,WACdyC,SAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAU,8BAA8B,SAAA,uBAAA,EAA9C,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmE,EACnEA,EAAAA,OAAC,MAAA,CAAI,UAAU,QAAA,EAAf,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwB,EACxBA,EAAAA,OAAC,UAAO,QAAS,IAAMxC,EAAmB,SAAS,EAAG,UAAU,wBAAwB,SAAA,QAAA,EAAxF,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAwC,EAAAA,OAAC,SAAA,CACC,QAASzB,EACT,SAAUC,EACV,UAAU,+DAET,WAAiB,eAAiB,cAAA,EALrC,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAaA,CAAA,CAAA,EAtGJ,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAwGA,CAAA,CAAA,EA5JN,OAAA,GAAA,CAAA,SAAA,8EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA8JA,CAEJ,CCnQO,SAAS+B,GAAe,CAC7B,IAAAC,EACA,YAAaC,EACb,QAAAC,EACA,WAAAC,EACA,SAAAC,CACF,EAMG,CACD,KAAM,CAACC,EAAaC,CAAc,EAAI/B,EAAAA,SAAS,EAAK,EAC9CgC,EAAQC,GAAgBR,CAAG,EAEjC,OACER,EAAAA,OAAAiB,WAAA,CAEE,SAAA,CAAAjB,EAAAA,OAAC,MAAA,CAAI,UAAU,+BACZ,SAAA,CAAAe,GAASf,EAAAA,OAACkB,GAAA,CAAK,UAAU,qCAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsD,EAChElB,EAAAA,OAAC,IAAA,CAAE,UAAU,4DACV,SAAA,CAAAQ,EAAI,KAAMA,EAAI,QAAU,MAAMA,EAAI,OAAO,GAAK,EAAA,CAAA,EADjD,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,EAGCA,EAAI,aACHR,SAAC,KAAE,UAAU,kDACV,WAAI,aADP,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAIFA,EAAAA,OAAC,MAAA,CAAI,UAAU,qDAEb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,+EAA+E,SAAA,QAAA,EAA5F,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAkG,EAClGA,EAAAA,OAAC,QAAK,UAAU,oBAAoB,kBAACmB,GAAA,CAAY,OAAQX,EAAI,MAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiC,CAAA,EAArE,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAuE,CAAA,CAAA,EAFzE,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,WAGC,MAAA,CACC,SAAA,CAAAR,SAAC,IAAA,CAAE,UAAU,+EAA+E,SAAA,MAAA,EAA5F,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAgG,WAC/FoB,GAAA,CAAS,KAAMZ,EAAI,KAAM,KAAK,IAAA,EAA/B,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoC,CAAA,CAAA,EAFtC,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,WAGC,MAAA,CACC,SAAA,CAAAR,SAAC,IAAA,CAAE,UAAU,+EAA+E,SAAA,SAAA,EAA5F,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmG,EACnGA,EAAAA,OAAC,QAAK,UAAU,4DACd,kBAACqB,EAAA,CAAU,KAAMb,EAAI,UAAA,EAArB,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiC,CAAA,EADnC,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,EAGCA,EAAI,aACHR,EAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,+EAA+E,SAAA,YAAA,EAA5F,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsG,EACtGA,EAAAA,OAAC,OAAA,CAAK,UAAU,yEACd,SAAA,CAAAA,EAAAA,OAACsB,GAAA,CAAK,UAAU,iCAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAkD,EAClDtB,EAAAA,OAACG,GAAA,CAAS,OAAQK,EAAI,WAAA,EAAtB,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmC,CAAA,CAAA,EAFrC,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,CAAA,CAAA,EALF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAMA,EAIDE,GAAW,CAACC,GAAcH,EAAI,yBAC5B,MAAA,CACC,SAAA,CAAAR,SAAC,IAAA,CAAE,UAAU,+EAA+E,SAAA,WAAA,EAA5F,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqG,EACrGA,EAAAA,OAAC,QAAK,UAAU,+BAA+B,kBAACI,GAAA,CAAe,MAAOI,EAAI,cAAA,EAA3B,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA2C,CAAA,EAA1F,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4F,CAAA,CAAA,EAF9F,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,EAIDA,EAAI,aACHR,EAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,+EAA+E,SAAA,UAAA,EAA5F,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoG,EACpGA,EAAAA,OAAC,QAAK,UAAU,2DACd,kBAACqB,EAAA,CAAU,KAAMb,EAAI,WAAA,EAArB,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAkC,CAAA,EADpC,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,WAID,MAAA,CACC,SAAAR,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMc,EAAe,CAACD,CAAW,EAC1C,UAAU,oGACX,SAAA,CAAA,UAECb,EAAAA,OAAC,MAAA,CACC,UAAW,6CAA6Ca,EAAc,aAAe,EAAE,GACvF,KAAK,OAAO,QAAQ,YAAY,OAAO,eAAe,YAAa,EAEnE,kBAAC,OAAA,CAAK,cAAc,QAAQ,eAAe,QAAQ,EAAE,kBAArD,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsE,CAAA,EAJxE,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAWA,EAZF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAaA,CAAA,CAAA,EAhEF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAiEA,WAECU,GAAA,CAAY,KAAMV,EACjB,SAAAb,EAAAA,OAAC,MAAA,CAAI,UAAU,oGACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAU,sEAAsE,SAAA,UAAA,EAAtF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8F,EAC9FA,EAAAA,OAAC,IAAA,CAAE,UAAU,uCAAuC,SAAA,CAAA,IAAEQ,EAAI,QAAA,CAAA,EAA1D,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmE,CAAA,CAAA,EAFrE,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAGA,WACCgB,EAAA,CAAW,MAAM,gBAAgB,MAAOhB,EAAI,EAAA,EAA7C,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiD,EAChDA,EAAI,SACHR,SAACwB,EAAA,CAAW,MAAM,OAAO,MAAOhB,EAAI,QAAS,KAAM,2BAA2BA,EAAI,OAAO,EAAA,EAAzF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6F,WAE9FgB,EAAA,CAAW,MAAM,WAAW,MAAOhB,EAAI,aAAA,EAAxC,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAuD,WACtDgB,EAAA,CAAW,MAAM,cAAc,MAAOhB,EAAI,WAAA,EAA3C,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,WACvDgB,EAAA,CAAW,MAAM,aAAa,MAAOhB,EAAI,UAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsD,EACrDA,EAAI,WAAaA,EAAI,YAAcA,EAAI,aACtCR,SAACwB,EAAA,CAAW,MAAM,SAAS,MAAOhB,EAAI,SAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiD,EAElDA,EAAI,UACHR,EAAAA,OAACwB,EAAA,CACC,MAAM,QACN,MAAOhB,EAAI,SACX,KAAMI,EAAWA,EAAS,QAAQ,YAAaJ,EAAI,QAAQ,EAAI,OAC/D,SAAQ,EAAA,EAJV,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EArBJ,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAuBA,CAAA,EAxBF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAyBA,CAAA,CAAA,EA7GF,OAAA,GAAA,CAAA,SAAA,yEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA8GA,CAEJ,CCxIA,SAASiB,EAAaC,EAAsB,CAC1C,OAAOA,EAEJ,QAAQ,aAAc,iFAAiF,EAEvG,QAAQ,qBAAsB,8BAA8B,EAE5D,QAAQ,iBAAkB,qBAAqB,EAE/C,QAAQ,aAAc,aAAa,EAEnC,QAAQ,2BAA4B,2GAA2G,CACpJ,CAEO,SAASC,EAAe,CAAE,QAAAC,EAAS,QAAAC,GAAmD,CAE3F,MAAMC,EAAiG,CAAA,EACjGC,EAAe,+BACrB,IAAIC,EAAY,EACZC,EACJ,MAAQA,EAAQF,EAAa,KAAKH,CAAO,KAAO,MAC1CK,EAAM,MAAQD,GAChBF,EAAS,KAAK,CAAE,KAAM,OAAQ,KAAMF,EAAQ,MAAMI,EAAWC,EAAM,KAAK,CAAA,CAAG,EAE7EH,EAAS,KAAK,CAAE,KAAM,OAAQ,KAAMG,EAAM,CAAC,EAAG,KAAMA,EAAM,CAAC,EAAE,QAAQ,MAAO,EAAE,EAAG,EACjFD,EAAYC,EAAM,MAAQA,EAAM,CAAC,EAAE,OAEjCD,EAAYJ,EAAQ,QACtBE,EAAS,KAAK,CAAE,KAAM,OAAQ,KAAMF,EAAQ,MAAMI,CAAS,EAAG,EAGhE,MAAME,EAAcL,EAChB,CAAE,KAAM,UAAW,QAAS,UAAW,KAAM,UAAW,KAAM,eAC9D,CAAE,KAAM,UAAW,QAAS,UAAW,KAAM,UAAW,KAAM,SAAA,EAE5DM,EAAqB,CAAA,EAC3B,UAAWC,KAAWN,EAAU,CAC9B,GAAIM,EAAQ,OAAS,OAAQ,CAC3B,MAAMC,EAAUD,EAAQ,KAAK,QAAQ,KAAM,OAAO,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM,EAC9FD,EAAS,KACP,qFAAqFD,EAAY,IAAI,mDAAmDG,CAAO,eAAA,EAEjK,QACF,CACAF,EAAS,KAAK,GAAGG,GAAgBF,EAAQ,KAAMF,CAAW,CAAC,CAC7D,CAEA,OACElC,EAAAA,OAAC,MAAA,CACC,UAAU,WACV,wBAAyB,CAAE,OAAQmC,EAAS,KAAK;AAAA,CAAI,CAAA,CAAE,EAFzD,OAAA,GAAA,CAAA,SAAA,kEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAKJ,CAEA,SAASG,GACPZ,EACAa,EACU,CACV,MAAMC,EAAQd,EAAK,MAAM;AAAA,CAAI,EACvBe,EAAsB,CAAA,EAC5B,IAAIC,EAAS,GACTC,EAAU,GACVC,EAAwB,CAAA,EAE5B,UAAWC,KAAQL,EAAO,CACxB,MAAMM,EAAUD,EAAK,KAAA,EAGrB,GAAIC,EAAQ,WAAW,GAAG,GAAKA,EAAQ,SAAS,GAAG,EAAG,CACpD,MAAMC,EAAQD,EAAQ,MAAM,EAAG,EAAE,EAAE,MAAM,GAAG,EAAE,IAAKE,GAAMA,EAAE,MAAM,EAEjE,GAAID,EAAM,MAAOC,GAAM,UAAU,KAAKA,CAAC,CAAC,EAAG,SACtCL,IACHA,EAAU,GACVC,EAAY,CAAA,GAEdA,EAAU,KAAKG,CAAK,EACpB,QACF,CACA,GAAIJ,EAAS,CACXA,EAAU,GACV,KAAM,CAACM,EAAQ,GAAGC,CAAI,EAAIN,EAC1BH,EAAU,KAAK,6EAA6E,EAC5F,UAAWU,KAAKF,EACdR,EAAU,KAAK,0FAA0FhB,EAAa0B,CAAC,CAAC,OAAO,EAEjIV,EAAU,KAAK,sBAAsB,EACrC,UAAWW,KAAOF,EAAM,CACtBT,EAAU,KAAK,MAAM,EACrB,UAAWY,KAAQD,EACjBX,EAAU,KAAK,mDAAmDhB,EAAa4B,CAAI,CAAC,OAAO,EAE7FZ,EAAU,KAAK,OAAO,CACxB,CACAA,EAAU,KAAK,wBAAwB,EACvCG,EAAY,CAAA,CACd,CAGA,GAAI,CAACE,EAAS,CACRJ,IAAUD,EAAU,KAAK,OAAO,EAAGC,EAAS,IAChD,QACF,CAGA,GAAII,EAAQ,WAAW,MAAM,EAAG,CAC1BJ,IAAUD,EAAU,KAAK,OAAO,EAAGC,EAAS,IAChDD,EAAU,KAAK,cAAcF,EAAG,OAAO,+CAA+Cd,EAAaqB,EAAQ,MAAM,CAAC,CAAC,CAAC,OAAO,EAC3H,QACF,CACA,GAAIA,EAAQ,WAAW,KAAK,EAAG,CACzBJ,IAAUD,EAAU,KAAK,OAAO,EAAGC,EAAS,IAChDD,EAAU,KAAK,cAAcF,EAAG,OAAO,+CAA+Cd,EAAaqB,EAAQ,MAAM,CAAC,CAAC,CAAC,OAAO,EAC3H,QACF,CAGA,GAAI,cAAc,KAAKA,CAAO,EAAG,CAC3BJ,IAAUD,EAAU,KAAK,OAAO,EAAGC,EAAS,IAChDD,EAAU,KAAK,mCAAmC,EAClD,QACF,CAGA,GAAI,SAAS,KAAKK,CAAO,EAAG,CACrBJ,IAAUD,EAAU,KAAK,6BAA6B,EAAGC,EAAS,IACvED,EAAU,KAAK,cAAcF,EAAG,IAAI,4FAA4Fd,EAAaqB,EAAQ,MAAM,CAAC,CAAC,CAAC,cAAc,EAC5K,QACF,CAGIJ,IAAUD,EAAU,KAAK,OAAO,EAAGC,EAAS,IAChDD,EAAU,KAAK,aAAaF,EAAG,IAAI,8BAA8Bd,EAAaqB,CAAO,CAAC,MAAM,CAC9F,CAGA,GAAIH,GAAWC,EAAU,OAAQ,CAC/B,KAAM,CAACK,EAAQ,GAAGC,CAAI,EAAIN,EAC1BH,EAAU,KAAK,6EAA6E,EAC5F,UAAWU,KAAKF,EACdR,EAAU,KAAK,0FAA0FhB,EAAa0B,CAAC,CAAC,OAAO,EAEjIV,EAAU,KAAK,sBAAsB,EACrC,UAAWW,KAAOF,EAAM,CACtBT,EAAU,KAAK,MAAM,EACrB,UAAWY,KAAQD,EACjBX,EAAU,KAAK,mDAAmDhB,EAAa4B,CAAI,CAAC,OAAO,EAE7FZ,EAAU,KAAK,OAAO,CACxB,CACAA,EAAU,KAAK,wBAAwB,CACzC,CAEA,OAAIC,GAAQD,EAAU,KAAK,OAAO,EAE3BA,CACT,CCnJA,SAASa,EAAa,CAAE,SAAAC,GAA2C,CACjE,OACEvD,EAAAA,OAAC,IAAA,CAAE,UAAU,gFAAiF,SAAAuD,CAAA,EAA9F,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAuG,CAE3G,CAEO,SAASC,GAAuB,CAAE,QAAA3D,EAAS,WAAAc,EAAY,gBAAA8C,EAAiB,cAAAC,EAAe,WAAAC,EAAY,UAAAC,EAAY,IAAsC,CAC1J,MAAMC,EAAQhE,EAAQ,MAChBiE,EAAUjE,EAAQ,QAClBkE,EAAYlE,EAAQ,UACpBmE,EAAYnE,EAAQ,gBACpBoE,EAASpE,EAAQ,OAGjBqE,EAAST,GAAA,YAAAA,EAAiB,IAC1BU,GAAaD,GAAA,YAAAA,EAAQ,WAAY,GACjCE,EAAmBF,GAAA,YAAAA,EAAQ,iBAC3BG,EAAqB1D,GAAcwD,EAEnC,CAACG,EAAYC,CAAa,EAAIxF,EAAAA,SAAS,EAAK,EAGlD,OAAIsF,EAEArE,EAAAA,OAAC,MAAA,CAAI,UAAU,+DAEb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,6EACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,uCAAuC,QAAQ,YAAY,KAAK,eAC7E,SAAAA,EAAAA,OAAC,OAAA,CAAK,EAAE,iIAAA,EAAR,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA0I,CAAA,EAD5I,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,SAAC,OAAA,CAAK,UAAU,0CAA0C,SAAA,uBAAA,EAA1D,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+E,CAAA,CAAA,EAJjF,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,EACC,OAAOgE,GAAc,UACpBhE,EAAAA,OAAC,OAAA,CAAK,UAAU,0FACb,SAAA,CAAAgE,EAAU,kBAAA,CAAA,EADb,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAVJ,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAYA,EAGAhE,EAAAA,OAAC,MAAA,CAAI,UAAU,sBACZ,SAAA,CAAA6D,GACC7D,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAyC,SAAA6D,CAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4D,EAG7DE,YACE,MAAA,CACC,SAAA,CAAA/D,EAAAA,OAACsD,GAAa,SAAA,kBAAA,EAAd,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA8B,WAC7B,MAAA,CAAI,UAAU,4CACb,SAAAtD,EAAAA,OAAC2B,EAAA,CAAe,QAASoC,GAAzB,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoC,CAAA,EADtC,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,EAGF/D,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACZ,SAAAoE,GACCpE,EAAAA,OAACwE,GAAA,CACC,GAAI,yBAAyBJ,CAAgB,GAC7C,UAAU,0CACX,SAAA,uBAAA,EAHD,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAKA,EAPJ,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IASA,CAAA,CAAA,EAvBF,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAwBA,CAAA,CAAA,EAzCF,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA0CA,EAMFpE,EAAAA,OAAC,MAAA,CAAI,UAAU,+DAEb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,6EACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,uCAAuC,QAAQ,YAAY,KAAK,eAC7E,SAAAA,EAAAA,OAAC,OAAA,CAAK,EAAE,uIAAA,EAAR,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAgJ,CAAA,EADlJ,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAA,SAAC,OAAA,CAAK,UAAU,0CAA0C,SAAA,uBAAA,EAA1D,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+E,CAAA,CAAA,EAJjF,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,EACC,OAAOgE,GAAc,UACpBhE,EAAAA,OAAC,OAAA,CAAK,UAAU,0FACb,SAAA,CAAAgE,EAAU,kBAAA,CAAA,EADb,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAVJ,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAYA,EAGAhE,EAAAA,OAAC,MAAA,CAAI,UAAU,sBACZ,SAAA,CAAA6D,GACC7D,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAyC,SAAA6D,CAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4D,EAG7DC,YACE,MAAA,CACC,SAAA,CAAA9D,EAAAA,OAACsD,GAAa,SAAA,eAAA,EAAd,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2B,WAC1B,MAAA,CAAI,UAAU,8CACb,SAAAtD,EAAAA,OAAC2B,EAAA,CAAe,QAASmC,GAAzB,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAkC,CAAA,EADpC,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EAGDC,YACE,MAAA,CACC,SAAA,CAAA/D,EAAAA,OAACsD,GAAa,SAAA,iBAAA,EAAd,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6B,WAC5B,MAAA,CAAI,UAAU,4CACb,SAAAtD,EAAAA,OAAC2B,EAAA,CAAe,QAASoC,GAAzB,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoC,CAAA,EADtC,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EAGDE,GAAU,MACTjE,EAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMuE,EAAc,CAACD,CAAU,EACxC,UAAU,6IAEV,SAAA,CAAAtE,SAAC,MAAA,CAAI,UAAW,gCAAgCsE,EAAa,YAAc,EAAE,GAAI,QAAQ,YAAY,KAAK,eACxG,SAAAtE,SAAC,OAAA,CAAK,EAAE,gBAAA,EAAR,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyB,CAAA,EAD3B,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAAM,iBAAA,CAAA,EANR,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EASCsE,GACCtE,EAAAA,OAAC,MAAA,CAAI,UAAU,OACb,kBAACyE,EAAA,CAAW,KAAMR,EAAQ,YAAY,MAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6C,CAAA,EAD/C,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAbJ,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAeA,EAGDL,GAAaF,GAAiB,CAAC/C,GAC9BX,EAAAA,OAAC,MAAA,CAAI,UAAU,OACb,SAAAA,EAAAA,OAAC,SAAA,CACC,QAAS0D,EACT,SAAUC,EACV,UAAU,2LAEV,SAAA,CAAA3D,EAAAA,OAAC,MAAA,CAAI,UAAU,cAAc,QAAQ,YAAY,KAAK,eACpD,SAAAA,EAAAA,OAAC,OAAA,CAAK,EAAE,0DAAA,EAAR,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmE,CAAA,EADrE,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACC2D,EAAa,uBAAyB,sBAAA,CAAA,EARzC,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CASA,EAVF,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAWA,CAAA,CAAA,EAtDJ,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAwDA,CAAA,CAAA,EAzEF,OAAA,GAAA,CAAA,SAAA,sEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA0EA,CAEJ,CChJO,SAASe,GAAc,CAAE,OAAAC,EAAQ,QAAA9E,GAGrC,CACD,MAAM+E,EAAaD,EAAO,YAAc,EAClCE,EACJD,GAAc,GAAM,sBACpBA,GAAc,GAAM,sBACpB,oBAGIE,EAAQC,GAAaJ,EAAO,aAAc9E,CAAO,EAEvD,OACEG,EAAAA,OAAC,MAAA,CAAI,UAAU,YAEZ,SAAA,CAAA2E,EAAO,WACN3E,SAAC,IAAA,CAAE,UAAU,4CACV,WAAO,WADV,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAGFA,EAAAA,OAAC,MAAA,CAAI,UAAU,+DACZ,SAAA,CAAA2E,EAAO,iBAAmB,MACzB3E,EAAAA,OAAC,OAAA,CAAM,SAAA,CAAA2E,EAAO,gBAAgB,aAAWA,EAAO,kBAAoB,EAAI,IAAM,EAAA,CAAA,EAA9E,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAiF,EAElFA,EAAO,iBAAmB,eAAS,OAAA,CAAK,UAAU,uBAAuB,SAAA,KAAvC,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+C,EAClF3E,EAAAA,OAAC,OAAA,CAAK,UAAW,eAAe6E,CAAe,GAC5C,SAAA,CAAA,KAAK,MAAMD,EAAa,GAAG,EAAE,cAAA,CAAA,EADhC,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAQA,EAECD,EAAO,eAAiBA,EAAO,cAAc,OAAS,GACrD3E,EAAAA,OAAC,MAAA,CAAI,UAAU,yBACZ,SAAA2E,EAAO,cAAc,IAAI,CAACK,EAAQC,IACjCjF,EAAAA,OAAC,OAAA,CAEC,UAAU;AAAA,8CAGV,SAAA,CAAAA,EAAAA,OAAC,OAAI,UAAU,uCAAuC,KAAK,OAAO,QAAQ,YAAY,OAAO,eAAe,YAAa,IACvH,kBAAC,OAAA,CAAK,cAAc,QAAQ,eAAe,QAAQ,EAAE,kBAArD,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsE,CAAA,EADxE,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACCgF,CAAA,CAAA,EAPIC,EADP,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAUD,CAAA,EAZH,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAaA,EAGDN,EAAO,gBACN3E,SAAC,KAAE,UAAU,wCACV,WAAO,gBADV,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAID8E,EAAM,OAAS,GACd9E,EAAAA,OAAC,OAAI,UAAU,iBACZ,SAAA8E,EAAM,IAAKI,GACVlF,EAAAA,OAACmF,GAAA,CAAuB,KAAAD,GAAVA,EAAK,IAAnB,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoC,CACrC,GAHH,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAIA,CAAA,CAAA,EA/CJ,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAiDA,CAEJ,CAMA,SAASH,GACPK,EACAC,EACQ,CACR,GAAI,CAACD,EAAU,MAAO,CAAA,EAEtB,MAAMN,EAAgB,CAAA,EACtB,UAAWQ,KAAO,OAAO,KAAKF,CAAQ,EAAG,CACvC,GAAIE,EAAI,WAAW,GAAG,EAAG,SACzB,MAAMC,EAAUH,EAASE,CAAG,EACtBE,EAAUH,EAAQC,CAAG,EACvBE,IAAY,QAEZ,KAAK,UAAUD,CAAO,IAAM,KAAK,UAAUC,CAAO,GACpDV,EAAM,KAAK,CACT,IAAAQ,EACA,MAAOA,EAAI,QAAQ,QAAS,GAAG,EAC/B,SAAUC,EACV,UAAWC,CAAA,CACZ,CAEL,CACA,OAAOV,CACT,CAMA,SAASK,GAAQ,CAAE,KAAAD,GAAwB,CACzC,MAAMO,EAAUC,GAAYR,EAAK,QAAQ,EACnCS,EAAUD,GAAYR,EAAK,SAAS,EAG1C,OAAIO,IAAY,MAAQE,IAAY,KAEhC3F,EAAAA,OAAC,MAAA,CAAI,UAAU,kDACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,OAAC,IAAA,CAAE,UAAU,8EACV,SAAA,CAAAkF,EAAK,MAAM,IAAClF,SAAC,OAAA,CAAK,UAAU,0BAA0B,SAAA,YAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoD,CAAA,CAAA,EADnE,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,SAAC,IAAA,CAAE,UAAU,sFACV,SAAAyF,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAOA,WACC,MAAA,CACC,SAAA,CAAAzF,EAAAA,OAAC,IAAA,CAAE,UAAU,8EACV,SAAA,CAAAkF,EAAK,MAAM,IAAClF,SAAC,OAAA,CAAK,UAAU,8CAA8C,SAAA,aAAA,EAA9D,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyE,CAAA,CAAA,EADxF,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,SAAC,IAAA,CAAE,UAAU,4CACV,SAAA2F,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAOA,CAAA,CAAA,EAhBF,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAiBA,EAMF3F,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,SAAC,MAAA,CACC,SAAA,CAAAA,EAAAA,OAAC,IAAA,CAAE,UAAU,8EACV,SAAA,CAAAkF,EAAK,MAAM,IAAClF,SAAC,OAAA,CAAK,UAAU,0BAA0B,SAAA,YAAA,EAA1C,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoD,CAAA,CAAA,EADnE,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,WACC,MAAA,CAAI,UAAU,2EACZ,SAAA,OAAOkF,EAAK,UAAa,SAAW,KAAK,UAAUA,EAAK,SAAU,KAAM,CAAC,EAAI,OAAOA,EAAK,QAAQ,CAAA,EADpG,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAOA,WACC,MAAA,CACC,SAAA,CAAAlF,EAAAA,OAAC,IAAA,CAAE,UAAU,8EACV,SAAA,CAAAkF,EAAK,MAAM,IAAClF,SAAC,OAAA,CAAK,UAAU,8CAA8C,SAAA,aAAA,EAA9D,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyE,CAAA,CAAA,EADxF,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,WACC,MAAA,CAAI,UAAU,0EACZ,SAAA,OAAOkF,EAAK,WAAc,SAAW,KAAK,UAAUA,EAAK,UAAW,KAAM,CAAC,EAAI,OAAOA,EAAK,SAAS,CAAA,EADvG,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAOA,CAAA,CAAA,EAhBF,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAiBA,CAEJ,CAGA,SAASQ,GAAYE,EAA6B,CAChD,OAAIA,GAAQ,KAAkC,OAC1C,OAAOA,GAAQ,SAAiBA,EAChC,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,UAAkB,OAAOA,CAAG,EACnE,IACT,CC/JO,SAASC,GAAa,CAAE,MAAAC,EAAO,SAAAC,GAGnC,CACD,KAAM,CAACC,EAAMC,CAAO,EAAIlH,EAAAA,SAAoC,CAAA,CAAE,EACxD,CAACmH,EAAQC,CAAS,EAAIpH,EAAAA,SAAoC,CAAA,CAAE,EAC5D,CAACqH,EAAYC,CAAa,EAAItH,EAAAA,SAAqC,IAAI,EACvE,CAACG,EAAYC,CAAa,EAAIJ,EAAAA,SAAS,EAAK,EAGlDuH,EAAAA,UAAU,IAAM,CACd,GAAI,CACF,MAAMC,EAAS,KAAK,MAAMT,CAAK,EAC/B,GAAI,OAAOS,GAAW,UAAYA,IAAW,MAAQ,CAAC,MAAM,QAAQA,CAAM,EAAG,CAC3E,MAAMC,EAAqC,CAAA,EACrCC,EAAsC,CAAA,EAC5C,SAAW,CAACC,EAAGC,CAAC,IAAK,OAAO,QAAQJ,CAAM,EACpCG,EAAE,WAAW,GAAG,EAClBD,EAASC,CAAC,EAAIC,EAEdH,EAAQE,CAAC,EAAIC,EAGjBV,EAAQO,CAAO,EACfL,EAAUM,CAAQ,EAClBJ,EACEI,EAAS,cAAgB,OAAOA,EAAS,cAAiB,SACtDA,EAAS,aACT,IAAA,EAENtH,EAAc,EAAK,CACrB,CACF,MAAQ,CACNA,EAAc,EAAI,CACpB,CACF,EAAG,CAAC2G,CAAK,CAAC,EAEV,MAAMc,EAAapH,cAAaqH,GAAuC,CACrEZ,EAAQY,CAAO,EACfd,EAAS,KAAK,UAAU,CAAE,GAAGc,EAAS,GAAGX,CAAA,EAAU,KAAM,CAAC,CAAC,CAC7D,EAAG,CAACA,EAAQH,CAAQ,CAAC,EAEfe,EAActH,EAAAA,YAAY,CAAC8F,EAAaM,IAAmB,CAC/DgB,EAAW,CAAE,GAAGZ,EAAM,CAACV,CAAG,EAAGM,EAAK,CACpC,EAAG,CAACI,EAAMY,CAAU,CAAC,EAErB,GAAI1H,EACF,OACEc,EAAAA,OAAC,IAAA,CAAE,UAAU,4BAA4B,SAAA,mEAAA,EAAzC,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAIJ,MAAM+G,EAAU,OAAO,QAAQf,CAAI,EACnC,OAAIe,EAAQ,SAAW,EAEnB/G,EAAAA,OAAC,IAAA,CAAE,UAAU,oCAAoC,SAAA,6BAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAKFA,SAAC,MAAA,CAAI,UAAU,YACZ,SAAA+G,EAAQ,IAAI,CAAC,CAACzB,EAAKM,CAAG,IACrB5F,EAAAA,OAACgH,GAAA,CAEC,SAAU1B,EACV,MAAOM,EACP,SAAWe,GAAMG,EAAYxB,EAAKqB,CAAC,EACnC,OAAQP,CAAA,EAJHd,EADP,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAOD,CAAA,EATH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAUA,CAEJ,CAMA,SAAS0B,GAAS,CAAE,SAAAC,EAAU,MAAAnB,EAAO,SAAAC,EAAU,OAAAmB,GAK5C,OACD,MAAMC,EAAQF,EAAS,QAAQ,QAAS,GAAG,EACrCG,GAAcC,EAAAH,GAAA,YAAAA,EAAQ,aAAR,YAAAG,EAAqBJ,GAGzC,GAAI,OAAOnB,GAAU,UACnB,OACE9F,EAAAA,OAAC,QAAA,CAAM,UAAU,yCACf,SAAA,CAAAA,EAAAA,OAAC,QAAA,CACC,KAAK,WACL,QAAS8F,EACT,SAAWzF,GAAM0F,EAAS1F,EAAE,OAAO,OAAO,EAC1C,UAAU,mCAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMAL,SAAC,OAAA,CAAK,UAAU,yEACb,SAAAmH,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAUA,EAKJ,GAAI,OAAOrB,GAAU,SACnB,gBACG,MAAA,CACC,SAAA,CAAA9F,EAAAA,OAACsH,GAAY,SAAAH,CAAA,EAAb,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAmB,EACnBnH,EAAAA,OAAC,QAAA,CACC,KAAK,SACL,MAAA8F,EACA,SAAWzF,GAAM0F,EAAS,WAAW1F,EAAE,OAAO,KAAK,GAAK,CAAC,EACzD,KAAK,MACL,UAAU,2BAAA,EALZ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAMA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IASA,EAKJ,GAAI,OAAOyF,GAAU,SAAU,CAC7B,MAAMyB,GAAaH,GAAA,YAAAA,EAAa,UAAW,WACrCI,EAAaJ,GAAA,YAAAA,EAAa,KAC1BK,EAAaL,GAAA,YAAAA,EAAa,YAEhC,OAAII,GAAA,MAAAA,EAAY,gBAEX,MAAA,CACC,SAAA,CAAAxH,EAAAA,OAACsH,GAAY,SAAAH,CAAA,EAAb,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmB,EAClBM,GAAczH,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAyC,SAAAyH,CAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiE,EAChFzH,EAAAA,OAAC,SAAA,CACC,MAAA8F,EACA,SAAWzF,GAAM0F,EAAS1F,EAAE,OAAO,KAAK,EACxC,UAAU,4BAET,SAAAmH,EAAW,IAAKvH,YACd,SAAA,CAAiB,MAAOA,EAAM,SAAAA,CAAA,EAAlBA,EAAb,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmC,CACpC,CAAA,EAPH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAQA,CAAA,EAXF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAYA,EAIAsH,WAEC,MAAA,CACC,SAAA,CAAAvH,EAAAA,OAACsH,GAAY,SAAAH,CAAA,EAAb,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmB,EAClBM,GAAczH,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAyC,SAAAyH,CAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiE,EAChFzH,EAAAA,OAAC,QAAA,CACC,KAAK,WACL,MAAA8F,EACA,SAAWzF,GAAM0F,EAAS1F,EAAE,OAAO,KAAK,EACxC,UAAU,4BACV,aAAa,KAAA,EALf,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAUA,EAIAyF,EAAM,OAAS,YAEd,MAAA,CACC,SAAA,CAAA9F,EAAAA,OAACsH,GAAY,SAAAH,CAAA,EAAb,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmB,EAClBM,GAAczH,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAyC,SAAAyH,CAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiE,EAChFzH,EAAAA,OAAC,WAAA,CACC,MAAA8F,EACA,SAAWzF,GAAM0F,EAAS1F,EAAE,OAAO,KAAK,EACxC,UAAU,4CACV,KAAM,KAAK,IAAI,EAAG,KAAK,KAAKyF,EAAM,OAAS,EAAE,CAAC,CAAA,EAJhD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IASA,WAID,MAAA,CACC,SAAA,CAAA9F,EAAAA,OAACsH,GAAY,SAAAH,CAAA,EAAb,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAmB,EAClBM,GAAczH,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAyC,SAAAyH,CAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiE,EAChFzH,EAAAA,OAAC,QAAA,CACC,KAAK,OACL,MAAA8F,EACA,SAAWzF,GAAM0F,EAAS1F,EAAE,OAAO,KAAK,EACxC,UAAU,2BAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAKA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IASA,CAEJ,CAGA,GAAIyF,IAAU,KACZ,gBACG,MAAA,CACC,SAAA,CAAA9F,EAAAA,OAACsH,GAAY,SAAAH,CAAA,EAAb,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAmB,EACnBnH,SAAC,IAAA,CAAE,UAAU,yCAAyC,SAAA,MAAA,EAAtD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA0D,CAAA,CAAA,EAF5D,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAGA,EAKJ,GAAI,MAAM,QAAQ8F,CAAK,EACrB,gBACG,MAAA,CACC,SAAA,CAAA9F,EAAAA,OAACsH,GAAY,SAAAH,CAAA,EAAb,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAmB,EACnBnH,EAAAA,OAAC,OAAI,UAAU,8BACZ,WAAM,IAAI,CAAC0H,EAAMzC,IAChBjF,EAAAA,OAAC,OAAA,CAEC,UAAU,kFAET,gBAAO0H,CAAI,CAAA,EAHPzC,EADP,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMD,CAAA,EARH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IASA,CAAA,CAAA,EAXF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAYA,EAKJ,GAAI,OAAOa,GAAU,SAAU,CAC7B,MAAMiB,EAAU,OAAO,QAAQjB,CAAK,EACpC,gBACG,MAAA,CACC,SAAA,CAAA9F,EAAAA,OAACsH,GAAY,SAAAH,CAAA,EAAb,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAmB,EACnBnH,EAAAA,OAAC,MAAA,CAAI,UAAU,wDACZ,SAAA+G,EAAQ,IAAI,CAAC,CAACL,EAAGC,CAAC,IACjB3G,EAAAA,OAACgH,GAAA,CAEC,SAAUN,EACV,MAAOC,EACP,SAAWE,GAAYd,EAAS,CAAE,GAAGD,EAAO,CAACY,CAAC,EAAGG,CAAA,CAAS,CAAA,EAHrDH,EADP,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMD,CAAA,EARH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IASA,CAAA,CAAA,EAXF,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAYA,CAEJ,CAEA,OAAO,IACT,CAEA,SAASY,EAAW,CAAE,SAAA/D,GAA2C,CAC/D,OACEvD,EAAAA,OAAC,QAAA,CAAM,UAAU,yEACd,SAAAuD,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,CAEJ,CCxQO,SAASoE,GAAgB,CAC9B,KAAA/J,EACA,aAAAgK,EACA,cAAA5J,EACA,sBAAA6J,EACA,YAAA5J,EACA,oBAAA6J,EACA,UAAAlE,EAAY,EACd,EAQG,CACD,KAAM,CAACmE,EAAcC,CAAe,EAAIjJ,EAAAA,SAA0B,MAAM,EAExE,OACEiB,EAAAA,OAAAiB,WAAA,CAEE,SAAA,CAAAjB,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACZ,SAAA,CAAA4D,GAAa5F,EACZgC,EAAAA,OAAC,SAAA,CACC,QAAS,IAAM6H,EAAsB,EAAK,EAC1C,UAAU,0CACV,cAAY,gBAEZ,SAAA,CAAA7H,EAAAA,OAAC,OAAA,CAAK,UAAU,0FACd,SAAAA,EAAAA,OAAC,OAAI,UAAU,UAAU,KAAK,OAAO,QAAQ,YAAY,OAAO,eAAe,YAAa,EAC1F,SAAAA,EAAAA,OAAC,OAAA,CAAK,cAAc,QAAQ,eAAe,QAAQ,EAAE,sBAAA,EAArD,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4E,CAAA,EAD9E,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAIA,EACAA,EAAAA,OAAC,OAAA,CAAK,UAAU,8EAA8E,SAAA,CAAA,oBAC1E,IAClBA,SAAC,OAAA,CAAK,UAAU,oCAAoC,SAAA,QAAA,EAApD,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA0D,CAAA,CAAA,EAF5D,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,CAAA,CAAA,EAbF,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAeE4D,EACF5D,EAAAA,OAAC,SAAA,CACC,QAAS,IAAM6H,EAAsB,EAAI,EACzC,UAAU,iDACV,cAAY,iBAEZ,SAAA,CAAA7H,EAAAA,OAAC,OAAA,CAAK,UAAU,wIACd,SAAAA,EAAAA,OAAC,OAAI,UAAU,cAAc,KAAK,OAAO,QAAQ,YAAY,OAAO,eAAe,YAAa,EAC9F,SAAAA,EAAAA,OAAC,OAAA,CAAK,cAAc,QAAQ,eAAe,QAAQ,EAAE,kNAAA,EAArD,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwQ,CAAA,EAD1Q,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAIA,EACAA,EAAAA,OAAC,OAAA,CAAK,UAAU,kFAAkF,SAAA,CAAA,uCACtD,IAC1CA,SAAC,OAAA,CAAK,UAAU,oCAAoC,SAAA,mBAAA,EAApD,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqE,CAAA,CAAA,EAFvE,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,CAAA,CAAA,EAbF,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,WAgBC,OAAA,GAAD,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAM,EAGP,CAAChC,GACAgC,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMgI,EAAgBD,IAAiB,OAAS,OAAS,MAAM,EACxE,UAAU,qEAET,SAAAA,IAAiB,OAAS,WAAa,MAAA,EAJ1C,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EA3CJ,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA6CA,EAEA/H,EAAAA,OAAC,MAAA,CAAI,UAAU,yBAEb,SAAA,CAAAA,SAAC,MAAA,CAAI,UAAWhC,EAAgB,kCAAoC,GACjE,SAAA+J,IAAiB,OAChB/H,EAAAA,OAAC6F,GAAA,CAAa,MAAOjI,EAAM,SAAUgK,CAAA,EAArC,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmD,EAEnD5H,EAAAA,OAAC,WAAA,CACC,MAAOpC,EACP,SAAWyC,GAAMuH,EAAavH,EAAE,OAAO,KAAK,EAC5C,UAAU,oBACV,KAAM,EACN,WAAY,GACZ,cAAY,cAAA,EANd,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAOA,EAXJ,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAaA,EAGCuD,GAAa5F,GACZgC,EAAAA,OAAC,MAAA,CACC,UAAU,+GACV,cAAY,iBAEZ,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,mDAAmD,SAAA,oMAAA,EAAhE,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,EACAA,EAAAA,OAAC,WAAA,CACC,MAAO/B,EACP,SAAWoC,GAAMyH,EAAoBzH,EAAE,OAAO,KAAK,EACnD,YAAY,6EACZ,UAAU,uDACV,UAAS,GACT,cAAY,cAAA,EANd,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOA,CAAA,EAjBF,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAkBA,CAAA,EArCJ,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAuCA,CAAA,CAAA,EAxFF,OAAA,GAAA,CAAA,SAAA,0EAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAyFA,CAEJ,CC/FO,SAAS4H,GAAwB,CACtC,kBAAAC,EACA,WAAAC,EACA,WAAAxH,EACA,gBAAA8C,EACA,cAAAC,EACA,WAAAC,CACF,EAA2B,CACzB,MAAMC,EAAYwE,GAAA,EAClB,OACEpI,EAAAA,OAAAiB,WAAA,CAEG,SAAA,CAAAiH,GAAqBC,GACpBnI,SAAC,MAAA,CAAI,UAAU,OACb,SAAAA,EAAAA,OAACwD,GAAA,CACC,QAAS2E,EACT,WAAAxH,EACA,gBAAA8C,EACA,cAAAC,EACA,WAAAC,EACA,UAAAC,CAAA,EANF,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAOA,EARF,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IASA,GAIDuE,GAAA,YAAAA,EAAY,YAAa,sBACxBnI,EAAAA,OAAC,MAAA,CAAI,UAAU,wGACb,SAAA,CAAAA,SAACqI,EAAA,CAAS,KAAM,GAAI,UAAU,qCAAA,EAA9B,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoE,WACnE,MAAA,CACC,SAAA,CAAArI,SAAC,IAAA,CAAE,UAAU,6CAA6C,SAAA,oBAAA,EAA1D,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4E,EAC5EA,EAAAA,OAAC,IAAA,CAAE,UAAU,mCAAmC,SAAA,CAAA,qCACpB,OAAA,CAAK,UAAU,yBAA0B,SAAA,OAAOmI,EAAW,QAAQ,GAApE,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsE,EAAO,kFAAA,CAAA,EADxG,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,EACAnI,EAAAA,OAACwE,GAAA,CACC,GAAG,eACH,UAAU,uDAEV,SAAA,CAAAxE,EAAAA,OAACqI,EAAA,CAAS,KAAM,EAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoB,EAAE,mBAAA,CAAA,EAJxB,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAZF,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAaA,CAAA,CAAA,EAfF,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAgBA,CAAA,CAAA,EAjCJ,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAmCA,CAEJ,CA0BO,SAASC,GAA8B,CAC5C,UAAAC,EACA,cAAAC,EACA,IAAAhI,EACA,kBAAAiI,EACA,gBAAAhF,EACA,WAAAiF,EACA,WAAAP,EACA,WAAAxH,EACA,YAAAgI,EACA,WAAApL,EACA,mBAAAqL,EACA,KAAAhL,EACA,aAAAgK,EACA,cAAA5J,EACA,sBAAA6J,EACA,YAAA5J,EACA,oBAAA6J,CACF,EAA6B,CAC3B,MAAMlE,EAAYwE,GAAA,EAClB,OACEpI,EAAAA,OAAC,MAAA,CAAI,UAAU,iBAEb,SAAA,CAAAA,EAAAA,OAAC6I,EAAA,CACC,MAAM,iBACN,WAAW,UACX,YAAaN,EAAU,SAAW,GAClC,SAAUC,EACV,iBAAiB,YAEjB,SAAAxI,EAAAA,OAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,wCACZ,SAAA,CAAA,CAAC,CAACQ,EAAI,UACLR,EAAAA,OAAC,MAAA,CACC,SAAAA,SAACyE,EAAA,CAAW,KAAMjE,EAAI,SAAU,MAAM,gBAAA,EAAtC,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAuD,CAAA,EADzD,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EAEDiI,GAAqB,MACpBzI,EAAAA,OAAC,MAAA,CACC,kBAACyE,EAAA,CAAW,KAAMgE,EAAmB,MAAM,oBAAA,EAA3C,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgE,CAAA,EADlE,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EATJ,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAWA,EAEChF,GAAmB,MAClBzD,SAAC,MAAA,CAAI,UAAU,WACb,SAAAA,EAAAA,OAACyE,EAAA,CAAW,KAAMhB,EAAiB,MAAM,kBAAA,EAAzC,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4D,CAAA,EAD9D,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAjBJ,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAmBA,CAAA,EA1BF,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EA8BCiF,GAAcP,GACbnI,EAAAA,OAAC6I,EAAA,CACC,MAAM,YACN,WAAW,SACX,YAAa,CAAC,CAACN,EAAU,OACzB,SAAUC,EACV,iBAAiB,YAEjB,SAAAxI,EAAAA,OAAC0E,GAAA,CAAc,OAAQgE,EAAY,QAASP,CAAA,EAA5C,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwD,CAAA,EAP1D,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAYD,CAACxH,GAAcgI,GAAepL,IAAe,WAAa,CAAC,EAAEiD,EAAI,eAAiBoI,IACjF5I,EAAAA,OAAC6I,EAAA,CACC,MAAM,yBACN,WAAW,WACX,YAAa,CAAC,CAACN,EAAU,SACzB,SAAUC,EACV,iBAAiB,YAEjB,SAAAxI,EAAAA,OAAC2H,GAAA,CACC,KAAA/J,EACA,aAAAgK,EACA,cAAA5J,EACA,sBAAA6J,EACA,YAAA5J,EACA,oBAAA6J,EACA,UAAAlE,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAQA,EAfF,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAgBA,CAAA,EA9DJ,OAAA,GAAA,CAAA,SAAA,mFAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAgEA,CAEJ,CC3JA,SAASkF,GAAUhD,EAA2C,CAC5D,GAAI,CAACA,EAAO,OAAO,KACnB,GAAI,CACF,OAAO,KAAK,MAAMA,CAAK,CACzB,MAAQ,CACN,OAAOA,CACT,CACF,CAEA,SAASiD,GAAclJ,EAA6C,CAClE,GAAI,CAACA,EAAS,MAAO,GACrB,GAAI,CACF,MAAMmJ,EAAI,KAAK,MAAMnJ,CAAO,EAC5B,MAAO,CAAC,EAAEmJ,GAAK,OAAOA,GAAM,UAAYA,EAAE,QAC5C,MAAQ,CAAE,MAAO,EAAO,CAC1B,CAMO,SAASC,IAAuB,SACrC,KAAM,CAAE,GAAAC,CAAA,EAAOC,GAAA,EACT,CAAE,KAAAC,CAAA,EAASC,GAAA,EACXC,EAAWC,GAAA,EACX,CAAE,KAAM/I,EAAK,UAAAgJ,CAAA,EAAcC,GAAcP,CAAG,EAClDQ,GAA0BR,CAAE,EAC5B,MAAMS,EAAQC,GAAA,EACRC,EAAUC,GAAA,EACVC,EAAWC,GAAA,EACX,CAAE,KAAM7L,CAAA,EAAsB8L,IAAqBzJ,GAAA,YAAAA,EAAK,OAAQ,EAAE,EAClE,CAAE,KAAM0J,CAAA,EAAoBC,GAAA,EAC5B,CAAE,KAAMC,CAAA,EAAaC,GAAA,EAErBC,EAAWJ,GAAA,YAAAA,EAAiB,KAAMlH,GAAMA,EAAE,iBAAkBxC,GAAA,YAAAA,EAAK,gBACjEI,IAAWyG,EAAA+C,GAAA,YAAAA,EAAU,YAAV,YAAA/C,EAAqB,WAAY,KAC5C,CAAC9J,EAAYgN,CAAa,EAAIxL,EAAAA,SAAqB,SAAS,EAC5D,CAACnB,EAAM4M,CAAO,EAAIzL,EAAAA,SAAS,IAAI,EAG/B,CAACwJ,EAAWkC,CAAY,EAAI1L,EAAAA,SAAkC,CAAE,QAAS,GAAO,EAChFyJ,EAAiBlD,GACrBmF,EAAcC,IAAU,CAAE,GAAGA,EAAM,CAACpF,CAAG,EAAG,CAACoF,EAAKpF,CAAG,GAAI,EAEnD,CAACtH,EAAe2M,CAAgB,EAAI5L,EAAAA,SAAS,EAAK,EAClD,CAACd,EAAa2M,CAAc,EAAI7L,EAAAA,SAAS,EAAE,EAC3C8L,GAAiBP,GAAA,YAAAA,EAAU,kBAAmB,KAC9C1B,IAAsBkC,EAAAtK,GAAA,YAAAA,EAAK,WAAL,YAAAsK,EAAuB,cAAe,KAC5DC,EAAkBnC,GAAsBiC,EAC9CvE,EAAAA,UAAU,IAAM,CACd,MAAMF,EAAawC,IAAuBiC,GAAA,MAAAA,EAAgB,WAAaA,EAAiB,MACxF,GAAIzE,GAAA,MAAAA,EAAY,WAAY,CAC1B,MAAM4E,EAA+B,CAAE,aAAc5E,CAAA,EACrD,SAAW,CAACd,GAAK2F,EAAG,IAAK,OAAO,QAAQ7E,EAAW,UAAU,EAAG,CAC9D,MAAM8E,GAAWD,GACjBD,EAAQ1F,EAAG,EAAI4F,GAAS,SAAW,EACrC,CACAV,EAAQ,KAAK,UAAUQ,EAAS,KAAM,CAAC,CAAC,CAC1C,MACER,EAAQO,EAAkB,KAAK,UAAUA,EAAiB,KAAM,CAAC,EAAI,IAAI,CAE7E,EAAG,CAACA,EAAiBnC,EAAoBiC,CAAc,CAAC,EAExD,MAAMM,EAAYpC,GAAcvI,GAAA,YAAAA,EAAK,kBAAkB,EACjD0H,GAAoB1H,GAAA,YAAAA,EAAK,WAAY,mBACrC4K,GAAiB5K,GAAA,YAAAA,EAAK,WAAY,iBAUxC,GATA8F,EAAAA,UAAU,IAAM,EACV6E,GAAajD,IACfuC,EAAcC,IAAU,CAAE,GAAGA,EAAM,QAAS,IAAO,EAEjDU,GAAkBxC,GACpB6B,EAAcC,IAAU,CAAE,GAAGA,EAAM,QAAS,GAAM,SAAU,EAAA,EAAQ,CAExE,EAAG,CAACS,EAAWjD,EAAmBkD,EAAgBxC,CAAkB,CAAC,EAEjEY,EACF,OACExJ,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,oCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAoD,EACpDA,EAAAA,OAAC,MAAA,CAAI,UAAU,uCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAuD,CAAA,CAAA,EAFzD,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAGA,EAIJ,GAAI,CAACQ,EACH,OAAOR,EAAAA,OAAC,IAAA,CAAE,UAAU,8BAA8B,SAAA,uBAAA,EAA3C,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgE,EAGzE,MAAMU,EAAU2K,GAAqB7K,CAAG,EAClCmI,EAAcjI,GAAWF,EAAI,eAAgB4I,GAAA,YAAAA,EAAM,QACnDkC,EAAiB5K,GAAW,CAACiI,EAC7BhI,EAAaH,EAAI,SAAW,YAAcA,EAAI,SAAW,YAEzDiI,EAAoBK,GAAUtI,EAAI,kBAAkB,EACpDiD,EAAkBqF,GAAUtI,EAAI,gBAAgB,EAEhD2H,EAAc,OAAOM,GAAsB,UAAYA,IAAsB,MAAQ,CAAC,MAAM,QAAQA,CAAiB,EACvHA,EACA,KACEC,EAAaP,GAAA,YAAAA,EAAY,QAEzBoD,GAA+B5K,EACjC,WACAgI,EACE,gBACA2C,EACE,mBACA,YAEF5L,GAAe8L,GAA4B,CAC/C7B,EAAM,OAAO,CAAE,GAAInJ,EAAI,GAAI,gBAAAgL,EAAiB,EAC5Cf,EAAa,CAAE,QAAS,GAAM,OAAQ,GAAM,SAAU,GAAO,CAC/D,EAEMgB,EAAS,IAAMnC,EAAS,EAAE,EAE1BoC,GAAgB,MAAO7L,GAAqC,CAChE,MAAMgK,EAAQ,YAAY,CAAE,GAAIrJ,EAAI,GAAI,gBAAiBX,EAAS,EAClE4L,EAAA,CACF,EAEME,GAAiB,MAAOC,GAAuB,CAC9CA,IACL,MAAM7B,EAAS,YAAY,CAAE,GAAIvJ,EAAI,GAAI,WAAAoL,EAAY,EACrDH,EAAA,EACF,EAEMI,GAAoB,SAAY,CAC/BlD,GACH,MAAMgB,EAAM,YAAY,CAAE,GAAInJ,EAAI,GAAI,gBAAiB,GAAI,EAE7D,MAAMuD,GAAaoE,GAAA,YAAAA,EAAY,YAAwB3H,EAAI,aAAe,GAC1E,MAAMqJ,EAAQ,YAAY,CACxB,GAAIrJ,EAAI,GACR,gBAAiB,CAAE,IAAK,CAAE,YAAa,EAAA,EAAQ,MAAOuD,CAAA,CAAU,CACjE,EACD0H,EAAA,CACF,EAEMK,GAAgB,SAAY,CAChC,MAAMnC,EAAM,YAAY,CAAE,GAAInJ,EAAI,GAAI,gBAAiB,EAAG,EAC1DiL,EAAA,CACF,EAEA,OACEzL,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,OAAC+L,GAAA,CAAW,MAAM,YAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA+B,EAE/B/L,EAAAA,OAACO,GAAA,CACC,IAAAC,EACA,YAAAmI,EACA,QAAAjI,EACA,WAAAC,EACA,SAAAC,CAAA,EALF,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAQAZ,EAAAA,OAACiI,GAAA,CACC,kBAAAC,EACA,WAAAC,EACA,WAAAxH,EACA,gBAAA8C,EACA,cAAeoI,GACf,WAAYlC,EAAM,WAAaE,EAAQ,SAAA,EANzC,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EASA7J,EAAAA,OAACsI,GAAA,CACC,UAAAC,EACA,cAAAC,EACA,IAAAhI,EACA,kBAAAiI,EACA,gBAAAhF,EACA,WAAAiF,EACA,WAAAP,EACA,WAAAxH,EACA,YAAAgI,EACA,WAAApL,EACA,mBAAAqL,EACA,KAAAhL,EACA,aAAc4M,EACd,cAAAxM,EACA,sBAAuB2M,EACvB,YAAA1M,EACA,oBAAqB2M,CAAA,EAjBvB,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAoBA5K,EAAAA,OAAC,MAAA,CAAI,UAAU,QAAA,EAAf,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAwB,EAExBA,EAAAA,OAAC5C,GAAA,CACC,KAAMmO,GACN,WAAAhO,EACA,mBAAoBgN,EACpB,QAAS7K,GACT,aAAciK,EAAM,UACpB,aAAcnJ,EAAI,cAClB,KAAA5C,EACA,UAAW8N,GACX,eAAgB7B,EAAQ,UACxB,aAAcA,EAAQ,MACtB,cAAA7L,EACA,YAAAC,EACA,YAAauC,EAAI,KACjB,mBAAmBrC,GAAA,YAAAA,EAAmB,UAAW,CAAA,EACjD,WAAYwN,GACZ,gBAAiB5B,EAAS,UAC1B,cAAeA,EAAS,MACxB,UAAW+B,GACX,eAAgBnC,EAAM,UACtB,WAAYnJ,EAAI,YAChB,cAAeA,EAAI,cAAA,EArBrB,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAsBA,CAAA,EAhEF,OAAA,GAAA,CAAA,SAAA,+EAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAiEA,CAEJ"}
@@ -1,2 +0,0 @@
1
- import{j as e}from"./index-Da8R5Fn_.js";import{a as N}from"./vendor-query-DLp59M9_.js";import{u as y,a as R,b as k,c as T}from"./mcp-CUFhWTyT.js";import{E as L}from"./EmptyState-Bk3_P-b8.js";import{C as z}from"./ConfirmDeleteModal-Bac7RmDD.js";import{P as V}from"./PageHeader-BuUnJ5NY.js";import{F,a as I,b as P}from"./FilterBar-CZGTOMoo.js";import{S as _}from"./StickyPagination-CI5AyVVd.js";import{u as $}from"./useFilterParams-CGRYFw_A.js";import{u as q}from"./useExpandedRows-Cg9iq6Vy.js";import{T as A}from"./ToolTestPanel-BickLBjP.js";import{R as B,a as f}from"./RowActions-DBpvm3Jy.js";import{S as H}from"./StatusBadge-DNXTk01O.js";import{T as G}from"./ToolPill-BNaTJhu8.js";import{S as O}from"./ServerName-B5-E7gZD.js";import{l as U,ac as W,ad as J,D as K,m as Q,P as X}from"./vendor-icons-1qQ3NKfa.js";import{c as Y}from"./vendor-react-Co3Y8ikm.js";import"./Modal-EUrK2c_A.js";import"./RunAsSelector-ZLKGTYP_.js";import"./BotPicker-DgbzCesR.js";import"./bots-Ci5aCzDK.js";function Z(a){var s,t;return!!((s=a.metadata)!=null&&s.builtin)||!!((t=a.transport_config)!=null&&t.builtin)}function ee(a,s){var o;if(!s)return!0;const t=s.toLowerCase();return a.name.toLowerCase().includes(t)||(o=a.description)!=null&&o.toLowerCase().includes(t)||(a.tags??[]).some(n=>n.toLowerCase().includes(t))?!0:(a.tool_manifest??[]).some(n=>{var u;return n.name.toLowerCase().includes(t)||((u=n.description)==null?void 0:u.toLowerCase().includes(t))})}function se(a,s){if(!s)return a;const t=s.toLowerCase();return a.filter(m=>{var o;return m.name.toLowerCase().includes(t)||((o=m.description)==null?void 0:o.toLowerCase().includes(t))})}function re({server:a,expanded:s,onToggle:t,onEdit:m,onDelete:o,onTryTool:n,connect:u,disconnect:g,visibleTools:b}){const i=a.tool_manifest??[],v=Z(a),d=a.tags??[];return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("tr",{onClick:i.length>0?t:void 0,className:`group/row border-b border-surface-border/50 transition-colors duration-100 ${i.length>0?"cursor-pointer row-hover":""}`,children:[e.jsxDEV("td",{className:"px-6 py-2.5",children:e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:`transition-transform duration-150 ${s?"rotate-90":""} ${i.length===0?"opacity-0":"text-text-tertiary"}`,children:e.jsxDEV(U,{size:14},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:52,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:51,columnNumber:13},this),e.jsxDEV("span",{className:"flex items-center gap-1.5",children:[e.jsxDEV(O,{name:a.name,serverId:a.id,short:!1},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:55,columnNumber:15},this),i.length>0&&e.jsxDEV("sup",{className:"text-[9px] font-normal text-accent/70",children:i.length},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:57,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:54,columnNumber:13},this),d.length>0&&e.jsxDEV("div",{className:"flex gap-1 ml-auto shrink-0",children:[d.slice(0,3).map(l=>e.jsxDEV("span",{className:"inline-block px-1.5 py-0 text-[9px] text-text-tertiary bg-surface-sunken rounded",children:l},l,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:63,columnNumber:19},this)),d.length>3&&e.jsxDEV("span",{className:"text-[9px] text-text-quaternary",title:d.slice(3).join(", "),children:"…"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:68,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:61,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:50,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:49,columnNumber:9},this),e.jsxDEV("td",{className:"px-4 py-2.5 w-28 whitespace-nowrap",children:e.jsxDEV(H,{status:a.status},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:77,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:76,columnNumber:9},this),e.jsxDEV("td",{className:"px-4 py-2.5 w-16",children:e.jsxDEV(B,{children:[!v&&(a.status==="connected"?e.jsxDEV(f,{icon:W,title:"Disconnect server",onClick:()=>g.mutate(a.id)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:85,columnNumber:17},this):e.jsxDEV(f,{icon:J,title:"Connect server",onClick:()=>u.mutate(a.id),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:91,columnNumber:17},this)),e.jsxDEV(f,{icon:K,title:"Edit server",onClick:m},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:99,columnNumber:13},this),!v&&e.jsxDEV(f,{icon:Q,title:"Delete server",onClick:o,colorClass:"text-text-tertiary hover:text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:105,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:82,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:81,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:42,columnNumber:7},this),s&&b.map(l=>e.jsxDEV("tr",{onClick:()=>n(l),className:"group/row cursor-pointer hover:bg-surface-hover/50 transition-colors border-b border-surface-border/15",children:[e.jsxDEV("td",{className:"pl-14 pr-6 py-2.5",children:[e.jsxDEV(G,{name:l.name,size:"md"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:125,columnNumber:13},this),l.description&&e.jsxDEV("p",{className:"text-[11px] leading-snug text-text-quaternary mt-0.5",children:l.description},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:127,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:124,columnNumber:11},this),e.jsxDEV("td",{className:"px-4 py-2.5 w-28"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:132,columnNumber:11},this),e.jsxDEV("td",{className:"px-4 py-2.5 w-16",children:e.jsxDEV("div",{className:"flex items-center justify-end",children:e.jsxDEV("button",{onClick:p=>{p.stopPropagation(),n(l)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Try tool",children:e.jsxDEV(X,{className:"w-3.5 h-3.5",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:142,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:137,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:136,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:135,columnNumber:11},this)]},l.name,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:118,columnNumber:9},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:40,columnNumber:5},this)}function je(){const a=Y(),{filters:s,setFilter:t,pagination:m}=$({filters:{status:"",search:"",tag:""}}),{data:o,isLoading:n}=y({status:s.status||void 0,search:s.search||void 0,tags:s.tag||void 0}),u=R(),g=k(),b=T(),[i,v]=N.useState(null),{expandedIds:d,toggle:l}=q("lt:expanded:mcp-servers"),[p,S]=N.useState(null),h=(o==null?void 0:o.servers)??[],D=(o==null?void 0:o.total)??0,M=N.useMemo(()=>{const r=new Set;for(const c of h)for(const E of c.tags??[])r.add(E);return[...r].sort().map(c=>({value:c,label:c}))},[h]),x=N.useMemo(()=>s.search?h.filter(r=>ee(r,s.search)):h,[h,s.search]);N.useEffect(()=>{if(!s.search)return;const r=s.search.toLowerCase();for(const c of x)(c.tool_manifest??[]).some(w=>{var j;return w.name.toLowerCase().includes(r)||((j=w.description)==null?void 0:j.toLowerCase().includes(r))})&&!d.has(c.id)&&l(c.id)},[s.search,x]);const C=()=>{i&&b.mutate(i.id,{onSuccess:()=>v(null)})};return n?e.jsxDEV("div",{children:[e.jsxDEV(V,{title:"MCP Server Tools"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:87,columnNumber:9},this),e.jsxDEV("div",{className:"animate-pulse space-y-0",children:Array.from({length:5}).map((r,c)=>e.jsxDEV("div",{className:"h-14 border-b last:border-b-0 px-6 flex items-center",children:e.jsxDEV("div",{className:"h-3 bg-surface-sunken rounded w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:91,columnNumber:15},this)},c,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:90,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:88,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:86,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(V,{title:"MCP Server Tools",docsHash:"#docs:dashboard.md:mcp-server-tools",actions:e.jsxDEV("button",{onClick:()=>a("/mcp/servers/new"),className:"btn-primary text-xs",children:"Register Server"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:105,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:101,columnNumber:7},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed",children:"Registered MCP servers and their available tools. Each server exposes tools that pipelines can invoke."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:114,columnNumber:7},this),e.jsxDEV(F,{children:[e.jsxDEV(I,{label:"Search",value:s.search,onChange:r=>t("search",r),placeholder:"Server or tool name..."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:119,columnNumber:9},this),e.jsxDEV(P,{label:"Tag",value:s.tag,onChange:r=>t("tag",r),options:M},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:125,columnNumber:9},this),e.jsxDEV(P,{label:"Status",value:s.status,onChange:r=>t("status",r),options:[{value:"registered",label:"Registered"},{value:"connected",label:"Connected"},{value:"error",label:"Error"},{value:"disconnected",label:"Disconnected"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:131,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:118,columnNumber:7},this),e.jsxDEV("div",{className:"flex gap-0 ",children:[e.jsxDEV("div",{className:`${p?"flex-1 min-w-0":"w-full"} transition-all`,children:[x.length===0?e.jsxDEV(L,{title:"No servers found"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:148,columnNumber:13},this):e.jsxDEV("table",{className:"w-full",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b",children:[e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Server / Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:153,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-4 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:156,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface w-16"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:159,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:152,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:151,columnNumber:15},this),e.jsxDEV("tbody",{children:x.map(r=>e.jsxDEV(re,{server:r,expanded:d.has(r.id),onToggle:()=>l(r.id),onEdit:()=>a(`/mcp/servers/${r.id}`),onDelete:()=>v(r),onTryTool:c=>S({serverId:r.id,serverName:r.name,tool:c}),connect:u,disconnect:g,visibleTools:se(r.tool_manifest??[],s.search)},r.id,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:164,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:162,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:150,columnNumber:13},this),e.jsxDEV(_,{page:m.page,totalPages:m.totalPages(D),onPageChange:m.setPage,total:D,pageSize:m.pageSize,onPageSizeChange:m.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:190,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:146,columnNumber:9},this),p&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 max-h-screen overflow-y-auto",children:e.jsxDEV(A,{serverId:p.serverId,serverName:p.serverName,tool:p.tool,onClose:()=>S(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:203,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:202,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:144,columnNumber:7},this),e.jsxDEV(z,{open:!!i,onClose:()=>v(null),onConfirm:C,title:"Delete MCP Server",description:e.jsxDEV(e.Fragment,{children:["Delete"," ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:i==null?void 0:i.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:222,columnNumber:13},this),"? This will remove the server registration."]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:220,columnNumber:11},this),isPending:b.isPending,error:b.error},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:214,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:100,columnNumber:5},this)}export{je as McpServersPage};
2
- //# sourceMappingURL=index-OTsFiHXP.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-OTsFiHXP.js","sources":["../../src/pages/mcp/servers/helpers.ts","../../src/pages/mcp/servers/ServerRow.tsx","../../src/pages/mcp/servers/McpServersPage.tsx"],"sourcesContent":["import type { McpServerRecord, McpToolManifest } from '../../../api/types';\n\nexport function isBuiltIn(row: McpServerRecord): boolean {\n return !!(row.metadata as Record<string, unknown> | null)?.builtin\n || !!(row.transport_config as Record<string, unknown> | null)?.builtin;\n}\n\n/** Check if a server or any of its tools match the search term */\nexport function matchesSearch(server: McpServerRecord, search: string): boolean {\n if (!search) return true;\n const q = search.toLowerCase();\n if (server.name.toLowerCase().includes(q)) return true;\n if (server.description?.toLowerCase().includes(q)) return true;\n if ((server.tags ?? []).some((t) => t.toLowerCase().includes(q))) return true;\n const tools = (server.tool_manifest ?? []) as McpToolManifest[];\n return tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n\n/** Filter tools within a server that match the search term */\nexport function filterTools(tools: McpToolManifest[], search: string): McpToolManifest[] {\n if (!search) return tools;\n const q = search.toLowerCase();\n return tools.filter(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n","import { ChevronRight, Pencil, Trash2, Plug, Unplug, Play } from 'lucide-react';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport {\n useConnectMcpServer,\n useDisconnectMcpServer,\n} from '../../../api/mcp';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport { ToolPill } from '../../../components/common/display/ToolPill';\nimport { ServerName } from '../../../components/common/display/ServerName';\n\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { isBuiltIn } from './helpers';\n\nexport function ServerRow({\n server,\n expanded,\n onToggle,\n onEdit,\n onDelete,\n onTryTool,\n connect,\n disconnect,\n visibleTools,\n}: {\n server: McpServerRecord;\n expanded: boolean;\n onToggle: () => void;\n onEdit: () => void;\n onDelete: () => void;\n onTryTool: (tool: McpToolManifest) => void;\n connect: ReturnType<typeof useConnectMcpServer>;\n disconnect: ReturnType<typeof useDisconnectMcpServer>;\n visibleTools: McpToolManifest[];\n}) {\n const allTools = (server.tool_manifest ?? []) as McpToolManifest[];\n const builtin = isBuiltIn(server);\n const tags = server.tags ?? [];\n\n return (\n <>\n {/* Server header row */}\n <tr\n onClick={allTools.length > 0 ? onToggle : undefined}\n className={`group/row border-b border-surface-border/50 transition-colors duration-100 ${\n allTools.length > 0 ? 'cursor-pointer row-hover' : ''\n }`}\n >\n {/* Name + tags */}\n <td className=\"px-6 py-2.5\">\n <div className=\"flex items-center gap-3\">\n <span className={`transition-transform duration-150 ${expanded ? 'rotate-90' : ''} ${allTools.length === 0 ? 'opacity-0' : 'text-text-tertiary'}`}>\n <ChevronRight size={14} />\n </span>\n <span className=\"flex items-center gap-1.5\">\n <ServerName name={server.name} serverId={server.id} short={false} />\n {allTools.length > 0 && (\n <sup className=\"text-[9px] font-normal text-accent/70\">{allTools.length}</sup>\n )}\n </span>\n {tags.length > 0 && (\n <div className=\"flex gap-1 ml-auto shrink-0\">\n {tags.slice(0, 3).map((tag) => (\n <span key={tag} className=\"inline-block px-1.5 py-0 text-[9px] text-text-tertiary bg-surface-sunken rounded\">\n {tag}\n </span>\n ))}\n {tags.length > 3 && (\n <span className=\"text-[9px] text-text-quaternary\" title={tags.slice(3).join(', ')}>&hellip;</span>\n )}\n </div>\n )}\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-4 py-2.5 w-28 whitespace-nowrap\">\n <StatusBadge status={server.status} />\n </td>\n\n {/* Actions */}\n <td className=\"px-4 py-2.5 w-16\">\n <RowActionGroup>\n {!builtin && (\n server.status === 'connected' ? (\n <RowAction\n icon={Unplug}\n title=\"Disconnect server\"\n onClick={() => disconnect.mutate(server.id)}\n />\n ) : (\n <RowAction\n icon={Plug}\n title=\"Connect server\"\n onClick={() => connect.mutate(server.id)}\n colorClass=\"text-text-tertiary hover:text-status-success\"\n />\n )\n )}\n <RowAction\n icon={Pencil}\n title=\"Edit server\"\n onClick={onEdit}\n />\n {!builtin && (\n <RowAction\n icon={Trash2}\n title=\"Delete server\"\n onClick={onDelete}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n )}\n </RowActionGroup>\n </td>\n </tr>\n\n {/* Expanded tool rows — real table rows for column alignment */}\n {expanded && visibleTools.map((tool) => (\n <tr\n key={tool.name}\n onClick={() => onTryTool(tool)}\n className=\"group/row cursor-pointer hover:bg-surface-hover/50 transition-colors border-b border-surface-border/15\"\n >\n {/* Tool name + description */}\n <td className=\"pl-14 pr-6 py-2.5\">\n <ToolPill name={tool.name} size=\"md\" />\n {tool.description && (\n <p className=\"text-[11px] leading-snug text-text-quaternary mt-0.5\">{tool.description}</p>\n )}\n </td>\n\n {/* Status — empty for tools */}\n <td className=\"px-4 py-2.5 w-28\" />\n\n {/* Actions — play on hover */}\n <td className=\"px-4 py-2.5 w-16\">\n <div className=\"flex items-center justify-end\">\n <button\n onClick={(e) => { e.stopPropagation(); onTryTool(tool); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Try tool\"\n >\n <Play className=\"w-3.5 h-3.5\" strokeWidth={1.5} />\n </button>\n </div>\n </td>\n </tr>\n ))}\n </>\n );\n}\n","import { useState, useMemo, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n useMcpServers,\n useConnectMcpServer,\n useDisconnectMcpServer,\n useDeleteMcpServer,\n} from '../../../api/mcp';\nimport { EmptyState } from '../../../components/common/display/EmptyState';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useExpandedRows } from '../../../hooks/useExpandedRows';\nimport { ToolTestPanel } from '../../../components/common/test/ToolTestPanel';\nimport { matchesSearch, filterTools } from './helpers';\nimport { ServerRow } from './ServerRow';\n\nexport function McpServersPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', search: '', tag: '' },\n });\n\n const { data, isLoading } = useMcpServers({\n status: filters.status || undefined,\n search: filters.search || undefined,\n tags: filters.tag || undefined,\n });\n const connect = useConnectMcpServer();\n const disconnect = useDisconnectMcpServer();\n const deleteServer = useDeleteMcpServer();\n\n const [confirmDelete, setConfirmDelete] = useState<McpServerRecord | null>(null);\n const { expandedIds, toggle: toggleExpand } = useExpandedRows('lt:expanded:mcp-servers');\n const [tryTool, setTryTool] = useState<{\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n } | null>(null);\n\n const servers = data?.servers ?? [];\n const total = data?.total ?? 0;\n\n // Derive unique tags from current result set for the filter dropdown\n const tagOptions = useMemo(() => {\n const allTags = new Set<string>();\n for (const s of servers) {\n for (const t of s.tags ?? []) allTags.add(t);\n }\n return [...allTags].sort().map((t) => ({ value: t, label: t }));\n }, [servers]);\n\n // Client-side search filtering for tool-level matches within expanded rows\n const filteredServers = useMemo(() => {\n if (!filters.search) return servers;\n return servers.filter((s) => matchesSearch(s, filters.search));\n }, [servers, filters.search]);\n\n // Auto-expand servers whose tools match the search (so results are visible)\n useEffect(() => {\n if (!filters.search) return;\n const q = filters.search.toLowerCase();\n for (const s of filteredServers) {\n const tools = (s.tool_manifest ?? []) as McpToolManifest[];\n const hasToolMatch = tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n if (hasToolMatch && !expandedIds.has(s.id)) {\n toggleExpand(s.id);\n }\n }\n }, [filters.search, filteredServers]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteServer.mutate(confirmDelete.id, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n if (isLoading) {\n return (\n <div>\n <PageHeader title=\"MCP Server Tools\" />\n <div className=\"animate-pulse space-y-0\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"h-14 border-b last:border-b-0 px-6 flex items-center\">\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"MCP Server Tools\"\n docsHash=\"#docs:dashboard.md:mcp-server-tools\"\n actions={\n <button\n onClick={() => navigate('/mcp/servers/new')}\n className=\"btn-primary text-xs\"\n >\n Register Server\n </button>\n }\n />\n\n <p className=\"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed\">\n Registered MCP servers and their available tools. Each server exposes tools that pipelines can invoke.\n </p>\n\n <FilterBar>\n <FilterInput\n label=\"Search\"\n value={filters.search}\n onChange={(v) => setFilter('search', v)}\n placeholder=\"Server or tool name...\"\n />\n <FilterSelect\n label=\"Tag\"\n value={filters.tag}\n onChange={(v) => setFilter('tag', v)}\n options={tagOptions}\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'registered', label: 'Registered' },\n { value: 'connected', label: 'Connected' },\n { value: 'error', label: 'Error' },\n { value: 'disconnected', label: 'Disconnected' },\n ]}\n />\n </FilterBar>\n\n <div className={`flex gap-0 ${tryTool ? '' : ''}`}>\n {/* Server list */}\n <div className={`${tryTool ? 'flex-1 min-w-0' : 'w-full'} transition-all`}>\n {filteredServers.length === 0 ? (\n <EmptyState title=\"No servers found\" />\n ) : (\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Server / Tool\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-4 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\">\n Status\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface w-16\" />\n </tr>\n </thead>\n <tbody>\n {filteredServers.map((server) => (\n <ServerRow\n key={server.id}\n server={server}\n expanded={expandedIds.has(server.id)}\n onToggle={() => toggleExpand(server.id)}\n onEdit={() => navigate(`/mcp/servers/${server.id}`)}\n onDelete={() => setConfirmDelete(server)}\n onTryTool={(tool) =>\n setTryTool({\n serverId: server.id,\n serverName: server.name,\n tool,\n })\n }\n connect={connect}\n disconnect={disconnect}\n visibleTools={filterTools(\n (server.tool_manifest ?? []) as McpToolManifest[],\n filters.search,\n )}\n />\n ))}\n </tbody>\n </table>\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 {/* Test panel — slides in from right */}\n {tryTool && (\n <div className=\"w-[380px] shrink-0 sticky top-0 max-h-screen overflow-y-auto\">\n <ToolTestPanel\n serverId={tryTool.serverId}\n serverName={tryTool.serverName}\n tool={tryTool.tool}\n onClose={() => setTryTool(null)}\n />\n </div>\n )}\n </div>\n\n {/* Delete confirmation modal */}\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete MCP Server\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">{confirmDelete?.name}</span>?\n This will remove the server registration.\n </>\n }\n isPending={deleteServer.isPending}\n error={deleteServer.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["isBuiltIn","row","_a","_b","matchesSearch","server","search","q","t","filterTools","tools","ServerRow","expanded","onToggle","onEdit","onDelete","onTryTool","connect","disconnect","visibleTools","allTools","builtin","tags","jsxDEV","Fragment","ChevronRight","ServerName","tag","StatusBadge","RowActionGroup","RowAction","Unplug","Plug","Pencil","Trash2","tool","ToolPill","e","Play","McpServersPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","data","isLoading","useMcpServers","useConnectMcpServer","useDisconnectMcpServer","deleteServer","useDeleteMcpServer","confirmDelete","setConfirmDelete","useState","expandedIds","toggleExpand","useExpandedRows","tryTool","setTryTool","servers","total","tagOptions","useMemo","allTags","s","filteredServers","useEffect","handleDelete","PageHeader","_","i","FilterBar","FilterInput","v","FilterSelect","EmptyState","StickyPagination","ToolTestPanel","ConfirmDeleteModal"],"mappings":"q9BAEO,SAASA,EAAUC,EAA+B,SACvD,MAAO,CAAC,GAAEC,EAAAD,EAAI,WAAJ,MAAAC,EAAiD,UACtD,CAAC,GAAEC,EAAAF,EAAI,mBAAJ,MAAAE,EAAyD,QACnE,CAGO,SAASC,GAAcC,EAAyBC,EAAyB,OAC9E,GAAI,CAACA,EAAQ,MAAO,GACpB,MAAMC,EAAID,EAAO,YAAA,EAGjB,OAFID,EAAO,KAAK,YAAA,EAAc,SAASE,CAAC,IACpCL,EAAAG,EAAO,cAAP,MAAAH,EAAoB,cAAc,SAASK,KAC1CF,EAAO,MAAQ,CAAA,GAAI,KAAMG,GAAMA,EAAE,YAAA,EAAc,SAASD,CAAC,CAAC,EAAU,IAC1DF,EAAO,eAAiB,CAAA,GAC1B,KACVG,GAAA,OAAM,OAAAA,EAAE,KAAK,cAAc,SAASD,CAAC,KAAKL,EAAAM,EAAE,cAAF,YAAAN,EAAe,cAAc,SAASK,IAAC,CAEtF,CAGO,SAASE,GAAYC,EAA0BJ,EAAmC,CACvF,GAAI,CAACA,EAAQ,OAAOI,EACpB,MAAMH,EAAID,EAAO,YAAA,EACjB,OAAOI,EAAM,OACVF,GAAA,OAAM,OAAAA,EAAE,KAAK,cAAc,SAASD,CAAC,KAAKL,EAAAM,EAAE,cAAF,YAAAN,EAAe,cAAc,SAASK,IAAC,CAEtF,CCdO,SAASI,GAAU,CACxB,OAAAN,EACA,SAAAO,EACA,SAAAC,EACA,OAAAC,EACA,SAAAC,EACA,UAAAC,EACA,QAAAC,EACA,WAAAC,EACA,aAAAC,CACF,EAUG,CACD,MAAMC,EAAYf,EAAO,eAAiB,CAAA,EACpCgB,EAAUrB,EAAUK,CAAM,EAC1BiB,EAAOjB,EAAO,MAAQ,CAAA,EAE5B,OACEkB,EAAAA,OAAAC,WAAA,CAEE,SAAA,CAAAD,EAAAA,OAAC,KAAA,CACC,QAASH,EAAS,OAAS,EAAIP,EAAW,OAC1C,UAAW,8EACTO,EAAS,OAAS,EAAI,2BAA6B,EACrD,GAGA,SAAA,CAAAG,EAAAA,OAAC,MAAG,UAAU,cACZ,SAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,QAAK,UAAW,qCAAqCX,EAAW,YAAc,EAAE,IAAIQ,EAAS,SAAW,EAAI,YAAc,oBAAoB,GAC7I,SAAAG,EAAAA,OAACE,EAAA,CAAa,KAAM,IAApB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwB,CAAA,EAD1B,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAF,EAAAA,OAAC,OAAA,CAAK,UAAU,4BACd,SAAA,CAAAA,EAAAA,OAACG,EAAA,CAAW,KAAMrB,EAAO,KAAM,SAAUA,EAAO,GAAI,MAAO,EAAA,EAA3D,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAkE,EACjEe,EAAS,OAAS,GACjBG,EAAAA,OAAC,OAAI,UAAU,wCAAyC,WAAS,MAAA,EAAjE,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwE,CAAA,CAAA,EAH5E,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAKA,EACCD,EAAK,OAAS,GACbC,EAAAA,OAAC,MAAA,CAAI,UAAU,8BACZ,SAAA,CAAAD,EAAK,MAAM,EAAG,CAAC,EAAE,IAAKK,GACrBJ,EAAAA,OAAC,OAAA,CAAe,UAAU,mFACvB,SAAAI,CAAA,EADQA,EAAX,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CACD,EACAL,EAAK,OAAS,GACbC,EAAAA,OAAC,QAAK,UAAU,kCAAkC,MAAOD,EAAK,MAAM,CAAC,EAAE,KAAK,IAAI,EAAG,SAAA,GAAA,EAAnF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA2F,CAAA,CAAA,EAP/F,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IASA,CAAA,CAAA,EApBJ,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAsBA,CAAA,EAvBF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAwBA,EAGAC,EAAAA,OAAC,MAAG,UAAU,qCACZ,kBAACK,EAAA,CAAY,OAAQvB,EAAO,MAAA,EAA5B,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoC,CAAA,EADtC,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAGAkB,SAAC,KAAA,CAAG,UAAU,mBACZ,kBAACM,EAAA,CACE,SAAA,CAAA,CAACR,IACAhB,EAAO,SAAW,YAChBkB,EAAAA,OAACO,EAAA,CACC,KAAMC,EACN,MAAM,oBACN,QAAS,IAAMb,EAAW,OAAOb,EAAO,EAAE,CAAA,EAH5C,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAMAkB,EAAAA,OAACO,EAAA,CACC,KAAME,EACN,MAAM,iBACN,QAAS,IAAMf,EAAQ,OAAOZ,EAAO,EAAE,EACvC,WAAW,8CAAA,EAJb,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,GAQJkB,EAAAA,OAACO,EAAA,CACC,KAAMG,EACN,MAAM,cACN,QAASnB,CAAA,EAHX,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAKC,CAACO,GACAE,EAAAA,OAACO,EAAA,CACC,KAAMI,EACN,MAAM,gBACN,QAASnB,EACT,WAAW,4CAAA,EAJb,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EA5BJ,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IA8BA,CAAA,EA/BF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAgCA,CAAA,CAAA,EAvEF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EA2ECH,GAAYO,EAAa,IAAKgB,GAC7BZ,EAAAA,OAAC,KAAA,CAEC,QAAS,IAAMP,EAAUmB,CAAI,EAC7B,UAAU,yGAGV,SAAA,CAAAZ,EAAAA,OAAC,KAAA,CAAG,UAAU,oBACZ,SAAA,CAAAA,SAACa,EAAA,CAAS,KAAMD,EAAK,KAAM,KAAK,IAAA,EAAhC,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,EACpCA,EAAK,aACJZ,SAAC,KAAE,UAAU,uDAAwD,WAAK,aAA1E,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsF,CAAA,CAAA,EAH1F,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EAGAA,EAAAA,OAAC,KAAA,CAAG,UAAU,kBAAA,EAAd,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiC,WAGhC,KAAA,CAAG,UAAU,mBACZ,SAAAA,SAAC,MAAA,CAAI,UAAU,gCACb,SAAAA,EAAAA,OAAC,SAAA,CACC,QAAUc,GAAM,CAAEA,EAAE,gBAAA,EAAmBrB,EAAUmB,CAAI,CAAG,EACxD,UAAU,gGACV,MAAM,WAEN,SAAAZ,EAAAA,OAACe,EAAA,CAAK,UAAU,cAAc,YAAa,GAAA,EAA3C,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgD,CAAA,EALlD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,EAPF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAQA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAUA,CAAA,CAAA,EA1BKH,EAAK,KADZ,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CA6BD,CAAA,CAAA,EA3GH,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA4GA,CAEJ,CCjIO,SAASI,IAAiB,CAC/B,MAAMC,EAAWC,EAAA,EACX,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAC,CAAA,EAAeC,EAAgB,CACzD,QAAS,CAAE,OAAQ,GAAI,OAAQ,GAAI,IAAK,EAAA,CAAG,CAC5C,EAEK,CAAE,KAAAC,EAAM,UAAAC,CAAA,EAAcC,EAAc,CACxC,OAAQN,EAAQ,QAAU,OAC1B,OAAQA,EAAQ,QAAU,OAC1B,KAAMA,EAAQ,KAAO,MAAA,CACtB,EACKzB,EAAUgC,EAAA,EACV/B,EAAagC,EAAA,EACbC,EAAeC,EAAA,EAEf,CAACC,EAAeC,CAAgB,EAAIC,EAAAA,SAAiC,IAAI,EACzE,CAAE,YAAAC,EAAa,OAAQC,CAAA,EAAiBC,EAAgB,yBAAyB,EACjF,CAACC,EAASC,CAAU,EAAIL,EAAAA,SAIpB,IAAI,EAERM,GAAUf,GAAA,YAAAA,EAAM,UAAW,CAAA,EAC3BgB,GAAQhB,GAAA,YAAAA,EAAM,QAAS,EAGvBiB,EAAaC,EAAAA,QAAQ,IAAM,CAC/B,MAAMC,MAAc,IACpB,UAAWC,KAAKL,EACd,UAAWrD,KAAK0D,EAAE,MAAQ,CAAA,EAAID,EAAQ,IAAIzD,CAAC,EAE7C,MAAO,CAAC,GAAGyD,CAAO,EAAE,OAAO,IAAKzD,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAChE,EAAG,CAACqD,CAAO,CAAC,EAGNM,EAAkBH,EAAAA,QAAQ,IACzBtB,EAAQ,OACNmB,EAAQ,OAAQK,GAAM9D,GAAc8D,EAAGxB,EAAQ,MAAM,CAAC,EADjCmB,EAE3B,CAACA,EAASnB,EAAQ,MAAM,CAAC,EAG5B0B,EAAAA,UAAU,IAAM,CACd,GAAI,CAAC1B,EAAQ,OAAQ,OACrB,MAAMnC,EAAImC,EAAQ,OAAO,YAAA,EACzB,UAAWwB,KAAKC,GACCD,EAAE,eAAiB,CAAA,GACP,KACxB1D,GAAA,OAAM,OAAAA,EAAE,KAAK,cAAc,SAASD,CAAC,KAAKL,EAAAM,EAAE,cAAF,YAAAN,EAAe,cAAc,SAASK,IAAC,GAEhE,CAACiD,EAAY,IAAIU,EAAE,EAAE,GACvCT,EAAaS,EAAE,EAAE,CAGvB,EAAG,CAACxB,EAAQ,OAAQyB,CAAe,CAAC,EAEpC,MAAME,EAAe,IAAM,CACpBhB,GACLF,EAAa,OAAOE,EAAc,GAAI,CACpC,UAAW,IAAMC,EAAiB,IAAI,CAAA,CACvC,CACH,EAEA,OAAIP,WAEC,MAAA,CACC,SAAA,CAAAxB,EAAAA,OAAC+C,EAAA,CAAW,MAAM,kBAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAqC,EACrC/C,EAAAA,OAAC,OAAI,UAAU,0BACZ,eAAM,KAAK,CAAE,OAAQ,EAAG,EAAE,IAAI,CAACgD,EAAGC,IACjCjD,EAAAA,OAAC,MAAA,CAAY,UAAU,uDACrB,SAAAA,SAAC,MAAA,CAAI,UAAU,sCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsD,GAD9CiD,EAAV,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CACD,GALH,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAMA,CAAA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IASA,WAKD,MAAA,CACC,SAAA,CAAAjD,EAAAA,OAAC+C,EAAA,CACC,MAAM,mBACN,SAAS,sCACT,QACE/C,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMiB,EAAS,kBAAkB,EAC1C,UAAU,sBACX,SAAA,iBAAA,EAHD,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,EATJ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAaAjB,SAAC,IAAA,CAAE,UAAU,6DAA6D,SAAA,wGAAA,EAA1E,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,WAECkD,EAAA,CACC,SAAA,CAAAlD,EAAAA,OAACmD,EAAA,CACC,MAAM,SACN,MAAOhC,EAAQ,OACf,SAAWiC,GAAMhC,EAAU,SAAUgC,CAAC,EACtC,YAAY,wBAAA,EAJd,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMApD,EAAAA,OAACqD,EAAA,CACC,MAAM,MACN,MAAOlC,EAAQ,IACf,SAAWiC,GAAMhC,EAAU,MAAOgC,CAAC,EACnC,QAASZ,CAAA,EAJX,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMAxC,EAAAA,OAACqD,EAAA,CACC,MAAM,SACN,MAAOlC,EAAQ,OACf,SAAWiC,GAAMhC,EAAU,SAAUgC,CAAC,EACtC,QAAS,CACP,CAAE,MAAO,aAAc,MAAO,YAAA,EAC9B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,QAAS,MAAO,OAAA,EACzB,CAAE,MAAO,eAAgB,MAAO,cAAA,CAAe,CACjD,EATF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAUA,CAAA,EAvBF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAwBA,WAEC,MAAA,CAAI,UAAW,cAEd,SAAA,CAAApD,SAAC,OAAI,UAAW,GAAGoC,EAAU,iBAAmB,QAAQ,kBACrD,SAAA,CAAAQ,EAAgB,SAAW,EAC1B5C,SAACsD,EAAA,CAAW,MAAM,kBAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,EAErCtD,SAAC,QAAA,CAAM,UAAU,SACf,SAAA,CAAAA,SAAC,QAAA,CACC,SAAAA,EAAAA,OAAC,KAAA,CAAG,UAAU,WACZ,SAAA,CAAAA,SAAC,KAAA,CAAG,UAAU,kIAAkI,SAAA,eAAA,EAAhJ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,SAAC,KAAA,CAAG,UAAU,uIAAuI,SAAA,QAAA,EAArJ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,KAAA,CAAG,UAAU,2CAAA,EAAd,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0D,CAAA,CAAA,EAP5D,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAQA,CAAA,EATF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAUA,EACAA,EAAAA,OAAC,QAAA,CACE,SAAA4C,EAAgB,IAAK9D,GACpBkB,EAAAA,OAACZ,GAAA,CAEC,OAAAN,EACA,SAAUmD,EAAY,IAAInD,EAAO,EAAE,EACnC,SAAU,IAAMoD,EAAapD,EAAO,EAAE,EACtC,OAAQ,IAAMmC,EAAS,gBAAgBnC,EAAO,EAAE,EAAE,EAClD,SAAU,IAAMiD,EAAiBjD,CAAM,EACvC,UAAY8B,GACVyB,EAAW,CACT,SAAUvD,EAAO,GACjB,WAAYA,EAAO,KACnB,KAAA8B,CAAA,CACD,EAEH,QAAAlB,EACA,WAAAC,EACA,aAAcT,GACXJ,EAAO,eAAiB,CAAA,EACzBqC,EAAQ,MAAA,CACV,EAlBKrC,EAAO,GADd,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAqBD,CAAA,EAvBH,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAwBA,CAAA,CAAA,EApCF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAqCA,EAGFkB,EAAAA,OAACuD,EAAA,CACC,KAAMlC,EAAW,KACjB,WAAYA,EAAW,WAAWkB,CAAK,EACvC,aAAclB,EAAW,QACzB,MAAAkB,EACA,SAAUlB,EAAW,SACrB,iBAAkBA,EAAW,WAAA,EAN/B,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOA,CAAA,EAnDF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAoDA,EAGCe,GACCpC,EAAAA,OAAC,MAAA,CAAI,UAAU,+DACb,SAAAA,EAAAA,OAACwD,EAAA,CACC,SAAUpB,EAAQ,SAClB,WAAYA,EAAQ,WACpB,KAAMA,EAAQ,KACd,QAAS,IAAMC,EAAW,IAAI,CAAA,EAJhC,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,EANF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAOA,CAAA,CAAA,EAjEJ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAmEA,EAGArC,EAAAA,OAACyD,EAAA,CACC,KAAM,CAAC,CAAC3B,EACR,QAAS,IAAMC,EAAiB,IAAI,EACpC,UAAWe,EACX,MAAM,oBACN,YACE9C,EAAAA,OAAAC,WAAA,CAAE,SAAA,CAAA,SACO,IACPD,SAAC,OAAA,CAAK,UAAU,gCAAiC,0BAAe,IAAA,EAAhE,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqE,EAAO,6CAAA,CAAA,EAF9E,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAIA,EAEF,UAAW4B,EAAa,UACxB,MAAOA,EAAa,KAAA,EAbtB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAcA,CAAA,EAhIF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAiIA,CAEJ"}
@@ -1,2 +0,0 @@
1
- import{j as e,C as B,c as Ee,J as Ce}from"./index-Da8R5Fn_.js";import{a as o}from"./vendor-query-DLp59M9_.js";import{P as ye}from"./PageHeaderWithStats-cQKaJBAM.js";import{F as Ve,b as je}from"./FilterBar-CZGTOMoo.js";import{u as De}from"./useFilterParams-CGRYFw_A.js";import{u as ae,a as se,b as ke,c as we,d as Qe}from"./controlplane-BiPTCZeL.js";import{R as re,a as I}from"./RowActions-DBpvm3Jy.js";import{ai as O,aj as z,ak as Se,P as Te,l as Pe,A as Fe,a1 as Me,R as Re,S as _e,al as $e,E as Ae,am as Be}from"./vendor-icons-1qQ3NKfa.js";import{M as Ie}from"./Modal-EUrK2c_A.js";import{D as ne}from"./DataTable-etck0Zmp.js";import{C as G}from"./CollapsibleSection-4Eo3b5ha.js";import{T as Oe}from"./TaskQueuePill-Dtsa8CPO.js";import"./vendor-react-Co3Y8ikm.js";import"./EmptyState-Bk3_P-b8.js";const We=[{label:"15m",value:"15m"},{label:"30m",value:"30m"},{label:"1h",value:"1h"},{label:"1d",value:"1d"},{label:"7d",value:"7d"}],Le={pong:"text-status-success",ping:"text-accent",throttle:"text-status-warning",job:"text-purple-400",work:"text-text-secondary",activate:"text-status-error",cron:"text-text-tertiary",user:"text-text-secondary"},Je=250;function _(t){return!!t.worker_topic}function $(t){return typeof t.throttle=="number"&&t.throttle!==0}function K(t){return t===void 0||t===0?"Normal":t===-1?"Paused":t>=864e5?`${(t/864e5).toFixed(0)}d`:t>=36e5?`${(t/36e5).toFixed(1)}h`:t>=6e4?`${(t/6e4).toFixed(1)}m`:t>=1e3?`${(t/1e3).toFixed(1)}s`:`${t}ms`}function le(t,a){if(!t||!a)return"—";const s=parseFloat(t),r=parseFloat(a);return isNaN(s)||isNaN(r)?"—":`${(s-r).toFixed(1)} / ${s.toFixed(1)} GB`}function oe(t){return t.replace(/^hmsh:[^:]+:x:/,"")||"(engine)"}const ie=[{key:"pong",label:"Pong",description:"Roll call responses"},{key:"ping",label:"Ping",description:"Roll call broadcasts"},{key:"throttle",label:"Throttle",description:"Throttle commands"},{key:"job",label:"Job",description:"Job lifecycle events"},{key:"work",label:"Work",description:"Worker dispatch events"},{key:"activate",label:"Activate",description:"Worker activation"},{key:"cron",label:"Cron",description:"Cron schedule triggers"},{key:"user",label:"User",description:"User-defined messages"}];function k(t){return`${t.engine_id}-${t.worker_topic||"engine"}`}function Ge(t){const a=new Map;for(const s of t){if(!s.worker_topic)continue;const r=s.worker_topic;a.has(r)||a.set(r,[]),a.get(r).push(s)}return a}function ze(t){let a=0,s=0,r=0;for(const l of t)if(l.counts)for(const[n,p]of Object.entries(l.counts))a+=p,n==="200"?s+=p:n==="500"&&(r+=p);return{total:a,success:s,errors:r}}function Ke(){return{key:"throttle",label:"Throttle",render:t=>{const a=t.throttle;return a===-1?e.jsxDEV("span",{className:"text-xs text-status-error font-medium",children:"Paused"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:23,columnNumber:28},this):a&&a>0?e.jsxDEV("span",{className:"text-xs text-status-warning font-medium",children:K(a)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:24,columnNumber:30},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:25,columnNumber:14},this)},className:"w-24"}}function Ue(){return{key:"memory",label:"Memory",render:t=>{var a,s;return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:le((a=t.system)==null?void 0:a.TotalMemoryGB,(s=t.system)==null?void 0:s.FreeMemoryGB)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:36,columnNumber:7},this)},className:"w-36"}}function He(t,a){return{key:"actions",label:"",render:s=>e.jsxDEV(re,{children:[$(s)&&e.jsxDEV(I,{icon:z,title:"Resume (remove throttle)",onClick:()=>a(s),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:54,columnNumber:11},this),e.jsxDEV(I,{icon:O,title:"Adjust throttle",onClick:()=>t(s)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:61,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:52,columnNumber:7},this),className:"w-16"}}function qe(t){const a=t.profiles.some(s=>t.selectedIds.has(k(s)));return[{key:"select",label:e.jsxDEV("span",{className:"inline-flex items-center gap-2",children:[e.jsxDEV("input",{type:"checkbox",checked:t.profiles.length>0&&t.profiles.every(s=>t.selectedIds.has(k(s))),onChange:t.toggleAll,className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:76,columnNumber:11},this),a&&t.onBulkThrottle&&e.jsxDEV(O,{className:"w-[14px] h-[14px] text-text-tertiary hover:text-accent cursor-pointer",strokeWidth:1.5,onClick:s=>{s.stopPropagation(),t.onBulkThrottle()}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:83,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:75,columnNumber:9},this),render:s=>e.jsxDEV("input",{type:"checkbox",checked:t.selectedIds.has(k(s)),onChange:r=>{r.stopPropagation(),t.toggleCheckbox(s)},onClick:r=>r.stopPropagation(),className:"rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:92,columnNumber:9},this),className:"w-16"},{key:"engine_id",label:"Engine ID",render:s=>e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:s.engine_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:106,columnNumber:9},this),className:"w-48"},Ke(),{key:"processed",label:"Processed",render:s=>{const r=ze([s]);return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:r.total.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/columns.tsx",lineNumber:116,columnNumber:16},this)},className:"w-24"},Ue(),He(t.onRowThrottle,t.onResumeThrottle)]}function Ye({activeAppId:t,allProfiles:a,profiles:s}){const r=ae(),[l,n]=o.useState(new Set),[p,i]=o.useState(!1),[N,m]=o.useState([]);o.useEffect(()=>{n(new Set)},[t]);const j=o.useCallback(h=>{n(w=>{const V=new Set(w),Q=k(h);return V.has(Q)?V.delete(Q):V.add(Q),V})},[]),v=o.useCallback(()=>{l.size===s.length?n(new Set):n(new Set(s.map(k)))},[s,l.size]),d=o.useMemo(()=>{const h=s.filter(E=>l.has(k(E)));if(h.length===0)return[];if(h.length===a.length)return[{label:"Entire Mesh"}];const w=h.filter(E=>!_(E)),V=h.filter(_),Q=[];for(const E of w)Q.push({label:`Engine ${E.engine_id}`,guid:E.engine_id});const T=new Map;for(const E of V){const S=E.worker_topic;T.has(S)||T.set(S,[]),T.get(S).push(E)}for(const[E,S]of T){const W=a.filter(F=>F.worker_topic===E);if(S.length===W.length)Q.push({label:E,topic:E});else for(const F of S)Q.push({label:`${E} ${F.engine_id}`,guid:F.engine_id})}return Q},[s,a,l]);return{selectedIds:l,setSelectedIds:n,toggleCheckbox:j,toggleAll:v,throttleModalOpen:p,throttleTargets:N,selectedThrottleTargets:d,throttleMutation:r,handleBulkThrottle:h=>{const w=N.length>0?N:d;for(const V of w)r.mutate({appId:t,throttle:h,...V.topic?{topic:V.topic}:{},...V.guid?{guid:V.guid}:{}});i(!1),m([])},handleRowClick:h=>{const w=_(h)?`${h.worker_topic} ${h.engine_id}`:`Engine ${h.engine_id}`;m([{label:w,guid:h.engine_id}]),i(!0)},handleBulkThrottleOpen:()=>{m(d),i(!0)},handleResumeThrottle:h=>{r.mutate({appId:t,throttle:0,guid:h.engine_id})},handleResumeQueue:h=>{r.mutate({appId:t,throttle:0,topic:h})},handleQueueThrottle:h=>{m([{label:h,topic:h}]),i(!0)},closeThrottleModal:()=>{i(!1),m([])}}}const Xe=[{label:"Resume",ms:0},{label:"0.5s",ms:500},{label:"1s",ms:1e3},{label:"5s",ms:5e3},{label:"30s",ms:3e4},{label:"Pause",ms:-1}];function Ze({target:t}){const a=t.label==="Entire Mesh",s=t.label==="All Engines"||t.label.startsWith("Engine "),r=a?"bg-status-error/10 text-status-error":s?"bg-blue-500/10 text-blue-500":"bg-accent/[0.06] text-text-secondary",l=t.guid?"guid":t.topic?"topic":"mesh";return e.jsxDEV("span",{className:`inline-flex items-center gap-1.5 px-2 py-0.5 text-[10px] font-medium rounded-lg ${r}`,children:[t.label,e.jsxDEV("span",{className:"text-[8px] opacity-50",children:l},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:35,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:33,columnNumber:5},this)}function et({open:t,onClose:a,targets:s,onApply:r,isPending:l}){const[n,p]=o.useState("0");return e.jsxDEV(Ie,{open:t,onClose:a,title:"Adjust Throttle",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Targets"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:47,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-1.5",children:s.map((i,N)=>e.jsxDEV(Ze,{target:i},i.guid||i.topic||N,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:50,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:48,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:46,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Presets"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:56,columnNumber:11},this),e.jsxDEV("div",{className:"flex flex-wrap gap-2",children:Xe.map(i=>e.jsxDEV("button",{onClick:()=>{p(i.ms===-1?"-1":String(i.ms/1e3)),r(i.ms)},disabled:l,className:`px-3 py-1.5 text-xs rounded transition-colors ${i.ms===-1?"bg-status-error/10 text-status-error hover:bg-status-error/20":i.ms===0?"bg-status-success/10 text-status-success hover:bg-status-success/20":"bg-surface-sunken text-text-secondary hover:bg-surface-hover"} disabled:opacity-50`,children:i.label},i.label,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:59,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:57,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:55,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Custom (seconds between messages)"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:78,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("input",{type:"number",step:"0.1",min:"-1",value:n,onChange:i=>p(i.target.value),className:"input text-xs py-1.5 px-3 w-28"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:82,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>{const i=parseFloat(n);isNaN(i)||r(i===-1?-1:Math.round(i*1e3))},disabled:l,className:"btn-primary text-xs py-1.5 px-4 disabled:opacity-50",children:"Apply"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:90,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:81,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1",children:"0 = resume, -1 = pause indefinitely"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:102,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:77,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:45,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ThrottleModal.tsx",lineNumber:44,columnNumber:5},this)}function tt(){const{data:t}=se(),a=ae(),[s,r]=o.useState(!1),l=(t==null?void 0:t.apps)??[],n=p=>{for(const i of l)a.mutate({appId:i.appId,throttle:p});r(!1)};return s?e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:"text-xs text-status-error",children:"Pause all queues?"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:22,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>n(-1),className:"px-2.5 py-1 text-xs rounded-md bg-status-error text-white hover:bg-status-error/90 transition-colors",children:"Confirm"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:23,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>r(!1),className:"px-2.5 py-1 text-xs text-text-tertiary hover:text-text-primary transition-colors",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:29,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:21,columnNumber:7},this):e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("button",{onClick:()=>r(!0),className:"flex items-center gap-1.5 px-2.5 py-1 text-xs rounded-md text-status-error/80 hover:text-status-error hover:bg-status-error/10 transition-colors",title:"Pause all queues",children:[e.jsxDEV(Se,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:46,columnNumber:9},this),"Pause All"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV("button",{onClick:()=>n(0),className:"flex items-center gap-1.5 px-2.5 py-1 text-xs rounded-md text-status-success/80 hover:text-status-success hover:bg-status-success/10 transition-colors",title:"Resume all queues",children:[e.jsxDEV(Te,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:54,columnNumber:9},this),"Resume All"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:49,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/EmergencyControls.tsx",lineNumber:40,columnNumber:5},this)}function at({byStream:t,onNodeFilter:a}){const[s,r]=o.useState(!1);if(o.useEffect(()=>{r(!1);const m=requestAnimationFrame(()=>r(!0));return()=>cancelAnimationFrame(m)},[t]),t.length===0)return e.jsxDEV("p",{className:"text-xs text-text-tertiary py-4 text-center",children:"No activity in this period"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:26,columnNumber:12},this);const l=t.filter(m=>m.stream_type==="engine"),n=t.filter(m=>m.stream_type==="worker"),p=Math.max(...t.map(m=>m.count)),i=m=>{const j=p>0?m.count/p*100:0,v=m.stream_type==="engine",d=v?"(all engines)":oe(m.stream_name),x=v?"bg-blue-500/70":"bg-accent/60",D=v?"text-blue-500":"text-text-tertiary";return e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:`text-[9px] font-mono ${D} w-36 truncate text-right shrink-0`,title:m.stream_name,children:d},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:41,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 h-4 bg-surface-sunken rounded overflow-hidden",children:e.jsxDEV("div",{className:`h-full ${x} rounded transition-all duration-500 ease-out`,style:{width:s?`${j}%`:"0%"}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:48,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:47,columnNumber:9},this),e.jsxDEV("span",{className:"text-[10px] font-mono tabular-nums text-text-secondary w-12 text-right shrink-0",children:m.count.toLocaleString()},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:53,columnNumber:9},this)]},`${m.stream_type}-${m.stream_name}`,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:40,columnNumber:7},this)},N="text-[9px] uppercase tracking-widest font-semibold mb-1 cursor-pointer hover:underline";return e.jsxDEV("div",{className:"space-y-1.5",children:[l.length>0&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:`${N} text-blue-500/70 hover:text-blue-500`,onClick:()=>a==null?void 0:a("engines"),children:"Engine Message Volume"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:66,columnNumber:11},this),l.map(i),n.length>0&&e.jsxDEV("div",{className:"h-2"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:73,columnNumber:40},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:65,columnNumber:9},this),n.length>0&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("p",{className:`${N} text-accent/70 hover:text-accent`,onClick:()=>a==null?void 0:a("workers"),children:"Worker Message Volume"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:78,columnNumber:11},this),n.map(i)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:77,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/StreamVolumeChart.tsx",lineNumber:63,columnNumber:5},this)}function st({queue:t,workers:a,expanded:s,onToggle:r,onWorkerClick:l,onResumeThrottle:n,onQueueThrottle:p,onResumeQueue:i,byStream:N,activeDuration:m}){const j=o.useMemo(()=>{const d=N.find(x=>x.stream_type==="worker"&&oe(x.stream_name)===t);return(d==null?void 0:d.count)??0},[N,t]),v=o.useMemo(()=>[{key:"engine_id",label:"Worker ID",render:d=>e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:d.engine_id},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:55,columnNumber:9},this),className:"w-48"},{key:"throttle",label:"Throttle",render:d=>{const x=d.throttle;return x===-1?e.jsxDEV("span",{className:"text-xs text-status-error font-medium",children:"Paused"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:66,columnNumber:30},this):x&&x>0?e.jsxDEV("span",{className:"text-xs text-status-warning font-medium",children:K(x)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:67,columnNumber:32},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:68,columnNumber:16},this)},className:"w-24"},{key:"memory",label:"Memory",render:d=>{var x,D;return e.jsxDEV("span",{className:"text-xs font-mono text-text-tertiary",children:le((x=d.system)==null?void 0:x.TotalMemoryGB,(D=d.system)==null?void 0:D.FreeMemoryGB)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:76,columnNumber:9},this)},className:"w-36"},{key:"actions",label:"",render:d=>e.jsxDEV(re,{children:[$(d)&&e.jsxDEV(I,{icon:z,title:"Resume (remove throttle)",onClick:()=>n(d),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:88,columnNumber:13},this),e.jsxDEV(I,{icon:O,title:"Adjust throttle",onClick:()=>l(d)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:95,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:86,columnNumber:9},this),className:"w-16"}],[l,n]);return e.jsxDEV("div",{children:[e.jsxDEV("button",{onClick:()=>r(t),className:"group/row relative flex items-center gap-3 w-full py-2 hover:bg-surface-hover transition-colors text-left rounded",children:[e.jsxDEV(Pe,{className:`w-3.5 h-3.5 text-text-tertiary/50 transition-transform duration-200 ${s?"rotate-90":""}`,strokeWidth:2},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:112,columnNumber:9},this),e.jsxDEV(Oe,{queue:t,size:"sm"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:116,columnNumber:9},this),e.jsxDEV("span",{className:"flex-1"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:118,columnNumber:9},this),e.jsxDEV("span",{className:`flex items-center gap-1 text-xs w-24 ${a.some($)?"text-status-warning":"text-text-tertiary"}`,children:[e.jsxDEV(Fe,{className:"w-3 h-3 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:121,columnNumber:11},this),e.jsxDEV("span",{className:"font-mono tabular-nums",children:a.length},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:122,columnNumber:11},this),e.jsxDEV("span",{children:"workers"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:123,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:120,columnNumber:9},this),e.jsxDEV("span",{className:"flex items-center gap-1 text-xs font-mono text-text-tertiary w-28 justify-end mr-16",children:j>0?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(Me,{className:"w-3 h-3 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:129,columnNumber:15},this),j.toLocaleString()," in ",m]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:128,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary/40",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:133,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:126,columnNumber:9},this),e.jsxDEV("span",{className:"absolute right-3 top-1/2 -translate-y-1/2 opacity-0 group-hover/row:opacity-100 transition-opacity flex items-center gap-2",children:[a.some($)&&e.jsxDEV(z,{className:"w-4 h-4 text-text-tertiary hover:text-status-success",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),i(t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:139,columnNumber:13},this),e.jsxDEV(O,{className:"w-4 h-4 text-text-tertiary hover:text-accent",strokeWidth:1.5,onClick:d=>{d.stopPropagation(),p(t)}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:148,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:137,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:108,columnNumber:7},this),e.jsxDEV(B,{open:s,children:e.jsxDEV("div",{className:"ml-6",children:e.jsxDEV(ne,{columns:v,data:a,keyFn:k,onRowClick:l,emptyMessage:"No workers",inline:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:161,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:160,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:159,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QueueCard.tsx",lineNumber:107,columnNumber:5},this)}let rt=0;function nt({event:t}){var r,l,n;const[a,s]=o.useState(!1);return e.jsxDEV("div",{className:"border-b border-surface-border/50 last:border-b-0",children:[e.jsxDEV("button",{onClick:()=>s(!a),className:"flex items-center gap-2 py-1.5 w-full text-left hover:bg-surface-hover/50 transition-colors",children:[e.jsxDEV("span",{className:"text-[9px] font-mono text-text-tertiary whitespace-nowrap tabular-nums shrink-0",children:new Date(t.timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:27,columnNumber:9},this),e.jsxDEV("span",{className:`text-[9px] font-medium px-1 py-0.5 rounded ${Le[t.type]||"text-text-tertiary"} bg-surface-sunken whitespace-nowrap shrink-0`,children:t.type},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:30,columnNumber:9},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary font-mono flex-1 min-w-0 break-all",children:[(r=t.data)!=null&&r.guid?String(t.data.guid):"",(l=t.data)!=null&&l.topic?` ${String(t.data.topic)}`:"",t.type==="throttle"?` → ${K((n=t.data)==null?void 0:n.throttle)}`:""]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:33,columnNumber:9},this),e.jsxDEV("svg",{className:`w-2.5 h-2.5 text-text-tertiary shrink-0 transition-transform duration-150 ${a?"rotate-180":""}`,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:e.jsxDEV("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:42,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:38,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:23,columnNumber:7},this),e.jsxDEV(B,{open:a,children:e.jsxDEV("div",{className:"pb-2",children:e.jsxDEV(Ce,{data:t.data},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:47,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:46,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:45,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:22,columnNumber:5},this)}function lt({channels:t,onToggle:a,customFilter:s,onCustomFilterChange:r}){return e.jsxDEV("div",{className:"space-y-3 pb-3 border-b border-surface-border mb-3",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Channels"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:67,columnNumber:9},this),e.jsxDEV("p",{className:"text-[9px] text-text-tertiary",children:"Unchecked channels are dropped before buffering"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:70,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:66,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-2 gap-1",children:ie.map(l=>e.jsxDEV("label",{className:"flex items-center gap-2 cursor-pointer py-0.5",children:[e.jsxDEV("input",{type:"checkbox",checked:t.has(l.key),onChange:()=>a(l.key),className:"w-3 h-3 rounded border-border accent-accent"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:77,columnNumber:13},this),e.jsxDEV("span",{className:"text-[10px] text-text-secondary",title:l.description,children:l.label},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:83,columnNumber:13},this)]},l.key,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:76,columnNumber:11},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:74,columnNumber:7},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[9px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Text Filter"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:90,columnNumber:9},this),e.jsxDEV("input",{type:"text",value:s,onChange:l=>r(l.target.value),placeholder:"pong",className:"input text-[10px] font-mono py-1 px-2 w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:93,columnNumber:9},this),e.jsxDEV("p",{className:"text-[9px] text-text-tertiary mt-1",children:["Filter by event type, e.g. ",e.jsxDEV("span",{className:"font-mono",children:"pong"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:101,columnNumber:38},this),", ",e.jsxDEV("span",{className:"font-mono",children:"throttle"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:101,columnNumber:79},this),", or any text in the event data."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:100,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:89,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:65,columnNumber:5},this)}function ot({bridgeActive:t}){const[a,s]=o.useState(!1),[r,l]=o.useState(!1),[n,p]=o.useState([]),[i,N]=o.useState(()=>new Set(ie.map(c=>c.key))),[m,j]=o.useState(""),v=o.useRef(i);o.useEffect(()=>{v.current=i},[i]);const d=o.useRef(m);o.useEffect(()=>{d.current=m},[m]);const x=c=>{N(b=>{const g=new Set(b);return g.has(c)?g.delete(c):g.add(c),g})};Ee("lt.events.mesh.>",o.useCallback(c=>{var y;const b=((y=c.type)==null?void 0:y.replace("mesh.",""))||"unknown";if(!v.current.has(b))return;const g=d.current;g&&!`${b} ${JSON.stringify(c.data||c)}`.toLowerCase().includes(g.toLowerCase())||p(P=>[{id:++rt,type:b,timestamp:c.timestamp||new Date().toISOString(),data:c.data||c},...P].slice(0,Je))},[]));const D=()=>p([]);return e.jsxDEV("div",{className:"border-l border-surface-border pl-6 pt-4 min-h-[300px] sticky top-14 self-start max-h-[calc(100vh-8rem)] flex flex-col",children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-3",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Event Stream"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:169,columnNumber:9},this),e.jsxDEV(Re,{className:`w-3 h-3 ${t?"text-status-success animate-pulse":"text-text-tertiary"}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:172,columnNumber:9},this),e.jsxDEV("span",{className:"text-[9px] text-text-tertiary",children:t?"Live":"..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:173,columnNumber:9},this),e.jsxDEV("span",{className:"ml-auto flex items-center gap-1",children:[e.jsxDEV("button",{onClick:()=>{s(c=>!c),l(!1)},className:`p-1 rounded transition-colors ${a?"text-accent bg-accent/10":"text-text-tertiary hover:text-text-primary"}`,title:"Configure channels",children:e.jsxDEV(_e,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:183,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:178,columnNumber:11},this),e.jsxDEV("button",{onClick:()=>{l(c=>!c),s(!1)},className:`p-1 rounded transition-colors ${r?"text-accent bg-accent/10":"text-text-tertiary hover:text-text-primary"}`,title:"View raw JSON",children:e.jsxDEV($e,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:190,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:185,columnNumber:11},this),n.length>0&&e.jsxDEV("button",{onClick:D,className:"p-1 rounded text-text-tertiary hover:text-text-primary transition-colors",title:"Clear events",children:e.jsxDEV(Ae,{className:"w-3.5 h-3.5"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:198,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:193,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:177,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:168,columnNumber:7},this),e.jsxDEV(B,{open:a,children:e.jsxDEV(lt,{channels:i,onToggle:x,customFilter:m,onCustomFilterChange:j},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:206,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:205,columnNumber:7},this),e.jsxDEV(B,{open:r,children:e.jsxDEV("div",{className:"pb-3 border-b border-surface-border mb-3",children:e.jsxDEV("pre",{className:"text-[9px] font-mono text-text-tertiary bg-surface-sunken rounded-lg p-3 max-h-[50vh] overflow-auto whitespace-pre-wrap",children:JSON.stringify(n.slice(0,50),null,2)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:217,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:216,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:215,columnNumber:7},this),n.length>0&&e.jsxDEV("p",{className:"text-[9px] text-text-tertiary mb-2",children:[n.length," events"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:225,columnNumber:9},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto",children:n.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary py-6 text-center",children:t?"Waiting for events...":"Subscribing..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:233,columnNumber:11},this):n.map(c=>e.jsxDEV(nt,{event:c},c.id,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:238,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:231,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/QuorumFeed.tsx",lineNumber:166,columnNumber:5},this)}function it({collapsed:t,toggleSection:a,activeDuration:s,streamStats:r,isLoading:l,queueMap:n,expandedQueues:p,toggleQueue:i,allQueuesExpanded:N,toggleAllQueues:m,handleRowClick:j,handleResumeThrottle:v,handleQueueThrottle:d,handleResumeQueue:x,engineColumns:D,engines:c,bridgeActive:b}){return e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_340px] gap-6",children:[e.jsxDEV("div",{className:"flex flex-col gap-12 mt-10",children:[e.jsxDEV(G,{title:`Stream Volume (${s})`,sectionKey:"volume",isCollapsed:!!t.volume,onToggle:a,contentClassName:"mt-4 ml-7",children:e.jsxDEV(at,{byStream:(r==null?void 0:r.byStream)??[],onNodeFilter:()=>{},onQueueFilter:()=>{}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:60,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:53,columnNumber:9},this),e.jsxDEV(G,{title:"Worker Queues",sectionKey:"queues",isCollapsed:!!t.queues,onToggle:a,contentClassName:"mt-4 ml-7 flex flex-col gap-0",children:l?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Discovering mesh nodes..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:76,columnNumber:13},this):n.size===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:'No worker queues found. Click "Roll Call" to discover.'},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:78,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex justify-end mb-2",children:e.jsxDEV("button",{onClick:m,className:"text-[10px] text-accent hover:underline",children:N?"Collapse all":"Expand all"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:82,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:81,columnNumber:15},this),[...n.entries()].sort(([g],[y])=>g.localeCompare(y)).map(([g,y])=>e.jsxDEV(st,{queue:g,workers:y,expanded:p.has(g),onToggle:i,onWorkerClick:j,onResumeThrottle:v,onQueueThrottle:d,onResumeQueue:x,byStream:(r==null?void 0:r.byStream)??[],activeDuration:s},g,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:89,columnNumber:19},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:80,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:68,columnNumber:9},this),e.jsxDEV(G,{title:"Engines",sectionKey:"engines",isCollapsed:!!t.engines,onToggle:a,contentClassName:"mt-4 ml-7",children:e.jsxDEV(ne,{columns:D,data:c,keyFn:k,onRowClick:j,isLoading:l,emptyMessage:l?"Discovering engines...":"No engines found.",inline:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:115,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:108,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:51,columnNumber:7},this),e.jsxDEV(ot,{bridgeActive:b},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:127,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlaneContent.tsx",lineNumber:50,columnNumber:5},this)}function yt(){var te;const{data:t}=se(),a=(t==null?void 0:t.apps)??[],{filters:s,setFilter:r}=De({filters:{app_id:"",duration:"1h"}}),l=((te=a[0])==null?void 0:te.appId)??"durable",n=s.app_id||l,p=s.duration||"1h",i=ke(),N=6e4,{data:m,isLoading:j,error:v,refetch:d,isFetching:x}=we(n,N),{data:D}=Qe(n,p,void 0,N),c=o.useMemo(()=>[...(m==null?void 0:m.profiles)??[]].sort((f,C)=>{const R=f.worker_topic||f.stream||"",A=C.worker_topic||C.stream||"";return!f.worker_topic&&C.worker_topic?-1:f.worker_topic&&!C.worker_topic?1:R.localeCompare(A)}),[m==null?void 0:m.profiles]),b=o.useMemo(()=>c.filter(u=>!_(u)),[c]),g=o.useMemo(()=>c.filter(_),[c]),y=o.useMemo(()=>Ge(c),[c]),P=c.filter($).length,h=o.useMemo(()=>{const u=new Set(a.map(f=>f.appId));return n&&u.add(n),[...u].sort().map(f=>({value:f,label:f}))},[a,n]),[w,V]=o.useState(new Set),Q=o.useCallback(u=>{V(f=>{const C=new Set(f);return C.has(u)?C.delete(u):C.add(u),C})},[]),T=y.size>0&&[...y.keys()].every(u=>w.has(u)),E=o.useCallback(()=>{V(T?new Set:new Set(y.keys()))},[T,y]),S="lt:controlplane:collapsed",[W,F]=o.useState(()=>{try{return JSON.parse(localStorage.getItem(S)||"{}")}catch{return{}}}),me=o.useCallback(u=>{F(f=>{const C={...f,[u]:!f[u]};return localStorage.setItem(S,JSON.stringify(C)),C})},[]),{selectedIds:M,setSelectedIds:U,toggleCheckbox:H,throttleModalOpen:ce,throttleTargets:q,selectedThrottleTargets:de,throttleMutation:ue,handleBulkThrottle:pe,handleRowClick:L,handleBulkThrottleOpen:Y,handleResumeThrottle:J,handleResumeQueue:he,handleQueueThrottle:xe,closeThrottleModal:be}=Ye({activeAppId:n,allProfiles:c,profiles:c}),X=o.useCallback(()=>{const u=new Set(b.map(k)),f=b.length>0&&b.every(C=>M.has(k(C)));U(C=>{const R=new Set(C);for(const A of u)f?R.delete(A):R.add(A);return R})},[b,M,U]),Z=o.useCallback(()=>{b.filter(f=>M.has(k(f))).length!==0&&Y()},[b,M,Y]),Ne=o.useMemo(()=>qe({profiles:b,selectedIds:M,toggleAll:X,toggleCheckbox:H,onRowThrottle:L,onResumeThrottle:J,onBulkThrottle:Z}),[b,M,X,H,L,J,Z]),fe=o.useMemo(()=>{const u=[{label:"Engines",value:b.length,dotClass:"bg-blue-500"},{label:"Workers",value:g.length,dotClass:"bg-text-secondary"},{label:"Queues",value:y.size}];return P>0&&u.push({label:"Throttled",value:P,dotClass:"bg-status-warning"}),u},[b.length,g.length,y.size,P]),[ee,ge]=o.useState(!1),ve=o.useCallback(()=>{i.mutate({appId:n},{onSuccess:()=>ge(!0)})},[n,i]);return o.useEffect(()=>{!ee&&n&&ve()},[n]),e.jsxDEV("div",{children:[e.jsxDEV(ye,{title:"Task Queues",docsHash:"#docs:dashboard.md:task-queues",stats:fe,actions:e.jsxDEV(tt,{},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:187,columnNumber:18},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:183,columnNumber:7},this),e.jsxDEV(Ve,{actions:e.jsxDEV("div",{className:"flex items-center gap-1",children:We.map(u=>e.jsxDEV("button",{onClick:()=>r("duration",u.value),className:`px-3 py-1 text-xs rounded-full transition-colors ${p===u.value?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:u.label},u.value,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:194,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:192,columnNumber:11},this),children:[e.jsxDEV(je,{label:"Application",value:s.app_id,onChange:u=>r("app_id",u),options:h},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:209,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>d(),disabled:x,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs text-text-tertiary hover:text-text-primary transition-colors disabled:opacity-50",children:[e.jsxDEV(Be,{className:`w-3.5 h-3.5 ${x?"animate-spin":""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:220,columnNumber:11},this),"Roll Call"]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:215,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:190,columnNumber:7},this),v&&e.jsxDEV("div",{className:"mb-6 px-4 py-3 rounded bg-status-error/10 border border-status-error/20",children:e.jsxDEV("p",{className:"text-xs text-status-error font-medium",children:v.message==="Session expired"?"Session expired — please log in again.":`Failed to load mesh data: ${v.message}`},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:228,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:227,columnNumber:9},this),e.jsxDEV(it,{collapsed:W,toggleSection:me,activeDuration:p,streamStats:D,isLoading:j,queueMap:y,expandedQueues:w,toggleQueue:Q,allQueuesExpanded:T,toggleAllQueues:E,handleRowClick:L,handleResumeThrottle:J,handleQueueThrottle:xe,handleResumeQueue:he,engineColumns:Ne,engines:b,bridgeActive:ee},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:236,columnNumber:7},this),e.jsxDEV(et,{open:ce,onClose:be,targets:q.length>0?q:de,onApply:pe,isPending:ue.isPending},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:256,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/controlplane/ControlPlanePage.tsx",lineNumber:182,columnNumber:5},this)}export{yt as ControlPlanePage};
2
- //# sourceMappingURL=index-hfravTJF.js.map