agim-cli 1.2.45 → 1.2.48

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 (426) hide show
  1. package/CHANGELOG.md +295 -0
  2. package/README.md +39 -5
  3. package/README.zh-CN.md +40 -6
  4. package/dist/cli-ui/config-wizard.js +15 -2
  5. package/dist/cli-ui/config-wizard.js.map +1 -1
  6. package/dist/cli-ui/diag.d.ts +29 -0
  7. package/dist/cli-ui/diag.d.ts.map +1 -0
  8. package/dist/cli-ui/diag.js +135 -0
  9. package/dist/cli-ui/diag.js.map +1 -0
  10. package/dist/cli-ui/i18n.d.ts +36 -0
  11. package/dist/cli-ui/i18n.d.ts.map +1 -1
  12. package/dist/cli-ui/i18n.js +97 -0
  13. package/dist/cli-ui/i18n.js.map +1 -1
  14. package/dist/cli-ui/setup-llm.d.ts +30 -0
  15. package/dist/cli-ui/setup-llm.d.ts.map +1 -0
  16. package/dist/cli-ui/setup-llm.js +460 -0
  17. package/dist/cli-ui/setup-llm.js.map +1 -0
  18. package/dist/cli-ui/setup-mcp.d.ts +19 -0
  19. package/dist/cli-ui/setup-mcp.d.ts.map +1 -0
  20. package/dist/cli-ui/setup-mcp.js +308 -0
  21. package/dist/cli-ui/setup-mcp.js.map +1 -0
  22. package/dist/cli-ui/token-menu.js +2 -2
  23. package/dist/cli-ui/token-menu.js.map +1 -1
  24. package/dist/cli.js +100 -22
  25. package/dist/cli.js.map +1 -1
  26. package/dist/core/access-token.d.ts +16 -5
  27. package/dist/core/access-token.d.ts.map +1 -1
  28. package/dist/core/access-token.js +82 -13
  29. package/dist/core/access-token.js.map +1 -1
  30. package/dist/core/agent-cwd.d.ts.map +1 -1
  31. package/dist/core/agent-cwd.js +46 -0
  32. package/dist/core/agent-cwd.js.map +1 -1
  33. package/dist/core/approval-bus.d.ts +22 -0
  34. package/dist/core/approval-bus.d.ts.map +1 -1
  35. package/dist/core/approval-bus.js +93 -0
  36. package/dist/core/approval-bus.js.map +1 -1
  37. package/dist/core/ask-user-router.d.ts +24 -0
  38. package/dist/core/ask-user-router.d.ts.map +1 -0
  39. package/dist/core/ask-user-router.js +84 -0
  40. package/dist/core/ask-user-router.js.map +1 -0
  41. package/dist/core/ask-user-rpc.d.ts +80 -0
  42. package/dist/core/ask-user-rpc.d.ts.map +1 -0
  43. package/dist/core/ask-user-rpc.js +388 -0
  44. package/dist/core/ask-user-rpc.js.map +1 -0
  45. package/dist/core/audit-log.d.ts +1 -1
  46. package/dist/core/audit-log.d.ts.map +1 -1
  47. package/dist/core/audit-log.js.map +1 -1
  48. package/dist/core/commands/builtin.d.ts.map +1 -1
  49. package/dist/core/commands/builtin.js +21 -5
  50. package/dist/core/commands/builtin.js.map +1 -1
  51. package/dist/core/commands/goal.d.ts +3 -0
  52. package/dist/core/commands/goal.d.ts.map +1 -0
  53. package/dist/core/commands/goal.js +240 -0
  54. package/dist/core/commands/goal.js.map +1 -0
  55. package/dist/core/commands/heartbeat.d.ts +3 -0
  56. package/dist/core/commands/heartbeat.d.ts.map +1 -0
  57. package/dist/core/commands/heartbeat.js +219 -0
  58. package/dist/core/commands/heartbeat.js.map +1 -0
  59. package/dist/core/commands/router-compare.d.ts +3 -0
  60. package/dist/core/commands/router-compare.d.ts.map +1 -0
  61. package/dist/core/commands/router-compare.js +81 -0
  62. package/dist/core/commands/router-compare.js.map +1 -0
  63. package/dist/core/commands/router.d.ts.map +1 -1
  64. package/dist/core/commands/router.js +9 -1
  65. package/dist/core/commands/router.js.map +1 -1
  66. package/dist/core/commands/skill.d.ts +3 -0
  67. package/dist/core/commands/skill.d.ts.map +1 -0
  68. package/dist/core/commands/skill.js +91 -0
  69. package/dist/core/commands/skill.js.map +1 -0
  70. package/dist/core/config-schema.d.ts +28 -0
  71. package/dist/core/config-schema.d.ts.map +1 -1
  72. package/dist/core/config-schema.js +124 -0
  73. package/dist/core/config-schema.js.map +1 -1
  74. package/dist/core/goals.d.ts +81 -0
  75. package/dist/core/goals.d.ts.map +1 -0
  76. package/dist/core/goals.js +361 -0
  77. package/dist/core/goals.js.map +1 -0
  78. package/dist/core/heartbeat-store.d.ts +90 -0
  79. package/dist/core/heartbeat-store.d.ts.map +1 -0
  80. package/dist/core/heartbeat-store.js +302 -0
  81. package/dist/core/heartbeat-store.js.map +1 -0
  82. package/dist/core/heartbeat.d.ts +35 -0
  83. package/dist/core/heartbeat.d.ts.map +1 -0
  84. package/dist/core/heartbeat.js +332 -0
  85. package/dist/core/heartbeat.js.map +1 -0
  86. package/dist/core/intent-llm.d.ts +9 -0
  87. package/dist/core/intent-llm.d.ts.map +1 -1
  88. package/dist/core/intent-llm.js +77 -32
  89. package/dist/core/intent-llm.js.map +1 -1
  90. package/dist/core/llm/agent-loop.d.ts +112 -0
  91. package/dist/core/llm/agent-loop.d.ts.map +1 -0
  92. package/dist/core/llm/agent-loop.js +313 -0
  93. package/dist/core/llm/agent-loop.js.map +1 -0
  94. package/dist/core/llm/anthropic-provider.d.ts +53 -0
  95. package/dist/core/llm/anthropic-provider.d.ts.map +1 -0
  96. package/dist/core/llm/anthropic-provider.js +339 -0
  97. package/dist/core/llm/anthropic-provider.js.map +1 -0
  98. package/dist/core/llm/auto-compact.d.ts +35 -0
  99. package/dist/core/llm/auto-compact.d.ts.map +1 -0
  100. package/dist/core/llm/auto-compact.js +149 -0
  101. package/dist/core/llm/auto-compact.js.map +1 -0
  102. package/dist/core/llm/builtin-dispatcher.d.ts +21 -0
  103. package/dist/core/llm/builtin-dispatcher.d.ts.map +1 -0
  104. package/dist/core/llm/builtin-dispatcher.js +196 -0
  105. package/dist/core/llm/builtin-dispatcher.js.map +1 -0
  106. package/dist/core/llm/imhub-dispatcher.d.ts +27 -0
  107. package/dist/core/llm/imhub-dispatcher.d.ts.map +1 -0
  108. package/dist/core/llm/imhub-dispatcher.js +308 -0
  109. package/dist/core/llm/imhub-dispatcher.js.map +1 -0
  110. package/dist/core/llm/index.d.ts +11 -0
  111. package/dist/core/llm/index.d.ts.map +1 -0
  112. package/dist/core/llm/index.js +16 -0
  113. package/dist/core/llm/index.js.map +1 -0
  114. package/dist/core/llm/introspection.d.ts +73 -0
  115. package/dist/core/llm/introspection.d.ts.map +1 -0
  116. package/dist/core/llm/introspection.js +90 -0
  117. package/dist/core/llm/introspection.js.map +1 -0
  118. package/dist/core/llm/mcp-client.d.ts +80 -0
  119. package/dist/core/llm/mcp-client.d.ts.map +1 -0
  120. package/dist/core/llm/mcp-client.js +270 -0
  121. package/dist/core/llm/mcp-client.js.map +1 -0
  122. package/dist/core/llm/mcp-registry.d.ts +57 -0
  123. package/dist/core/llm/mcp-registry.d.ts.map +1 -0
  124. package/dist/core/llm/mcp-registry.js +155 -0
  125. package/dist/core/llm/mcp-registry.js.map +1 -0
  126. package/dist/core/llm/openai-compat-provider.d.ts +65 -0
  127. package/dist/core/llm/openai-compat-provider.d.ts.map +1 -0
  128. package/dist/core/llm/openai-compat-provider.js +451 -0
  129. package/dist/core/llm/openai-compat-provider.js.map +1 -0
  130. package/dist/core/llm/policy-approval-gate.d.ts +30 -0
  131. package/dist/core/llm/policy-approval-gate.d.ts.map +1 -0
  132. package/dist/core/llm/policy-approval-gate.js +86 -0
  133. package/dist/core/llm/policy-approval-gate.js.map +1 -0
  134. package/dist/core/llm/provider-base.d.ts +302 -0
  135. package/dist/core/llm/provider-base.d.ts.map +1 -0
  136. package/dist/core/llm/provider-base.js +222 -0
  137. package/dist/core/llm/provider-base.js.map +1 -0
  138. package/dist/core/llm/registry.d.ts +44 -0
  139. package/dist/core/llm/registry.d.ts.map +1 -0
  140. package/dist/core/llm/registry.js +160 -0
  141. package/dist/core/llm/registry.js.map +1 -0
  142. package/dist/core/llm/secrets.d.ts +46 -0
  143. package/dist/core/llm/secrets.d.ts.map +1 -0
  144. package/dist/core/llm/secrets.js +157 -0
  145. package/dist/core/llm/secrets.js.map +1 -0
  146. package/dist/core/llm/tool-dispatcher.d.ts +37 -0
  147. package/dist/core/llm/tool-dispatcher.d.ts.map +1 -0
  148. package/dist/core/llm/tool-dispatcher.js +85 -0
  149. package/dist/core/llm/tool-dispatcher.js.map +1 -0
  150. package/dist/core/memory-consolidate.d.ts.map +1 -1
  151. package/dist/core/memory-consolidate.js +38 -23
  152. package/dist/core/memory-consolidate.js.map +1 -1
  153. package/dist/core/memory-distill.d.ts.map +1 -1
  154. package/dist/core/memory-distill.js +51 -25
  155. package/dist/core/memory-distill.js.map +1 -1
  156. package/dist/core/memory-rpc.d.ts.map +1 -1
  157. package/dist/core/memory-rpc.js +6 -0
  158. package/dist/core/memory-rpc.js.map +1 -1
  159. package/dist/core/message-sink.d.ts.map +1 -1
  160. package/dist/core/message-sink.js +76 -0
  161. package/dist/core/message-sink.js.map +1 -1
  162. package/dist/core/notification-evaluator.d.ts +49 -0
  163. package/dist/core/notification-evaluator.d.ts.map +1 -0
  164. package/dist/core/notification-evaluator.js +232 -0
  165. package/dist/core/notification-evaluator.js.map +1 -0
  166. package/dist/core/onboarding.d.ts.map +1 -1
  167. package/dist/core/onboarding.js +10 -0
  168. package/dist/core/onboarding.js.map +1 -1
  169. package/dist/core/persona.d.ts +10 -0
  170. package/dist/core/persona.d.ts.map +1 -1
  171. package/dist/core/persona.js +28 -14
  172. package/dist/core/persona.js.map +1 -1
  173. package/dist/core/push-rpc.d.ts +8 -0
  174. package/dist/core/push-rpc.d.ts.map +1 -1
  175. package/dist/core/push-rpc.js +41 -1
  176. package/dist/core/push-rpc.js.map +1 -1
  177. package/dist/core/registry.d.ts.map +1 -1
  178. package/dist/core/registry.js +6 -0
  179. package/dist/core/registry.js.map +1 -1
  180. package/dist/core/render-router.d.ts.map +1 -1
  181. package/dist/core/render-router.js +23 -6
  182. package/dist/core/render-router.js.map +1 -1
  183. package/dist/core/router-compare.d.ts +76 -0
  184. package/dist/core/router-compare.d.ts.map +1 -0
  185. package/dist/core/router-compare.js +253 -0
  186. package/dist/core/router-compare.js.map +1 -0
  187. package/dist/core/router.d.ts.map +1 -1
  188. package/dist/core/router.js +25 -1
  189. package/dist/core/router.js.map +1 -1
  190. package/dist/core/skills/builtin/agim-self/SKILL.md +81 -0
  191. package/dist/core/skills/loader.d.ts +120 -0
  192. package/dist/core/skills/loader.d.ts.map +1 -0
  193. package/dist/core/skills/loader.js +577 -0
  194. package/dist/core/skills/loader.js.map +1 -0
  195. package/dist/core/skills-rpc.d.ts +44 -0
  196. package/dist/core/skills-rpc.d.ts.map +1 -0
  197. package/dist/core/skills-rpc.js +71 -0
  198. package/dist/core/skills-rpc.js.map +1 -0
  199. package/dist/core/types.d.ts +35 -0
  200. package/dist/core/types.d.ts.map +1 -1
  201. package/dist/core/util/format-age.d.ts +20 -0
  202. package/dist/core/util/format-age.d.ts.map +1 -0
  203. package/dist/core/util/format-age.js +86 -0
  204. package/dist/core/util/format-age.js.map +1 -0
  205. package/dist/plugins/agents/acp/acp-adapter.d.ts +3 -0
  206. package/dist/plugins/agents/acp/acp-adapter.d.ts.map +1 -1
  207. package/dist/plugins/agents/acp/acp-adapter.js +12 -0
  208. package/dist/plugins/agents/acp/acp-adapter.js.map +1 -1
  209. package/dist/plugins/agents/antigravity/index.d.ts +1 -0
  210. package/dist/plugins/agents/antigravity/index.d.ts.map +1 -1
  211. package/dist/plugins/agents/antigravity/index.js +1 -0
  212. package/dist/plugins/agents/antigravity/index.js.map +1 -1
  213. package/dist/plugins/agents/claude-code/index.d.ts +1 -0
  214. package/dist/plugins/agents/claude-code/index.d.ts.map +1 -1
  215. package/dist/plugins/agents/claude-code/index.js +1 -0
  216. package/dist/plugins/agents/claude-code/index.js.map +1 -1
  217. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +22 -0
  218. package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -1
  219. package/dist/plugins/agents/claude-code/mcp-approval-server.js +157 -0
  220. package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -1
  221. package/dist/plugins/agents/codex/index.d.ts +1 -0
  222. package/dist/plugins/agents/codex/index.d.ts.map +1 -1
  223. package/dist/plugins/agents/codex/index.js +1 -0
  224. package/dist/plugins/agents/codex/index.js.map +1 -1
  225. package/dist/plugins/agents/native/index.d.ts +34 -0
  226. package/dist/plugins/agents/native/index.d.ts.map +1 -0
  227. package/dist/plugins/agents/native/index.js +598 -0
  228. package/dist/plugins/agents/native/index.js.map +1 -0
  229. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +1 -0
  230. package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -1
  231. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +1 -0
  232. package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -1
  233. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts +4 -0
  234. package/dist/plugins/messengers/wechat/ilink-adapter.d.ts.map +1 -1
  235. package/dist/plugins/messengers/wechat/ilink-adapter.js +26 -1
  236. package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -1
  237. package/dist/web/agim-skills-api.d.ts +4 -0
  238. package/dist/web/agim-skills-api.d.ts.map +1 -0
  239. package/dist/web/agim-skills-api.js +150 -0
  240. package/dist/web/agim-skills-api.js.map +1 -0
  241. package/dist/web/background-tasks-api.d.ts +7 -0
  242. package/dist/web/background-tasks-api.d.ts.map +1 -0
  243. package/dist/web/background-tasks-api.js +225 -0
  244. package/dist/web/background-tasks-api.js.map +1 -0
  245. package/dist/web/llm-api.d.ts +8 -0
  246. package/dist/web/llm-api.d.ts.map +1 -0
  247. package/dist/web/llm-api.js +300 -0
  248. package/dist/web/llm-api.js.map +1 -0
  249. package/dist/web/mcp-api.d.ts +8 -0
  250. package/dist/web/mcp-api.d.ts.map +1 -0
  251. package/dist/web/mcp-api.js +205 -0
  252. package/dist/web/mcp-api.js.map +1 -0
  253. package/dist/web/public/assets/{a2a-Cdl8iY0e.js → a2a-Mke0F7ZM.js} +3 -3
  254. package/dist/web/public/assets/{a2a-Cdl8iY0e.js.map → a2a-Mke0F7ZM.js.map} +1 -1
  255. package/dist/web/public/assets/{activity-DXahuK1C.js → activity-0zGnf1_m.js} +2 -2
  256. package/dist/web/public/assets/{activity-DXahuK1C.js.map → activity-0zGnf1_m.js.map} +1 -1
  257. package/dist/web/public/assets/{admins-C8fJsuHC.js → admins-DSi3KRky.js} +3 -3
  258. package/dist/web/public/assets/{admins-C8fJsuHC.js.map → admins-DSi3KRky.js.map} +1 -1
  259. package/dist/web/public/assets/agents-BLWe20EJ.js +7 -0
  260. package/dist/web/public/assets/agents-BLWe20EJ.js.map +1 -0
  261. package/dist/web/public/assets/{approvals-CpyL90ef.js → approvals-Cu_JdM-8.js} +3 -3
  262. package/dist/web/public/assets/{approvals-CpyL90ef.js.map → approvals-Cu_JdM-8.js.map} +1 -1
  263. package/dist/web/public/assets/asks-DfV8vxey.js +7 -0
  264. package/dist/web/public/assets/asks-DfV8vxey.js.map +1 -0
  265. package/dist/web/public/assets/{audit-DDqpiC3z.js → audit-2EVhhvGV.js} +2 -2
  266. package/dist/web/public/assets/{audit-DDqpiC3z.js.map → audit-2EVhhvGV.js.map} +1 -1
  267. package/dist/web/public/assets/bell-Wz_wuOa_.js +7 -0
  268. package/dist/web/public/assets/bell-Wz_wuOa_.js.map +1 -0
  269. package/dist/web/public/assets/{bgjobs-CAFV-I4I.js → bgjobs-DXROZFAW.js} +2 -2
  270. package/dist/web/public/assets/{bgjobs-CAFV-I4I.js.map → bgjobs-DXROZFAW.js.map} +1 -1
  271. package/dist/web/public/assets/{brain-CJyZe3Oa.js → brain-Dh5VOzRL.js} +2 -2
  272. package/dist/web/public/assets/{brain-CJyZe3Oa.js.map → brain-Dh5VOzRL.js.map} +1 -1
  273. package/dist/web/public/assets/{briefcase-DcLbQF2I.js → briefcase-DfxbvM9i.js} +2 -2
  274. package/dist/web/public/assets/{briefcase-DcLbQF2I.js.map → briefcase-DfxbvM9i.js.map} +1 -1
  275. package/dist/web/public/assets/{chevron-right-BhKELKvM.js → chevron-right-DU8Xla1M.js} +2 -2
  276. package/dist/web/public/assets/{chevron-right-BhKELKvM.js.map → chevron-right-DU8Xla1M.js.map} +1 -1
  277. package/dist/web/public/assets/{circle-check-D1qST9RS.js → circle-check-Be_S993G.js} +2 -2
  278. package/dist/web/public/assets/{circle-check-D1qST9RS.js.map → circle-check-Be_S993G.js.map} +1 -1
  279. package/dist/web/public/assets/{circle-check-big-EKe3o9y1.js → circle-check-big-CsQkLR1u.js} +2 -2
  280. package/dist/web/public/assets/{circle-check-big-EKe3o9y1.js.map → circle-check-big-CsQkLR1u.js.map} +1 -1
  281. package/dist/web/public/assets/{circle-x-DtePUX5x.js → circle-x-qkQu1Swu.js} +2 -2
  282. package/dist/web/public/assets/{circle-x-DtePUX5x.js.map → circle-x-qkQu1Swu.js.map} +1 -1
  283. package/dist/web/public/assets/{confirm-dialog-CCfCf6BG.js → confirm-dialog-Bm6MsLXZ.js} +2 -2
  284. package/dist/web/public/assets/{confirm-dialog-CCfCf6BG.js.map → confirm-dialog-Bm6MsLXZ.js.map} +1 -1
  285. package/dist/web/public/assets/{data-table-BRLUxacD.js → data-table-Dw4Df09-.js} +5 -5
  286. package/dist/web/public/assets/{data-table-BRLUxacD.js.map → data-table-Dw4Df09-.js.map} +1 -1
  287. package/dist/web/public/assets/{dialog-By4YA8bm.js → dialog-CNsc4COh.js} +3 -3
  288. package/dist/web/public/assets/{dialog-By4YA8bm.js.map → dialog-CNsc4COh.js.map} +1 -1
  289. package/dist/web/public/assets/{download-CiTB2sCh.js → download-Bnhk_vDY.js} +2 -2
  290. package/dist/web/public/assets/{download-CiTB2sCh.js.map → download-Bnhk_vDY.js.map} +1 -1
  291. package/dist/web/public/assets/{email-H-b2AExg.js → email-jgAX8liM.js} +3 -3
  292. package/dist/web/public/assets/{email-H-b2AExg.js.map → email-jgAX8liM.js.map} +1 -1
  293. package/dist/web/public/assets/{empty-state-DZJTUlvz.js → empty-state-D8QXQ5y9.js} +2 -2
  294. package/dist/web/public/assets/{empty-state-DZJTUlvz.js.map → empty-state-D8QXQ5y9.js.map} +1 -1
  295. package/dist/web/public/assets/{external-link-CfU6Rttn.js → external-link-C8AYvhBb.js} +2 -2
  296. package/dist/web/public/assets/{external-link-CfU6Rttn.js.map → external-link-C8AYvhBb.js.map} +1 -1
  297. package/dist/web/public/assets/{eye-BvWcd0pJ.js → eye-pmI_4E8x.js} +4 -4
  298. package/dist/web/public/assets/{eye-BvWcd0pJ.js.map → eye-pmI_4E8x.js.map} +1 -1
  299. package/dist/web/public/assets/{facts-BRDbQLSI.js → facts-BRHLLX2u.js} +2 -2
  300. package/dist/web/public/assets/{facts-BRDbQLSI.js.map → facts-BRHLLX2u.js.map} +1 -1
  301. package/dist/web/public/assets/goals-p7cNp01l.js +17 -0
  302. package/dist/web/public/assets/goals-p7cNp01l.js.map +1 -0
  303. package/dist/web/public/assets/{health-DJPFOiKw.js → health-CuGIXg8C.js} +2 -2
  304. package/dist/web/public/assets/{health-DJPFOiKw.js.map → health-CuGIXg8C.js.map} +1 -1
  305. package/dist/web/public/assets/heart-pulse-D0AHQl1d.js +7 -0
  306. package/dist/web/public/assets/heart-pulse-D0AHQl1d.js.map +1 -0
  307. package/dist/web/public/assets/heartbeat-DJRDS2GQ.js +7 -0
  308. package/dist/web/public/assets/heartbeat-DJRDS2GQ.js.map +1 -0
  309. package/dist/web/public/assets/hot-B1qKTiGD.js +17 -0
  310. package/dist/web/public/assets/hot-B1qKTiGD.js.map +1 -0
  311. package/dist/web/public/assets/index-B7QRVy9N.css +1 -0
  312. package/dist/web/public/assets/index-XJngV1gH.js +166 -0
  313. package/dist/web/public/assets/index-XJngV1gH.js.map +1 -0
  314. package/dist/web/public/assets/installed-Dz4-KevJ.js +31 -0
  315. package/dist/web/public/assets/installed-Dz4-KevJ.js.map +1 -0
  316. package/dist/web/public/assets/{jobs-DdWaBgOh.js → jobs-kwOypiWd.js} +2 -2
  317. package/dist/web/public/assets/{jobs-DdWaBgOh.js.map → jobs-kwOypiWd.js.map} +1 -1
  318. package/dist/web/public/assets/layout-01n3Aibo.js +2 -0
  319. package/dist/web/public/assets/layout-01n3Aibo.js.map +1 -0
  320. package/dist/web/public/assets/layout-CVYe2vN8.js +2 -0
  321. package/dist/web/public/assets/layout-CVYe2vN8.js.map +1 -0
  322. package/dist/web/public/assets/{layout-Dr12u0W_.js → layout-CbHxH58i.js} +2 -2
  323. package/dist/web/public/assets/{layout-Dr12u0W_.js.map → layout-CbHxH58i.js.map} +1 -1
  324. package/dist/web/public/assets/layout-DD1Dei48.js +2 -0
  325. package/dist/web/public/assets/layout-DD1Dei48.js.map +1 -0
  326. package/dist/web/public/assets/{layout-BybpkTy0.js → layout-s11iwkL-.js} +2 -2
  327. package/dist/web/public/assets/{layout-BybpkTy0.js.map → layout-s11iwkL-.js.map} +1 -1
  328. package/dist/web/public/assets/llm-DPlK10Lg.js +7 -0
  329. package/dist/web/public/assets/llm-DPlK10Lg.js.map +1 -0
  330. package/dist/web/public/assets/{loader-circle-BiR4Xs-3.js → loader-circle-DymEG5Cl.js} +2 -2
  331. package/dist/web/public/assets/{loader-circle-BiR4Xs-3.js.map → loader-circle-DymEG5Cl.js.map} +1 -1
  332. package/dist/web/public/assets/{map-pin-B8hea8yW.js → map-pin-CyZg1-Jk.js} +2 -2
  333. package/dist/web/public/assets/{map-pin-B8hea8yW.js.map → map-pin-CyZg1-Jk.js.map} +1 -1
  334. package/dist/web/public/assets/mcp-CiifW_qp.js +7 -0
  335. package/dist/web/public/assets/mcp-CiifW_qp.js.map +1 -0
  336. package/dist/web/public/assets/{memos-C0_I1Uzt.js → memos-Bsiq64qW.js} +2 -2
  337. package/dist/web/public/assets/{memos-C0_I1Uzt.js.map → memos-Bsiq64qW.js.map} +1 -1
  338. package/dist/web/public/assets/{messengers-DuS5_JlE.js → messengers-alGJK9dO.js} +3 -3
  339. package/dist/web/public/assets/{messengers-DuS5_JlE.js.map → messengers-alGJK9dO.js.map} +1 -1
  340. package/dist/web/public/assets/native-agent-CgzcqRsU.js +7 -0
  341. package/dist/web/public/assets/native-agent-CgzcqRsU.js.map +1 -0
  342. package/dist/web/public/assets/{network-CpkocMHV.js → network-BSRJfeGk.js} +2 -2
  343. package/dist/web/public/assets/{network-CpkocMHV.js.map → network-BSRJfeGk.js.map} +1 -1
  344. package/dist/web/public/assets/{outbox-mGqTV2Ex.js → outbox-DSDls9xU.js} +3 -3
  345. package/dist/web/public/assets/{outbox-mGqTV2Ex.js.map → outbox-DSDls9xU.js.map} +1 -1
  346. package/dist/web/public/assets/{pagination-BAYvy11u.js → pagination-DVXNZ2ti.js} +3 -3
  347. package/dist/web/public/assets/{pagination-BAYvy11u.js.map → pagination-DVXNZ2ti.js.map} +1 -1
  348. package/dist/web/public/assets/{persona-CM0TLPJa.js → persona-BB1gIwTX.js} +2 -2
  349. package/dist/web/public/assets/{persona-CM0TLPJa.js.map → persona-BB1gIwTX.js.map} +1 -1
  350. package/dist/web/public/assets/{play-DMgMpe7N.js → play-CcECAHfL.js} +2 -2
  351. package/dist/web/public/assets/{play-DMgMpe7N.js.map → play-CcECAHfL.js.map} +1 -1
  352. package/dist/web/public/assets/plus-DrStBHss.js +7 -0
  353. package/dist/web/public/assets/plus-DrStBHss.js.map +1 -0
  354. package/dist/web/public/assets/policy-BgDYTxy7.js +2 -0
  355. package/dist/web/public/assets/{policy-Ch-xirrA.js.map → policy-BgDYTxy7.js.map} +1 -1
  356. package/dist/web/public/assets/{refresh-ccw-D8mc4hxU.js → refresh-ccw-BBRPVLH8.js} +2 -2
  357. package/dist/web/public/assets/{refresh-ccw-D8mc4hxU.js.map → refresh-ccw-BBRPVLH8.js.map} +1 -1
  358. package/dist/web/public/assets/{reminders-Dbe7Rc4h.js → reminders-jwy196Xw.js} +4 -9
  359. package/dist/web/public/assets/reminders-jwy196Xw.js.map +1 -0
  360. package/dist/web/public/assets/{save-1aALBaZc.js → save-iBtyruco.js} +2 -2
  361. package/dist/web/public/assets/{save-1aALBaZc.js.map → save-iBtyruco.js.map} +1 -1
  362. package/dist/web/public/assets/{schedules-BBQ2wcnS.js → schedules-DDl_Sr5r.js} +3 -3
  363. package/dist/web/public/assets/{schedules-BBQ2wcnS.js.map → schedules-DDl_Sr5r.js.map} +1 -1
  364. package/dist/web/public/assets/{search-DDYjsJ7-.js → search-Yb1S22sv.js} +2 -2
  365. package/dist/web/public/assets/{search-DDYjsJ7-.js.map → search-Yb1S22sv.js.map} +1 -1
  366. package/dist/web/public/assets/{service-DMp11TKF.js → service-jrg0kMtK.js} +3 -3
  367. package/dist/web/public/assets/{service-DMp11TKF.js.map → service-jrg0kMtK.js.map} +1 -1
  368. package/dist/web/public/assets/{status-badge-Cvj81JKi.js → status-badge-Arxyw3TL.js} +2 -2
  369. package/dist/web/public/assets/{status-badge-Cvj81JKi.js.map → status-badge-Arxyw3TL.js.map} +1 -1
  370. package/dist/web/public/assets/{subtasks-BC3Pf7OZ.js → subtasks-CkyuMv_X.js} +3 -3
  371. package/dist/web/public/assets/{subtasks-BC3Pf7OZ.js.map → subtasks-CkyuMv_X.js.map} +1 -1
  372. package/dist/web/public/assets/{table-B6nK6k3L.js → table-BKdG9tsY.js} +2 -2
  373. package/dist/web/public/assets/{table-B6nK6k3L.js.map → table-BKdG9tsY.js.map} +1 -1
  374. package/dist/web/public/assets/{topn-BwFh2jKv.js → topn-BpX8BKWS.js} +3 -3
  375. package/dist/web/public/assets/{topn-BwFh2jKv.js.map → topn-BpX8BKWS.js.map} +1 -1
  376. package/dist/web/public/assets/{trash-2-CqpMjbu5.js → trash-2-DxKJo_-6.js} +3 -3
  377. package/dist/web/public/assets/{trash-2-CqpMjbu5.js.map → trash-2-DxKJo_-6.js.map} +1 -1
  378. package/dist/web/public/assets/use-background-tasks-vqoDXiAq.js +2 -0
  379. package/dist/web/public/assets/use-background-tasks-vqoDXiAq.js.map +1 -0
  380. package/dist/web/public/assets/use-llm-admin-D4snixaM.js +2 -0
  381. package/dist/web/public/assets/use-llm-admin-D4snixaM.js.map +1 -0
  382. package/dist/web/public/assets/{use-memory-jxZdt-RL.js → use-memory-Cqf3xywK.js} +2 -2
  383. package/dist/web/public/assets/{use-memory-jxZdt-RL.js.map → use-memory-Cqf3xywK.js.map} +1 -1
  384. package/dist/web/public/assets/{use-observability-9TDgLO9y.js → use-observability-Thh7LWoE.js} +2 -2
  385. package/dist/web/public/assets/{use-observability-9TDgLO9y.js.map → use-observability-Thh7LWoE.js.map} +1 -1
  386. package/dist/web/public/assets/{use-settings-DFB_c2pr.js → use-settings-DRhH8owt.js} +2 -2
  387. package/dist/web/public/assets/{use-settings-DFB_c2pr.js.map → use-settings-DRhH8owt.js.map} +1 -1
  388. package/dist/web/public/assets/{use-workspace-C-Eg6yWa.js → use-workspace-iLKz-h_7.js} +2 -2
  389. package/dist/web/public/assets/{use-workspace-C-Eg6yWa.js.map → use-workspace-iLKz-h_7.js.map} +1 -1
  390. package/dist/web/public/assets/useQuery-gnz30xMJ.js +2 -0
  391. package/dist/web/public/assets/{useQuery-rLmHxFp4.js.map → useQuery-gnz30xMJ.js.map} +1 -1
  392. package/dist/web/public/assets/{vector-D9UqmLi6.js → vector-COjljy_4.js} +2 -2
  393. package/dist/web/public/assets/{vector-D9UqmLi6.js.map → vector-COjljy_4.js.map} +1 -1
  394. package/dist/web/public/assets/{viewer-_OpObeWr.js → viewer-AQHSc8hZ.js} +3 -3
  395. package/dist/web/public/assets/{viewer-_OpObeWr.js.map → viewer-AQHSc8hZ.js.map} +1 -1
  396. package/dist/web/public/assets/{workspace-DSHRdspq.js → workspace-DRtSCbx5.js} +4 -4
  397. package/dist/web/public/assets/{workspace-DSHRdspq.js.map → workspace-DRtSCbx5.js.map} +1 -1
  398. package/dist/web/public/assets/{workspaces-CsBdhbXz.js → workspaces-BLR5ZBu6.js} +3 -3
  399. package/dist/web/public/assets/{workspaces-CsBdhbXz.js.map → workspaces-BLR5ZBu6.js.map} +1 -1
  400. package/dist/web/public/assets/{x-D1re-vBd.js → x-DGQ0qjhc.js} +2 -2
  401. package/dist/web/public/assets/{x-D1re-vBd.js.map → x-DGQ0qjhc.js.map} +1 -1
  402. package/dist/web/public/index.html +2 -2
  403. package/dist/web/server.d.ts.map +1 -1
  404. package/dist/web/server.js +45 -0
  405. package/dist/web/server.js.map +1 -1
  406. package/package.json +2 -2
  407. package/dist/web/public/assets/agents-lrzFDGgX.js +0 -12
  408. package/dist/web/public/assets/agents-lrzFDGgX.js.map +0 -1
  409. package/dist/web/public/assets/hot-CFGHGkqL.js +0 -17
  410. package/dist/web/public/assets/hot-CFGHGkqL.js.map +0 -1
  411. package/dist/web/public/assets/index-C4hk1i67.js +0 -166
  412. package/dist/web/public/assets/index-C4hk1i67.js.map +0 -1
  413. package/dist/web/public/assets/index-Cvacw7Jg.css +0 -1
  414. package/dist/web/public/assets/installed-UONWfKHS.js +0 -7
  415. package/dist/web/public/assets/installed-UONWfKHS.js.map +0 -1
  416. package/dist/web/public/assets/layout-C8_IQRGM.js +0 -2
  417. package/dist/web/public/assets/layout-C8_IQRGM.js.map +0 -1
  418. package/dist/web/public/assets/layout-CxRHLqvi.js +0 -2
  419. package/dist/web/public/assets/layout-CxRHLqvi.js.map +0 -1
  420. package/dist/web/public/assets/layout-LC5zjw1h.js +0 -2
  421. package/dist/web/public/assets/layout-LC5zjw1h.js.map +0 -1
  422. package/dist/web/public/assets/policy-Ch-xirrA.js +0 -2
  423. package/dist/web/public/assets/reminders-Dbe7Rc4h.js.map +0 -1
  424. package/dist/web/public/assets/use-skills-OZKB5x-S.js +0 -2
  425. package/dist/web/public/assets/use-skills-OZKB5x-S.js.map +0 -1
  426. package/dist/web/public/assets/useQuery-rLmHxFp4.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"loader-circle-BiR4Xs-3.js","sources":["../../node_modules/lucide-react/dist/esm/icons/loader-circle.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"LoaderCircle\", [\n [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n"],"names":["LoaderCircle","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAeC,EAAiB,eAAgB,CACpD,CAAC,OAAQ,CAAE,EAAG,8BAA+B,IAAK,QAAQ,CAAE,CAC9D,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"loader-circle-DymEG5Cl.js","sources":["../../node_modules/lucide-react/dist/esm/icons/loader-circle.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"LoaderCircle\", [\n [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n"],"names":["LoaderCircle","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAAeC,EAAiB,eAAgB,CACpD,CAAC,OAAQ,CAAE,EAAG,8BAA+B,IAAK,QAAQ,CAAE,CAC9D,CAAC","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
- import{x as c}from"./index-C4hk1i67.js";/**
1
+ import{y as c}from"./index-XJngV1gH.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
6
  */const r=c("MapPin",[["path",{d:"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0",key:"1r0f0z"}],["circle",{cx:"12",cy:"10",r:"3",key:"ilqhr7"}]]);export{r as M};
7
- //# sourceMappingURL=map-pin-B8hea8yW.js.map
7
+ //# sourceMappingURL=map-pin-CyZg1-Jk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"map-pin-B8hea8yW.js","sources":["../../node_modules/lucide-react/dist/esm/icons/map-pin.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MapPin = createLucideIcon(\"MapPin\", [\n [\n \"path\",\n {\n d: \"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n]);\n\nexport { MapPin as default };\n//# sourceMappingURL=map-pin.js.map\n"],"names":["MapPin","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAASC,EAAiB,SAAU,CACxC,CACE,OACA,CACE,EAAG,uGACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAQ,CAAE,CAC1D,CAAC","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"map-pin-CyZg1-Jk.js","sources":["../../node_modules/lucide-react/dist/esm/icons/map-pin.js"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MapPin = createLucideIcon(\"MapPin\", [\n [\n \"path\",\n {\n d: \"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n]);\n\nexport { MapPin as default };\n//# sourceMappingURL=map-pin.js.map\n"],"names":["MapPin","createLucideIcon"],"mappings":"wCAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASK,MAACA,EAASC,EAAiB,SAAU,CACxC,CACE,OACA,CACE,EAAG,uGACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAQ,CAAE,CAC1D,CAAC","x_google_ignoreList":[0]}
@@ -0,0 +1,7 @@
1
+ import{y as A,ad as L,U as e,c as k,B as C,L as x,I as v,S as M,l as q,m as z,j as B,k as R,a3 as o}from"./index-XJngV1gH.js";import{e as l}from"./react-C9F3QeMB.js";import{T as F,d as I,e as H,c as b,a as O,b as N}from"./table-BKdG9tsY.js";import{g as $,h as E,f as D,e as J}from"./use-llm-admin-D4snixaM.js";import{L as P}from"./loader-circle-DymEG5Cl.js";import{R as U}from"./refresh-ccw-BBRPVLH8.js";import{A as V}from"./activity-0zGnf1_m.js";import{T as Q}from"./trash-2-DxKJo_-6.js";import{P as W}from"./plus-DrStBHss.js";import"./useQuery-gnz30xMJ.js";/**
2
+ * @license lucide-react v0.469.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const G=A("ServerCog",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["path",{d:"M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5",key:"tn8das"}],["path",{d:"M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5",key:"1g2pve"}],["path",{d:"M6 6h.01",key:"1utrut"}],["path",{d:"M6 18h.01",key:"uhywen"}],["path",{d:"m15.7 13.4-.9-.3",key:"1jwmzr"}],["path",{d:"m9.2 10.9-.9-.3",key:"qapnim"}],["path",{d:"m10.6 15.7.3-.9",key:"quwk0k"}],["path",{d:"m13.6 15.7-.4-1",key:"cb9xp7"}],["path",{d:"m10.8 9.3-.4-1",key:"1uaiz5"}],["path",{d:"m8.3 13.6 1-.4",key:"s6srou"}],["path",{d:"m14.7 10.8 1-.4",key:"4d31cq"}],["path",{d:"m13.4 8.3-.3.9",key:"1bm987"}]]);function me(){const{t}=L(["settings","common"]),s=$();return e.jsxs("div",{className:"mx-auto flex max-w-5xl flex-col gap-6",children:[e.jsxs("header",{className:"flex items-center gap-3",children:[e.jsx(G,{className:"h-5 w-5 text-text-dim"}),e.jsx("h1",{className:"text-xl font-semibold",children:t("mcp.title")}),e.jsxs(k,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>void s.refetch(),disabled:s.isFetching,"aria-label":t("actions.refresh",{ns:"common"}),children:[s.isFetching?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(U,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:t("mcp.refresh")})]})]}),e.jsx("p",{className:"text-sm text-text-dim",children:t("mcp.subtitle")}),s.isLoading?e.jsx("div",{className:"h-48 rounded-md bg-surface-2 animate-pulse"}):e.jsxs(e.Fragment,{children:[e.jsx(K,{data:s.data}),e.jsx(Y,{})]})]})}function K({data:t}){const{t:s}=L(["settings","common"]),m=E(),p=D(),[i,u]=l.useState({});async function j(r){if(confirm(s("mcp.removeConfirm",{name:r})))try{await m.mutateAsync(r),o.success(s("mcp.removedToast",{name:r}))}catch(a){o.error(a?.message??String(a))}}async function y(r){u(a=>({...a,[r]:s("mcp.probing")}));try{const a=await p.mutateAsync(r),c=a.connected?`✓ ${a.toolCount===1?s("mcp.runtimeConnectedOne",{count:a.toolCount}):s("mcp.runtimeConnected",{count:a.toolCount})}`:`✗ ${a.lastError??s("mcp.runtimeDisconnected")}`;u(h=>({...h,[r]:c}))}catch(a){u(c=>({...c,[r]:`✗ ${a?.message??String(a)}`}))}}const d=t?.servers??[],S=t?.runtime?.servers??[];return d.length===0?e.jsx("section",{className:"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim",children:s("mcp.serversEmpty")}):e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsxs("header",{className:"flex items-center gap-2 border-b border-border px-4 py-3",children:[e.jsx("h2",{className:"text-sm font-semibold",children:s("mcp.serversTitle",{count:d.length})}),t?.runtime&&e.jsx(C,{variant:"info",children:s("mcp.totalTools",{count:t.runtime.totalTools})})]}),e.jsxs(F,{children:[e.jsx(I,{children:e.jsxs(H,{children:[e.jsx(b,{children:s("mcp.col.name")}),e.jsx(b,{children:s("mcp.col.transport")}),e.jsx(b,{children:s("mcp.col.target")}),e.jsx(b,{children:s("mcp.col.runtime")}),e.jsx(b,{children:s("mcp.col.actions")})]})}),e.jsx(O,{children:d.map(r=>{const a=S.find(n=>n.name===r.name),c=X(r,s),h=r.command?`${r.command} ${(r.args??[]).join(" ")}`.trim():r.url??"—",w=a?a.connected?e.jsx(C,{variant:"success",children:a.toolCount===1?s("mcp.runtimeConnectedOne",{count:a.toolCount}):s("mcp.runtimeConnected",{count:a.toolCount})}):e.jsx(C,{variant:"danger",children:s("mcp.runtimeDisconnected")}):e.jsx(C,{variant:"outline",children:s("mcp.runtimeUnknown")});return e.jsxs(H,{children:[e.jsx(N,{className:"font-mono text-xs",children:r.name}),e.jsx(N,{children:c}),e.jsx(N,{className:"break-all font-mono text-[11px] text-text-dim",children:h}),e.jsx(N,{children:w}),e.jsxs(N,{className:"flex flex-col gap-1 sm:flex-row sm:items-center",children:[e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void y(r.name),disabled:p.isPending,children:[e.jsx(V,{className:"h-4 w-4"}),e.jsx("span",{children:s("mcp.health")})]}),e.jsxs(k,{variant:"ghost",size:"sm",onClick:()=>void j(r.name),disabled:m.isPending,className:"text-danger hover:text-danger",children:[e.jsx(Q,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:s("mcp.remove")})]}),i[r.name]&&e.jsx("span",{className:"ml-2 text-[11px] text-text-dim",children:i[r.name]})]})]},r.name)})})]})]})}function X(t,s){return t.command?s("mcp.transportStdio"):t.url?t.url.endsWith("/sse")?s("mcp.transportSse"):s("mcp.transportHttp"):"—"}function Y(){const{t}=L(["settings","common"]),s=J(),[m,p]=l.useState(""),[i,u]=l.useState("stdio"),[j,y]=l.useState(""),[d,S]=l.useState(""),[r,a]=l.useState(""),[c,h]=l.useState("");async function w(n){if(n.preventDefault(),!m.trim()){o.error(t("mcp.nameRequired"));return}let T;if(c.trim())try{T=JSON.parse(c)}catch{o.error(t("mcp.headersInvalid"));return}const g={name:m.trim()};if(i==="stdio"){if(!j.trim()){o.error(t("mcp.commandRequired"));return}g.command=j.trim();const f=d.split(/\s+/).filter(Boolean);f.length>0&&(g.args=f)}else{if(!r.trim()){o.error(t("mcp.urlRequired"));return}g.url=r.trim(),T&&(g.headers=T)}try{await s.mutateAsync(g),o.success(t("mcp.addedToast",{name:m.trim()})),p(""),y(""),S(""),a(""),h("")}catch(f){o.error(f?.message??String(f))}}return e.jsxs("section",{className:"rounded-md border border-border bg-surface",children:[e.jsx("header",{className:"border-b border-border px-4 py-3",children:e.jsx("h2",{className:"text-sm font-semibold",children:t("mcp.addTitle")})}),e.jsxs("form",{onSubmit:n=>void w(n),className:"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.nameLabel")}),e.jsx(v,{value:m,onChange:n=>p(n.target.value),placeholder:t("mcp.namePlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.transportLabel")}),e.jsxs(M,{value:i,onValueChange:n=>u(n),children:[e.jsx(q,{children:e.jsx(z,{})}),e.jsxs(B,{children:[e.jsx(R,{value:"stdio",children:t("mcp.transportStdioOption")}),e.jsx(R,{value:"http",children:t("mcp.transportHttpOption")})]})]})]}),i==="stdio"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.commandLabel")}),e.jsx(v,{value:j,onChange:n=>y(n.target.value),placeholder:t("mcp.commandPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.argsLabel")}),e.jsx(v,{value:d,onChange:n=>S(n.target.value),placeholder:"-y @modelcontextprotocol/server-filesystem /data",className:"font-mono text-xs"})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.urlLabel")}),e.jsx(v,{value:r,onChange:n=>a(n.target.value),placeholder:t("mcp.urlPlaceholder"),className:"font-mono text-xs"})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(x,{className:"text-xs font-medium",children:t("mcp.headersLabel")}),e.jsx(v,{value:c,onChange:n=>h(n.target.value),placeholder:t("mcp.headersPlaceholder"),className:"font-mono text-xs"})]})]}),e.jsx("div",{className:"sm:col-span-2 flex",children:e.jsxs(k,{type:"submit",disabled:s.isPending,className:"ml-auto",children:[s.isPending?e.jsx(P,{className:"h-4 w-4 animate-spin"}):e.jsx(W,{className:"h-4 w-4"}),t("mcp.addServer")]})})]})]})}export{me as default};
7
+ //# sourceMappingURL=mcp-CiifW_qp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-CiifW_qp.js","sources":["../../node_modules/lucide-react/dist/esm/icons/server-cog.js","../../src/routes/settings/mcp.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.469.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ServerCog = createLucideIcon(\"ServerCog\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\n \"path\",\n {\n d: \"M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5\",\n key: \"tn8das\"\n }\n ],\n [\n \"path\",\n {\n d: \"M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5\",\n key: \"1g2pve\"\n }\n ],\n [\"path\", { d: \"M6 6h.01\", key: \"1utrut\" }],\n [\"path\", { d: \"M6 18h.01\", key: \"uhywen\" }],\n [\"path\", { d: \"m15.7 13.4-.9-.3\", key: \"1jwmzr\" }],\n [\"path\", { d: \"m9.2 10.9-.9-.3\", key: \"qapnim\" }],\n [\"path\", { d: \"m10.6 15.7.3-.9\", key: \"quwk0k\" }],\n [\"path\", { d: \"m13.6 15.7-.4-1\", key: \"cb9xp7\" }],\n [\"path\", { d: \"m10.8 9.3-.4-1\", key: \"1uaiz5\" }],\n [\"path\", { d: \"m8.3 13.6 1-.4\", key: \"s6srou\" }],\n [\"path\", { d: \"m14.7 10.8 1-.4\", key: \"4d31cq\" }],\n [\"path\", { d: \"m13.4 8.3-.3.9\", key: \"1bm987\" }]\n]);\n\nexport { ServerCog as default };\n//# sourceMappingURL=server-cog.js.map\n","/**\n * /settings/mcp — external MCP servers admin (Stage 6).\n *\n * Front-end for the `/api/mcp/*` REST surface. List configured servers,\n * see their connection status + tool count, add stdio / HTTP / SSE\n * servers, probe per-server health, remove.\n *\n * The native agent loop consumes any tools advertised here; CLI agents\n * have their own MCP configs and ignore this list. See\n * docs/llm-backends.md § External MCP servers.\n */\n\nimport { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { toast } from 'sonner'\nimport { Loader2, Plus, RefreshCcw, ServerCog, Trash2, Activity } from 'lucide-react'\n\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { Label } from '@/components/ui/label'\nimport {\n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n} from '@/components/ui/select'\nimport {\n Table, TableBody, TableCell, TableHead, TableHeader, TableRow,\n} from '@/components/ui/table'\nimport {\n useMcpList, useMcpAddServer, useMcpRemoveServer, useMcpHealth,\n type McpServerRow,\n} from '@/hooks/use-llm-admin'\n\nexport default function SettingsMcpRoute(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const listQuery = useMcpList()\n return (\n <div className=\"mx-auto flex max-w-5xl flex-col gap-6\">\n <header className=\"flex items-center gap-3\">\n <ServerCog className=\"h-5 w-5 text-text-dim\" />\n <h1 className=\"text-xl font-semibold\">{t('mcp.title')}</h1>\n <Button\n variant=\"ghost\" size=\"sm\" className=\"ml-auto\"\n onClick={() => void listQuery.refetch()}\n disabled={listQuery.isFetching}\n aria-label={t('actions.refresh', { ns: 'common' })}\n >\n {listQuery.isFetching\n ? <Loader2 className=\"h-4 w-4 animate-spin\" />\n : <RefreshCcw className=\"h-4 w-4\" />}\n <span className=\"hidden sm:inline\">{t('mcp.refresh')}</span>\n </Button>\n </header>\n <p className=\"text-sm text-text-dim\">{t('mcp.subtitle')}</p>\n\n {listQuery.isLoading ? (\n <div className=\"h-48 rounded-md bg-surface-2 animate-pulse\" />\n ) : (\n <>\n <ServersCard data={listQuery.data} />\n <AddServerCard />\n </>\n )}\n </div>\n )\n}\n\n/* ─────────────── Servers list ─────────────── */\n\nfunction ServersCard({ data }: { data: ReturnType<typeof useMcpList>['data'] }): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const removeServer = useMcpRemoveServer()\n const health = useMcpHealth()\n const [healthResults, setHealthResults] = useState<Record<string, string>>({})\n\n async function onRemove(name: string): Promise<void> {\n if (!confirm(t('mcp.removeConfirm', { name }))) return\n try {\n await removeServer.mutateAsync(name)\n toast.success(t('mcp.removedToast', { name }))\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n async function onHealth(name: string): Promise<void> {\n setHealthResults((m) => ({ ...m, [name]: t('mcp.probing') }))\n try {\n const r = await health.mutateAsync(name)\n const msg = r.connected\n ? `✓ ${r.toolCount === 1\n ? t('mcp.runtimeConnectedOne', { count: r.toolCount })\n : t('mcp.runtimeConnected', { count: r.toolCount })}`\n : `✗ ${r.lastError ?? t('mcp.runtimeDisconnected')}`\n setHealthResults((m) => ({ ...m, [name]: msg }))\n } catch (err) {\n setHealthResults((m) => ({ ...m, [name]: `✗ ${((err as Error)?.message ?? String(err))}` }))\n }\n }\n\n const rows = data?.servers ?? []\n const runtime = data?.runtime?.servers ?? []\n if (rows.length === 0) {\n return (\n <section className=\"rounded-md border border-border bg-surface p-6 text-center text-sm text-text-dim\">\n {t('mcp.serversEmpty')}\n </section>\n )\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"flex items-center gap-2 border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('mcp.serversTitle', { count: rows.length })}</h2>\n {data?.runtime && (\n <Badge variant=\"info\">{t('mcp.totalTools', { count: data.runtime.totalTools })}</Badge>\n )}\n </header>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>{t('mcp.col.name')}</TableHead>\n <TableHead>{t('mcp.col.transport')}</TableHead>\n <TableHead>{t('mcp.col.target')}</TableHead>\n <TableHead>{t('mcp.col.runtime')}</TableHead>\n <TableHead>{t('mcp.col.actions')}</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((s) => {\n const rt = runtime.find((r) => r.name === s.name)\n const transport = transportLabel(s, t)\n const target = s.command\n ? `${s.command} ${(s.args ?? []).join(' ')}`.trim()\n : (s.url ?? '—')\n const runtimeBadge = !rt\n ? <Badge variant=\"outline\">{t('mcp.runtimeUnknown')}</Badge>\n : rt.connected\n ? <Badge variant=\"success\">\n {rt.toolCount === 1\n ? t('mcp.runtimeConnectedOne', { count: rt.toolCount })\n : t('mcp.runtimeConnected', { count: rt.toolCount })}\n </Badge>\n : <Badge variant=\"danger\">{t('mcp.runtimeDisconnected')}</Badge>\n return (\n <TableRow key={s.name}>\n <TableCell className=\"font-mono text-xs\">{s.name}</TableCell>\n <TableCell>{transport}</TableCell>\n <TableCell className=\"break-all font-mono text-[11px] text-text-dim\">{target}</TableCell>\n <TableCell>{runtimeBadge}</TableCell>\n <TableCell className=\"flex flex-col gap-1 sm:flex-row sm:items-center\">\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onHealth(s.name)}\n disabled={health.isPending}\n >\n <Activity className=\"h-4 w-4\" />\n <span>{t('mcp.health')}</span>\n </Button>\n <Button\n variant=\"ghost\" size=\"sm\"\n onClick={() => void onRemove(s.name)}\n disabled={removeServer.isPending}\n className=\"text-danger hover:text-danger\"\n >\n <Trash2 className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{t('mcp.remove')}</span>\n </Button>\n {healthResults[s.name] && (\n <span className=\"ml-2 text-[11px] text-text-dim\">{healthResults[s.name]}</span>\n )}\n </TableCell>\n </TableRow>\n )\n })}\n </TableBody>\n </Table>\n </section>\n )\n}\n\nfunction transportLabel(\n s: McpServerRow,\n t: (key: string) => string,\n): string {\n if (s.command) return t('mcp.transportStdio')\n if (s.url) return s.url.endsWith('/sse') ? t('mcp.transportSse') : t('mcp.transportHttp')\n return '—'\n}\n\n/* ─────────────── Add server form ─────────────── */\n\nfunction AddServerCard(): JSX.Element {\n const { t } = useTranslation(['settings', 'common'])\n const addServer = useMcpAddServer()\n const [name, setName] = useState('')\n const [transport, setTransport] = useState<'stdio' | 'http'>('stdio')\n const [command, setCommand] = useState('')\n const [args, setArgs] = useState('')\n const [url, setUrl] = useState('')\n const [headersJson, setHeadersJson] = useState('')\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault()\n if (!name.trim()) { toast.error(t('mcp.nameRequired')); return }\n let headers: Record<string, string> | undefined\n if (headersJson.trim()) {\n try { headers = JSON.parse(headersJson) }\n catch { toast.error(t('mcp.headersInvalid')); return }\n }\n const body: Parameters<typeof addServer.mutateAsync>[0] = { name: name.trim() }\n if (transport === 'stdio') {\n if (!command.trim()) { toast.error(t('mcp.commandRequired')); return }\n body.command = command.trim()\n const splitArgs = args.split(/\\s+/).filter(Boolean)\n if (splitArgs.length > 0) body.args = splitArgs\n } else {\n if (!url.trim()) { toast.error(t('mcp.urlRequired')); return }\n body.url = url.trim()\n if (headers) body.headers = headers\n }\n try {\n await addServer.mutateAsync(body)\n toast.success(t('mcp.addedToast', { name: name.trim() }))\n setName(''); setCommand(''); setArgs(''); setUrl(''); setHeadersJson('')\n } catch (err) {\n toast.error(((err as Error)?.message ?? String(err)))\n }\n }\n\n return (\n <section className=\"rounded-md border border-border bg-surface\">\n <header className=\"border-b border-border px-4 py-3\">\n <h2 className=\"text-sm font-semibold\">{t('mcp.addTitle')}</h2>\n </header>\n <form onSubmit={(e) => void onSubmit(e)} className=\"grid grid-cols-1 gap-3 p-4 sm:grid-cols-2\">\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.nameLabel')}</Label>\n <Input\n value={name} onChange={(e) => setName(e.target.value)}\n placeholder={t('mcp.namePlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.transportLabel')}</Label>\n <Select value={transport} onValueChange={(v) => setTransport(v as 'stdio' | 'http')}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"stdio\">{t('mcp.transportStdioOption')}</SelectItem>\n <SelectItem value=\"http\">{t('mcp.transportHttpOption')}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n {transport === 'stdio' ? (\n <>\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.commandLabel')}</Label>\n <Input\n value={command} onChange={(e) => setCommand(e.target.value)}\n placeholder={t('mcp.commandPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div>\n <Label className=\"text-xs font-medium\">{t('mcp.argsLabel')}</Label>\n <Input\n value={args} onChange={(e) => setArgs(e.target.value)}\n placeholder=\"-y @modelcontextprotocol/server-filesystem /data\"\n className=\"font-mono text-xs\"\n />\n </div>\n </>\n ) : (\n <>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('mcp.urlLabel')}</Label>\n <Input\n value={url} onChange={(e) => setUrl(e.target.value)}\n placeholder={t('mcp.urlPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n <div className=\"sm:col-span-2\">\n <Label className=\"text-xs font-medium\">{t('mcp.headersLabel')}</Label>\n <Input\n value={headersJson} onChange={(e) => setHeadersJson(e.target.value)}\n placeholder={t('mcp.headersPlaceholder')}\n className=\"font-mono text-xs\"\n />\n </div>\n </>\n )}\n <div className=\"sm:col-span-2 flex\">\n <Button type=\"submit\" disabled={addServer.isPending} className=\"ml-auto\">\n {addServer.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <Plus className=\"h-4 w-4\" />}\n {t('mcp.addServer')}\n </Button>\n </div>\n </form>\n </section>\n )\n}\n"],"names":["ServerCog","createLucideIcon","SettingsMcpRoute","useTranslation","listQuery","useMcpList","jsxs","jsx","Button","Loader2","RefreshCcw","Fragment","ServersCard","AddServerCard","data","t","removeServer","useMcpRemoveServer","health","useMcpHealth","healthResults","setHealthResults","useState","onRemove","name","toast","err","onHealth","m","r","msg","rows","runtime","Badge","Table","TableHeader","TableRow","TableHead","TableBody","s","rt","transport","transportLabel","target","runtimeBadge","TableCell","Activity","Trash2","addServer","useMcpAddServer","setName","setTransport","command","setCommand","args","setArgs","url","setUrl","headersJson","setHeadersJson","onSubmit","e","headers","body","splitArgs","Label","Input","Select","v","SelectTrigger","SelectValue","SelectContent","SelectItem","Plus"],"mappings":"+iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,EAAYC,EAAiB,YAAa,CAC9C,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,SAAU,EACxD,CACE,OACA,CACE,EAAG,+EACH,IAAK,QACX,CACA,EACE,CACE,OACA,CACE,EAAG,gFACH,IAAK,QACX,CACA,EACE,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,mBAAoB,IAAK,QAAQ,CAAE,EACjD,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,EAChD,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,EAChD,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,EAChD,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,EAC/C,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,EAC/C,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,EAChD,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CACjD,CAAC,ECHD,SAAwBC,IAAgC,CACtD,KAAM,CAAE,CAAA,EAAMC,EAAe,CAAC,WAAY,QAAQ,CAAC,EAC7CC,EAAYC,EAAA,EAClB,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACb,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,0BAChB,SAAA,CAAAC,EAAAA,IAACP,EAAA,CAAU,UAAU,uBAAA,CAAwB,QAC5C,KAAA,CAAG,UAAU,wBAAyB,SAAA,EAAE,WAAW,EAAE,EACtDM,EAAAA,KAACE,EAAA,CACC,QAAQ,QAAQ,KAAK,KAAK,UAAU,UACpC,QAAS,IAAM,KAAKJ,EAAU,QAAA,EAC9B,SAAUA,EAAU,WACpB,aAAY,EAAE,kBAAmB,CAAE,GAAI,SAAU,EAEhD,SAAA,CAAAA,EAAU,iBACNK,EAAA,CAAQ,UAAU,uBAAuB,EAC1CF,EAAAA,IAACG,EAAA,CAAW,UAAU,SAAA,CAAU,QACnC,OAAA,CAAK,UAAU,mBAAoB,SAAA,EAAE,aAAa,CAAA,CAAE,CAAA,CAAA,CAAA,CACvD,EACF,QACC,IAAA,CAAE,UAAU,wBAAyB,SAAA,EAAE,cAAc,EAAE,EAEvDN,EAAU,UACTG,MAAC,OAAI,UAAU,4CAAA,CAA6C,EAE5DD,EAAAA,KAAAK,EAAAA,SAAA,CACE,SAAA,CAAAJ,EAAAA,IAACK,EAAA,CAAY,KAAMR,EAAU,IAAA,CAAM,QAClCS,EAAA,CAAA,CAAc,CAAA,CAAA,CACjB,CAAA,EAEJ,CAEJ,CAIA,SAASD,EAAY,CAAE,KAAAE,GAAsE,CAC3F,KAAM,CAAE,EAAAC,CAAA,EAAMZ,EAAe,CAAC,WAAY,QAAQ,CAAC,EAC7Ca,EAAeC,EAAA,EACfC,EAASC,EAAA,EACT,CAACC,EAAeC,CAAgB,EAAIC,EAAAA,SAAiC,CAAA,CAAE,EAE7E,eAAeC,EAASC,EAA6B,CACnD,GAAK,QAAQT,EAAE,oBAAqB,CAAE,KAAAS,CAAA,CAAM,CAAC,EAC7C,GAAI,CACF,MAAMR,EAAa,YAAYQ,CAAI,EACnCC,EAAM,QAAQV,EAAE,mBAAoB,CAAE,KAAAS,CAAA,CAAM,CAAC,CAC/C,OAASE,EAAK,CACZD,EAAM,MAAQC,GAAe,SAAW,OAAOA,CAAG,CAAE,CACtD,CACF,CAEA,eAAeC,EAASH,EAA6B,CACnDH,EAAkBO,IAAO,CAAE,GAAGA,EAAG,CAACJ,CAAI,EAAGT,EAAE,aAAa,CAAA,EAAI,EAC5D,GAAI,CACF,MAAMc,EAAI,MAAMX,EAAO,YAAYM,CAAI,EACjCM,EAAMD,EAAE,UACV,KAAKA,EAAE,YAAc,EACnBd,EAAE,0BAA2B,CAAE,MAAOc,EAAE,SAAA,CAAW,EACnDd,EAAE,uBAAwB,CAAE,MAAOc,EAAE,SAAA,CAAW,CAAC,GACnD,KAAKA,EAAE,WAAad,EAAE,yBAAyB,CAAC,GACpDM,EAAkBO,IAAO,CAAE,GAAGA,EAAG,CAACJ,CAAI,EAAGM,CAAA,EAAM,CACjD,OAASJ,EAAK,CACZL,EAAkBO,IAAO,CAAE,GAAGA,EAAG,CAACJ,CAAI,EAAG,KAAOE,GAAe,SAAW,OAAOA,CAAG,CAAE,IAAK,CAC7F,CACF,CAEA,MAAMK,EAAOjB,GAAM,SAAW,CAAA,EACxBkB,EAAUlB,GAAM,SAAS,SAAW,CAAA,EAC1C,OAAIiB,EAAK,SAAW,QAEf,UAAA,CAAQ,UAAU,mFAChB,SAAAhB,EAAE,kBAAkB,EACvB,EAKFT,EAAAA,KAAC,UAAA,CAAQ,UAAU,6CACjB,SAAA,CAAAA,EAAAA,KAAC,SAAA,CAAO,UAAU,2DAChB,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAyB,SAAAQ,EAAE,mBAAoB,CAAE,MAAOgB,EAAK,MAAA,CAAQ,CAAA,CAAE,EACpFjB,GAAM,SACLP,EAAAA,IAAC0B,EAAA,CAAM,QAAQ,OAAQ,SAAAlB,EAAE,iBAAkB,CAAE,MAAOD,EAAK,QAAQ,UAAA,CAAY,CAAA,CAAE,CAAA,EAEnF,SACCoB,EAAA,CACC,SAAA,CAAA3B,EAAAA,IAAC4B,EAAA,CACC,gBAACC,EAAA,CACC,SAAA,CAAA7B,EAAAA,IAAC8B,EAAA,CAAW,SAAAtB,EAAE,cAAc,CAAA,CAAE,EAC9BR,EAAAA,IAAC8B,EAAA,CAAW,SAAAtB,EAAE,mBAAmB,CAAA,CAAE,EACnCR,EAAAA,IAAC8B,EAAA,CAAW,SAAAtB,EAAE,gBAAgB,CAAA,CAAE,EAChCR,EAAAA,IAAC8B,EAAA,CAAW,SAAAtB,EAAE,iBAAiB,CAAA,CAAE,EACjCR,EAAAA,IAAC8B,EAAA,CAAW,SAAAtB,EAAE,iBAAiB,CAAA,CAAE,CAAA,CAAA,CACnC,CAAA,CACF,EACAR,EAAAA,IAAC+B,EAAA,CACE,SAAAP,EAAK,IAAKQ,GAAM,CACf,MAAMC,EAAKR,EAAQ,KAAMH,GAAMA,EAAE,OAASU,EAAE,IAAI,EAC1CE,EAAYC,EAAeH,EAAGxB,CAAC,EAC/B4B,EAASJ,EAAE,QACb,GAAGA,EAAE,OAAO,KAAKA,EAAE,MAAQ,IAAI,KAAK,GAAG,CAAC,GAAG,OAC1CA,EAAE,KAAO,IACRK,EAAgBJ,EAElBA,EAAG,UACDjC,EAAAA,IAAC0B,EAAA,CAAM,QAAQ,UACZ,SAAAO,EAAG,YAAc,EACdzB,EAAE,0BAA2B,CAAE,MAAOyB,EAAG,UAAW,EACpDzB,EAAE,uBAAwB,CAAE,MAAOyB,EAAG,UAAW,EACvD,EACAjC,MAAC0B,EAAA,CAAM,QAAQ,SAAU,SAAAlB,EAAE,yBAAyB,EAAE,QAPvDkB,EAAA,CAAM,QAAQ,UAAW,SAAAlB,EAAE,oBAAoB,EAAE,EAQtD,cACGqB,EAAA,CACC,SAAA,CAAA7B,EAAAA,IAACsC,EAAA,CAAU,UAAU,oBAAqB,SAAAN,EAAE,KAAK,EACjDhC,EAAAA,IAACsC,GAAW,SAAAJ,CAAA,CAAU,EACtBlC,EAAAA,IAACsC,EAAA,CAAU,UAAU,gDAAiD,SAAAF,EAAO,EAC7EpC,EAAAA,IAACsC,GAAW,SAAAD,CAAA,CAAa,EACzBtC,EAAAA,KAACuC,EAAA,CAAU,UAAU,kDACnB,SAAA,CAAAvC,EAAAA,KAACE,EAAA,CACC,QAAQ,QAAQ,KAAK,KACrB,QAAS,IAAM,KAAKmB,EAASY,EAAE,IAAI,EACnC,SAAUrB,EAAO,UAEjB,SAAA,CAAAX,EAAAA,IAACuC,EAAA,CAAS,UAAU,SAAA,CAAU,EAC9BvC,EAAAA,IAAC,OAAA,CAAM,SAAAQ,EAAE,YAAY,CAAA,CAAE,CAAA,CAAA,CAAA,EAEzBT,EAAAA,KAACE,EAAA,CACC,QAAQ,QAAQ,KAAK,KACrB,QAAS,IAAM,KAAKe,EAASgB,EAAE,IAAI,EACnC,SAAUvB,EAAa,UACvB,UAAU,gCAEV,SAAA,CAAAT,EAAAA,IAACwC,EAAA,CAAO,UAAU,SAAA,CAAU,QAC3B,OAAA,CAAK,UAAU,mBAAoB,SAAAhC,EAAE,YAAY,CAAA,CAAE,CAAA,CAAA,CAAA,EAErDK,EAAcmB,EAAE,IAAI,GACnBhC,EAAAA,IAAC,OAAA,CAAK,UAAU,iCAAkC,SAAAa,EAAcmB,EAAE,IAAI,CAAA,CAAE,CAAA,CAAA,CAE5E,CAAA,CAAA,EA1BaA,EAAE,IA2BjB,CAEJ,CAAC,CAAA,CACH,CAAA,CAAA,CACF,CAAA,EACF,CAEJ,CAEA,SAASG,EACPH,EACAxB,EACQ,CACR,OAAIwB,EAAE,QAAgBxB,EAAE,oBAAoB,EACxCwB,EAAE,IAAYA,EAAE,IAAI,SAAS,MAAM,EAAIxB,EAAE,kBAAkB,EAAIA,EAAE,mBAAmB,EACjF,GACT,CAIA,SAASF,GAA6B,CACpC,KAAM,CAAE,CAAA,EAAMV,EAAe,CAAC,WAAY,QAAQ,CAAC,EAC7C6C,EAAYC,EAAA,EACZ,CAACzB,EAAM0B,CAAO,EAAI5B,EAAAA,SAAS,EAAE,EAC7B,CAACmB,EAAWU,CAAY,EAAI7B,EAAAA,SAA2B,OAAO,EAC9D,CAAC8B,EAASC,CAAU,EAAI/B,EAAAA,SAAS,EAAE,EACnC,CAACgC,EAAMC,CAAO,EAAIjC,EAAAA,SAAS,EAAE,EAC7B,CAACkC,EAAKC,CAAM,EAAInC,EAAAA,SAAS,EAAE,EAC3B,CAACoC,EAAaC,CAAc,EAAIrC,EAAAA,SAAS,EAAE,EAEjD,eAAesC,EAASC,EAAmC,CAEzD,GADAA,EAAE,eAAA,EACE,CAACrC,EAAK,OAAQ,CAAEC,EAAM,MAAM,EAAE,kBAAkB,CAAC,EAAG,MAAO,CAC/D,IAAIqC,EACJ,GAAIJ,EAAY,OACd,GAAI,CAAEI,EAAU,KAAK,MAAMJ,CAAW,CAAE,MAClC,CAAEjC,EAAM,MAAM,EAAE,oBAAoB,CAAC,EAAG,MAAO,CAEvD,MAAMsC,EAAoD,CAAE,KAAMvC,EAAK,MAAK,EAC5E,GAAIiB,IAAc,QAAS,CACzB,GAAI,CAACW,EAAQ,OAAQ,CAAE3B,EAAM,MAAM,EAAE,qBAAqB,CAAC,EAAG,MAAO,CACrEsC,EAAK,QAAUX,EAAQ,KAAA,EACvB,MAAMY,EAAYV,EAAK,MAAM,KAAK,EAAE,OAAO,OAAO,EAC9CU,EAAU,OAAS,IAAGD,EAAK,KAAOC,EACxC,KAAO,CACL,GAAI,CAACR,EAAI,OAAQ,CAAE/B,EAAM,MAAM,EAAE,iBAAiB,CAAC,EAAG,MAAO,CAC7DsC,EAAK,IAAMP,EAAI,KAAA,EACXM,MAAc,QAAUA,EAC9B,CACA,GAAI,CACF,MAAMd,EAAU,YAAYe,CAAI,EAChCtC,EAAM,QAAQ,EAAE,iBAAkB,CAAE,KAAMD,EAAK,KAAA,CAAK,CAAG,CAAC,EACxD0B,EAAQ,EAAE,EAAGG,EAAW,EAAE,EAAGE,EAAQ,EAAE,EAAGE,EAAO,EAAE,EAAGE,EAAe,EAAE,CACzE,OAASjC,EAAK,CACZD,EAAM,MAAQC,GAAe,SAAW,OAAOA,CAAG,CAAE,CACtD,CACF,CAEA,OACEpB,EAAAA,KAAC,UAAA,CAAQ,UAAU,6CACjB,SAAA,CAAAC,EAAAA,IAAC,SAAA,CAAO,UAAU,mCAChB,SAAAA,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAyB,SAAA,EAAE,cAAc,CAAA,CAAE,EAC3D,EACAD,EAAAA,KAAC,OAAA,CAAK,SAAWuD,GAAM,KAAKD,EAASC,CAAC,EAAG,UAAU,4CACjD,SAAA,CAAAvD,OAAC,MAAA,CACC,SAAA,CAAAC,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,eAAe,EAAE,EAC3D1D,EAAAA,IAAC2D,EAAA,CACC,MAAO1C,EAAM,SAAWqC,GAAMX,EAAQW,EAAE,OAAO,KAAK,EACpD,YAAa,EAAE,qBAAqB,EACpC,UAAU,mBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAtD,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,oBAAoB,EAAE,EAChE3D,EAAAA,KAAC6D,GAAO,MAAO1B,EAAW,cAAgB2B,GAAMjB,EAAaiB,CAAqB,EAChF,SAAA,CAAA7D,EAAAA,IAAC8D,EAAA,CAAc,SAAA9D,EAAAA,IAAC+D,EAAA,CAAA,CAAY,EAAE,SAC7BC,EAAA,CACC,SAAA,CAAAhE,MAACiE,EAAA,CAAW,MAAM,QAAS,SAAA,EAAE,0BAA0B,EAAE,QACxDA,EAAA,CAAW,MAAM,OAAQ,SAAA,EAAE,yBAAyB,CAAA,CAAE,CAAA,CAAA,CACzD,CAAA,CAAA,CACF,CAAA,EACF,EACC/B,IAAc,QACbnC,EAAAA,KAAAK,EAAAA,SAAA,CACE,SAAA,CAAAL,OAAC,MAAA,CACC,SAAA,CAAAC,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,kBAAkB,EAAE,EAC9D1D,EAAAA,IAAC2D,EAAA,CACC,MAAOd,EAAS,SAAWS,GAAMR,EAAWQ,EAAE,OAAO,KAAK,EAC1D,YAAa,EAAE,wBAAwB,EACvC,UAAU,mBAAA,CAAA,CACZ,EACF,SACC,MAAA,CACC,SAAA,CAAAtD,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,eAAe,EAAE,EAC3D1D,EAAAA,IAAC2D,EAAA,CACC,MAAOZ,EAAM,SAAWO,GAAMN,EAAQM,EAAE,OAAO,KAAK,EACpD,YAAY,mDACZ,UAAU,mBAAA,CAAA,CACZ,CAAA,CACF,CAAA,CAAA,CACF,EAEAvD,EAAAA,KAAAK,EAAAA,SAAA,CACE,SAAA,CAAAL,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAC,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,cAAc,EAAE,EAC1D1D,EAAAA,IAAC2D,EAAA,CACC,MAAOV,EAAK,SAAWK,GAAMJ,EAAOI,EAAE,OAAO,KAAK,EAClD,YAAa,EAAE,oBAAoB,EACnC,UAAU,mBAAA,CAAA,CACZ,EACF,EACAvD,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAC,MAAC0D,EAAA,CAAM,UAAU,sBAAuB,SAAA,EAAE,kBAAkB,EAAE,EAC9D1D,EAAAA,IAAC2D,EAAA,CACC,MAAOR,EAAa,SAAWG,GAAMF,EAAeE,EAAE,OAAO,KAAK,EAClE,YAAa,EAAE,wBAAwB,EACvC,UAAU,mBAAA,CAAA,CACZ,CAAA,CACF,CAAA,EACF,EAEFtD,EAAAA,IAAC,MAAA,CAAI,UAAU,qBACb,SAAAD,EAAAA,KAACE,EAAA,CAAO,KAAK,SAAS,SAAUwC,EAAU,UAAW,UAAU,UAC5D,SAAA,CAAAA,EAAU,gBAAavC,EAAA,CAAQ,UAAU,uBAAuB,EAAKF,EAAAA,IAACkE,EAAA,CAAK,UAAU,SAAA,CAAU,EAC/F,EAAE,eAAe,CAAA,CAAA,CACpB,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,CAEJ","x_google_ignoreList":[0]}
@@ -1,4 +1,4 @@
1
- import{x as Pe,w as he,u as Te,a8 as pe,Q as o,g as T,s as g,a4 as U,a6 as Ae,a5 as Oe,a3 as xe,t as ge,h as Ut,A as Bt,y as ke,f as oe,P as Vt,K as zt,E as Yt,a7 as Ht,R as qt,F as Wt,D as Xt,e as Qt,b as Zt,r as A,C as Jt,aa as en,a9 as tn,q as Fe,ac as Le,ab as nn,B as on,c as Ie,T as rn,I as ue,L as Ee,a2 as Se,z as an}from"./index-C4hk1i67.js";import{e as s}from"./react-C9F3QeMB.js";import{D as sn}from"./data-table-BRLUxacD.js";import{E as cn}from"./empty-state-DZJTUlvz.js";import{C as ln}from"./confirm-dialog-CCfCf6BG.js";import{C as un}from"./chevron-right-BhKELKvM.js";import{u as dn}from"./useQuery-rLmHxFp4.js";import{T as pn}from"./trash-2-CqpMjbu5.js";import{R as fn}from"./refresh-ccw-D8mc4hxU.js";import{S as mn}from"./search-DDYjsJ7-.js";import{M as hn}from"./map-pin-B8hea8yW.js";import"./table-B6nK6k3L.js";import"./dialog-By4YA8bm.js";import"./x-D1re-vBd.js";/**
1
+ import{y as Pe,x as he,v as Te,a9 as pe,U as o,g as T,t as g,a5 as U,a7 as Ae,a6 as Oe,a4 as xe,u as ge,h as Ut,A as Bt,z as ke,f as oe,P as Vt,M as zt,G as Yt,a8 as Ht,R as qt,F as Wt,D as Xt,e as Qt,b as Zt,s as A,C as Jt,ab as en,aa as tn,q as Fe,ad as Le,ac as nn,B as on,c as Ie,T as rn,I as ue,L as Ee,a3 as Se,E as an}from"./index-XJngV1gH.js";import{e as s}from"./react-C9F3QeMB.js";import{D as sn}from"./data-table-Dw4Df09-.js";import{E as cn}from"./empty-state-D8QXQ5y9.js";import{C as ln}from"./confirm-dialog-Bm6MsLXZ.js";import{C as un}from"./chevron-right-DU8Xla1M.js";import{u as dn}from"./useQuery-gnz30xMJ.js";import{T as pn}from"./trash-2-DxKJo_-6.js";import{R as fn}from"./refresh-ccw-BBRPVLH8.js";import{S as mn}from"./search-Yb1S22sv.js";import{M as hn}from"./map-pin-CyZg1-Jk.js";import"./table-BKdG9tsY.js";import"./dialog-CNsc4COh.js";import"./x-DGQ0qjhc.js";/**
2
2
  * @license lucide-react v0.469.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -9,4 +9,4 @@ import{x as Pe,w as he,u as Te,a8 as pe,Q as o,g as T,s as g,a4 as U,a6 as Ae,a5
9
9
  * This source code is licensed under the ISC license.
10
10
  * See the LICENSE file in the root directory of this source tree.
11
11
  */const gn=Pe("NotebookText",[["path",{d:"M2 6h4",key:"aawbzj"}],["path",{d:"M2 10h4",key:"l0bgd4"}],["path",{d:"M2 14h4",key:"1gsvsf"}],["path",{d:"M2 18h4",key:"1bu2t1"}],["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["path",{d:"M9.5 8h5",key:"11mslq"}],["path",{d:"M9.5 12H16",key:"ktog6x"}],["path",{d:"M9.5 16H14",key:"p1seyn"}]]);var de="rovingFocusGroup.onEntryFocus",wn={bubbles:!1,cancelable:!0},X="RovingFocusGroup",[fe,Ge,vn]=Te(X),[Mn,Ke]=he(X,[vn]),[Cn,bn]=Mn(X),$e=s.forwardRef((e,t)=>o.jsx(fe.Provider,{scope:e.__scopeRovingFocusGroup,children:o.jsx(fe.Slot,{scope:e.__scopeRovingFocusGroup,children:o.jsx(yn,{...e,ref:t})})}));$e.displayName=X;var yn=s.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:c,currentTabStopId:l,defaultCurrentTabStopId:u,onCurrentTabStopIdChange:f,onEntryFocus:m,preventScrollOnEntryFocus:d=!1,...i}=e,x=s.useRef(null),M=U(t,x),w=Ae(c),[N,v]=Oe({prop:l,defaultProp:u??null,onChange:f,caller:X}),[C,P]=s.useState(!1),b=xe(m),I=Ge(n),O=s.useRef(!1),[p,_]=s.useState(0);return s.useEffect(()=>{const y=x.current;if(y)return y.addEventListener(de,b),()=>y.removeEventListener(de,b)},[b]),o.jsx(Cn,{scope:n,orientation:r,dir:w,loop:a,currentTabStopId:N,onItemFocus:s.useCallback(y=>v(y),[v]),onItemShiftTab:s.useCallback(()=>P(!0),[]),onFocusableItemAdd:s.useCallback(()=>_(y=>y+1),[]),onFocusableItemRemove:s.useCallback(()=>_(y=>y-1),[]),children:o.jsx(T.div,{tabIndex:C||p===0?-1:0,"data-orientation":r,...i,ref:M,style:{outline:"none",...e.style},onMouseDown:g(e.onMouseDown,()=>{O.current=!0}),onFocus:g(e.onFocus,y=>{const j=!O.current;if(y.target===y.currentTarget&&j&&!C){const k=new CustomEvent(de,wn);if(y.currentTarget.dispatchEvent(k),!k.defaultPrevented){const B=I().filter(D=>D.focusable),V=B.find(D=>D.active),J=B.find(D=>D.id===N),ce=[V,J,...B].filter(Boolean).map(D=>D.ref.current);Ve(ce,d)}}O.current=!1}),onBlur:g(e.onBlur,()=>P(!1))})})}),Ue="RovingFocusGroupItem",Be=s.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:c,children:l,...u}=e,f=pe(),m=c||f,d=bn(Ue,n),i=d.currentTabStopId===m,x=Ge(n),{onFocusableItemAdd:M,onFocusableItemRemove:w,currentTabStopId:N}=d;return s.useEffect(()=>{if(r)return M(),()=>w()},[r,M,w]),o.jsx(fe.ItemSlot,{scope:n,id:m,focusable:r,active:a,children:o.jsx(T.span,{tabIndex:i?0:-1,"data-orientation":d.orientation,...u,ref:t,onMouseDown:g(e.onMouseDown,v=>{r?d.onItemFocus(m):v.preventDefault()}),onFocus:g(e.onFocus,()=>d.onItemFocus(m)),onKeyDown:g(e.onKeyDown,v=>{if(v.key==="Tab"&&v.shiftKey){d.onItemShiftTab();return}if(v.target!==v.currentTarget)return;const C=Nn(v,d.orientation,d.dir);if(C!==void 0){if(v.metaKey||v.ctrlKey||v.altKey||v.shiftKey)return;v.preventDefault();let b=x().filter(I=>I.focusable).map(I=>I.ref.current);if(C==="last")b.reverse();else if(C==="prev"||C==="next"){C==="prev"&&b.reverse();const I=b.indexOf(v.currentTarget);b=d.loop?In(b,I+1):b.slice(I+1)}setTimeout(()=>Ve(b))}}),children:typeof l=="function"?l({isCurrentTabStop:i,hasTabStop:N!=null}):l})})});Be.displayName=Ue;var _n={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Rn(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function Nn(e,t,n){const r=Rn(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return _n[r]}function Ve(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function In(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var En=$e,Sn=Be;function jn(e){const t=Dn(e),n=s.forwardRef((r,a)=>{const{children:c,...l}=r,u=s.Children.toArray(c),f=u.find(Tn);if(f){const m=f.props.children,d=u.map(i=>i===f?s.Children.count(m)>1?s.Children.only(null):s.isValidElement(m)?m.props.children:null:i);return o.jsx(t,{...l,ref:a,children:s.isValidElement(m)?s.cloneElement(m,void 0,d):null})}return o.jsx(t,{...l,ref:a,children:c})});return n.displayName=`${e}.Slot`,n}function Dn(e){const t=s.forwardRef((n,r)=>{const{children:a,...c}=n;if(s.isValidElement(a)){const l=On(a),u=An(c,a.props);return a.type!==s.Fragment&&(u.ref=r?ge(r,l):l),s.cloneElement(a,u)}return s.Children.count(a)>1?s.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Pn=Symbol("radix.slottable");function Tn(e){return s.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Pn}function An(e,t){const n={...t};for(const r in t){const a=e[r],c=t[r];/^on[A-Z]/.test(r)?a&&c?n[r]=(...u)=>{const f=c(...u);return a(...u),f}:a&&(n[r]=a):r==="style"?n[r]={...a,...c}:r==="className"&&(n[r]=[a,c].filter(Boolean).join(" "))}return{...e,...n}}function On(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var me=["Enter"," "],kn=["ArrowDown","PageUp","Home"],ze=["ArrowUp","PageDown","End"],Fn=[...kn,...ze],Ln={ltr:[...me,"ArrowRight"],rtl:[...me,"ArrowLeft"]},Gn={ltr:["ArrowLeft"],rtl:["ArrowRight"]},Q="Menu",[q,Kn,$n]=Te(Q),[L,Ye]=he(Q,[$n,ke,Ke]),re=ke(),He=Ke(),[Un,G]=L(Q),[Bn,Z]=L(Q),qe=e=>{const{__scopeMenu:t,open:n=!1,children:r,dir:a,onOpenChange:c,modal:l=!0}=e,u=re(t),[f,m]=s.useState(null),d=s.useRef(!1),i=xe(c),x=Ae(a);return s.useEffect(()=>{const M=()=>{d.current=!0,document.addEventListener("pointerdown",w,{capture:!0,once:!0}),document.addEventListener("pointermove",w,{capture:!0,once:!0})},w=()=>d.current=!1;return document.addEventListener("keydown",M,{capture:!0}),()=>{document.removeEventListener("keydown",M,{capture:!0}),document.removeEventListener("pointerdown",w,{capture:!0}),document.removeEventListener("pointermove",w,{capture:!0})}},[]),o.jsx(Ut,{...u,children:o.jsx(Un,{scope:t,open:n,onOpenChange:i,content:f,onContentChange:m,children:o.jsx(Bn,{scope:t,onClose:s.useCallback(()=>i(!1),[i]),isUsingKeyboardRef:d,dir:x,modal:l,children:r})})})};qe.displayName=Q;var Vn="MenuAnchor",we=s.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e,a=re(n);return o.jsx(Bt,{...a,...r,ref:t})});we.displayName=Vn;var ve="MenuPortal",[zn,We]=L(ve,{forceMount:void 0}),Xe=e=>{const{__scopeMenu:t,forceMount:n,children:r,container:a}=e,c=G(ve,t);return o.jsx(zn,{scope:t,forceMount:n,children:o.jsx(oe,{present:n||c.open,children:o.jsx(Vt,{asChild:!0,container:a,children:r})})})};Xe.displayName=ve;var S="MenuContent",[Yn,Me]=L(S),Qe=s.forwardRef((e,t)=>{const n=We(S,e.__scopeMenu),{forceMount:r=n.forceMount,...a}=e,c=G(S,e.__scopeMenu),l=Z(S,e.__scopeMenu);return o.jsx(q.Provider,{scope:e.__scopeMenu,children:o.jsx(oe,{present:r||c.open,children:o.jsx(q.Slot,{scope:e.__scopeMenu,children:l.modal?o.jsx(Hn,{...a,ref:t}):o.jsx(qn,{...a,ref:t})})})})}),Hn=s.forwardRef((e,t)=>{const n=G(S,e.__scopeMenu),r=s.useRef(null),a=U(t,r);return s.useEffect(()=>{const c=r.current;if(c)return zt(c)},[]),o.jsx(Ce,{...e,ref:a,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:g(e.onFocusOutside,c=>c.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),qn=s.forwardRef((e,t)=>{const n=G(S,e.__scopeMenu);return o.jsx(Ce,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Wn=jn("MenuContent.ScrollLock"),Ce=s.forwardRef((e,t)=>{const{__scopeMenu:n,loop:r=!1,trapFocus:a,onOpenAutoFocus:c,onCloseAutoFocus:l,disableOutsidePointerEvents:u,onEntryFocus:f,onEscapeKeyDown:m,onPointerDownOutside:d,onFocusOutside:i,onInteractOutside:x,onDismiss:M,disableOutsideScroll:w,...N}=e,v=G(S,n),C=Z(S,n),P=re(n),b=He(n),I=Kn(n),[O,p]=s.useState(null),_=s.useRef(null),y=U(t,_,v.onContentChange),j=s.useRef(0),k=s.useRef(""),B=s.useRef(0),V=s.useRef(null),J=s.useRef("right"),ee=s.useRef(0),ce=w?qt:s.Fragment,D=w?{as:Wn,allowPinchZoom:!0}:void 0,$t=h=>{const $=k.current+h,F=I().filter(E=>!E.disabled),z=document.activeElement,ie=F.find(E=>E.ref.current===z)?.textValue,le=F.map(E=>E.textValue),Re=co(le,$,ie),Y=F.find(E=>E.textValue===Re)?.ref.current;(function E(Ne){k.current=Ne,window.clearTimeout(j.current),Ne!==""&&(j.current=window.setTimeout(()=>E(""),1e3))})($),Y&&setTimeout(()=>Y.focus())};s.useEffect(()=>()=>window.clearTimeout(j.current),[]),Ht();const K=s.useCallback(h=>J.current===V.current?.side&&lo(h,V.current?.area),[]);return o.jsx(Yn,{scope:n,searchRef:k,onItemEnter:s.useCallback(h=>{K(h)&&h.preventDefault()},[K]),onItemLeave:s.useCallback(h=>{K(h)||(_.current?.focus(),p(null))},[K]),onTriggerLeave:s.useCallback(h=>{K(h)&&h.preventDefault()},[K]),pointerGraceTimerRef:B,onPointerGraceIntentChange:s.useCallback(h=>{V.current=h},[]),children:o.jsx(ce,{...D,children:o.jsx(Wt,{asChild:!0,trapped:a,onMountAutoFocus:g(c,h=>{h.preventDefault(),_.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:l,children:o.jsx(Xt,{asChild:!0,disableOutsidePointerEvents:u,onEscapeKeyDown:m,onPointerDownOutside:d,onFocusOutside:i,onInteractOutside:x,onDismiss:M,children:o.jsx(En,{asChild:!0,...b,dir:C.dir,orientation:"vertical",loop:r,currentTabStopId:O,onCurrentTabStopIdChange:p,onEntryFocus:g(f,h=>{C.isUsingKeyboardRef.current||h.preventDefault()}),preventScrollOnEntryFocus:!0,children:o.jsx(Qt,{role:"menu","aria-orientation":"vertical","data-state":ft(v.open),"data-radix-menu-content":"",dir:C.dir,...P,...N,ref:y,style:{outline:"none",...N.style},onKeyDown:g(N.onKeyDown,h=>{const F=h.target.closest("[data-radix-menu-content]")===h.currentTarget,z=h.ctrlKey||h.altKey||h.metaKey,ie=h.key.length===1;F&&(h.key==="Tab"&&h.preventDefault(),!z&&ie&&$t(h.key));const le=_.current;if(h.target!==le||!Fn.includes(h.key))return;h.preventDefault();const Y=I().filter(E=>!E.disabled).map(E=>E.ref.current);ze.includes(h.key)&&Y.reverse(),ao(Y)}),onBlur:g(e.onBlur,h=>{h.currentTarget.contains(h.target)||(window.clearTimeout(j.current),k.current="")}),onPointerMove:g(e.onPointerMove,W(h=>{const $=h.target,F=ee.current!==h.clientX;if(h.currentTarget.contains($)&&F){const z=h.clientX>ee.current?"right":"left";J.current=z,ee.current=h.clientX}}))})})})})})})});Qe.displayName=S;var Xn="MenuGroup",be=s.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e;return o.jsx(T.div,{role:"group",...r,ref:t})});be.displayName=Xn;var Qn="MenuLabel",Ze=s.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e;return o.jsx(T.div,{...r,ref:t})});Ze.displayName=Qn;var te="MenuItem",je="menu.itemSelect",ae=s.forwardRef((e,t)=>{const{disabled:n=!1,onSelect:r,...a}=e,c=s.useRef(null),l=Z(te,e.__scopeMenu),u=Me(te,e.__scopeMenu),f=U(t,c),m=s.useRef(!1),d=()=>{const i=c.current;if(!n&&i){const x=new CustomEvent(je,{bubbles:!0,cancelable:!0});i.addEventListener(je,M=>r?.(M),{once:!0}),Yt(i,x),x.defaultPrevented?m.current=!1:l.onClose()}};return o.jsx(Je,{...a,ref:f,disabled:n,onClick:g(e.onClick,d),onPointerDown:i=>{e.onPointerDown?.(i),m.current=!0},onPointerUp:g(e.onPointerUp,i=>{m.current||i.currentTarget?.click()}),onKeyDown:g(e.onKeyDown,i=>{const x=u.searchRef.current!=="";n||x&&i.key===" "||me.includes(i.key)&&(i.currentTarget.click(),i.preventDefault())})})});ae.displayName=te;var Je=s.forwardRef((e,t)=>{const{__scopeMenu:n,disabled:r=!1,textValue:a,...c}=e,l=Me(te,n),u=He(n),f=s.useRef(null),m=U(t,f),[d,i]=s.useState(!1),[x,M]=s.useState("");return s.useEffect(()=>{const w=f.current;w&&M((w.textContent??"").trim())},[c.children]),o.jsx(q.ItemSlot,{scope:n,disabled:r,textValue:a??x,children:o.jsx(Sn,{asChild:!0,...u,focusable:!r,children:o.jsx(T.div,{role:"menuitem","data-highlighted":d?"":void 0,"aria-disabled":r||void 0,"data-disabled":r?"":void 0,...c,ref:m,onPointerMove:g(e.onPointerMove,W(w=>{r?l.onItemLeave(w):(l.onItemEnter(w),w.defaultPrevented||w.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:g(e.onPointerLeave,W(w=>l.onItemLeave(w))),onFocus:g(e.onFocus,()=>i(!0)),onBlur:g(e.onBlur,()=>i(!1))})})})}),Zn="MenuCheckboxItem",et=s.forwardRef((e,t)=>{const{checked:n=!1,onCheckedChange:r,...a}=e;return o.jsx(at,{scope:e.__scopeMenu,checked:n,children:o.jsx(ae,{role:"menuitemcheckbox","aria-checked":ne(n)?"mixed":n,...a,ref:t,"data-state":_e(n),onSelect:g(a.onSelect,()=>r?.(ne(n)?!0:!n),{checkForDefaultPrevented:!1})})})});et.displayName=Zn;var tt="MenuRadioGroup",[Jn,eo]=L(tt,{value:void 0,onValueChange:()=>{}}),nt=s.forwardRef((e,t)=>{const{value:n,onValueChange:r,...a}=e,c=xe(r);return o.jsx(Jn,{scope:e.__scopeMenu,value:n,onValueChange:c,children:o.jsx(be,{...a,ref:t})})});nt.displayName=tt;var ot="MenuRadioItem",rt=s.forwardRef((e,t)=>{const{value:n,...r}=e,a=eo(ot,e.__scopeMenu),c=n===a.value;return o.jsx(at,{scope:e.__scopeMenu,checked:c,children:o.jsx(ae,{role:"menuitemradio","aria-checked":c,...r,ref:t,"data-state":_e(c),onSelect:g(r.onSelect,()=>a.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});rt.displayName=ot;var ye="MenuItemIndicator",[at,to]=L(ye,{checked:!1}),st=s.forwardRef((e,t)=>{const{__scopeMenu:n,forceMount:r,...a}=e,c=to(ye,n);return o.jsx(oe,{present:r||ne(c.checked)||c.checked===!0,children:o.jsx(T.span,{...a,ref:t,"data-state":_e(c.checked)})})});st.displayName=ye;var no="MenuSeparator",ct=s.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e;return o.jsx(T.div,{role:"separator","aria-orientation":"horizontal",...r,ref:t})});ct.displayName=no;var oo="MenuArrow",it=s.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e,a=re(n);return o.jsx(Zt,{...a,...r,ref:t})});it.displayName=oo;var ro="MenuSub",[vr,lt]=L(ro),H="MenuSubTrigger",ut=s.forwardRef((e,t)=>{const n=G(H,e.__scopeMenu),r=Z(H,e.__scopeMenu),a=lt(H,e.__scopeMenu),c=Me(H,e.__scopeMenu),l=s.useRef(null),{pointerGraceTimerRef:u,onPointerGraceIntentChange:f}=c,m={__scopeMenu:e.__scopeMenu},d=s.useCallback(()=>{l.current&&window.clearTimeout(l.current),l.current=null},[]);return s.useEffect(()=>d,[d]),s.useEffect(()=>{const i=u.current;return()=>{window.clearTimeout(i),f(null)}},[u,f]),o.jsx(we,{asChild:!0,...m,children:o.jsx(Je,{id:a.triggerId,"aria-haspopup":"menu","aria-expanded":n.open,"aria-controls":a.contentId,"data-state":ft(n.open),...e,ref:ge(t,a.onTriggerChange),onClick:i=>{e.onClick?.(i),!(e.disabled||i.defaultPrevented)&&(i.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:g(e.onPointerMove,W(i=>{c.onItemEnter(i),!i.defaultPrevented&&!e.disabled&&!n.open&&!l.current&&(c.onPointerGraceIntentChange(null),l.current=window.setTimeout(()=>{n.onOpenChange(!0),d()},100))})),onPointerLeave:g(e.onPointerLeave,W(i=>{d();const x=n.content?.getBoundingClientRect();if(x){const M=n.content?.dataset.side,w=M==="right",N=w?-5:5,v=x[w?"left":"right"],C=x[w?"right":"left"];c.onPointerGraceIntentChange({area:[{x:i.clientX+N,y:i.clientY},{x:v,y:x.top},{x:C,y:x.top},{x:C,y:x.bottom},{x:v,y:x.bottom}],side:M}),window.clearTimeout(u.current),u.current=window.setTimeout(()=>c.onPointerGraceIntentChange(null),300)}else{if(c.onTriggerLeave(i),i.defaultPrevented)return;c.onPointerGraceIntentChange(null)}})),onKeyDown:g(e.onKeyDown,i=>{const x=c.searchRef.current!=="";e.disabled||x&&i.key===" "||Ln[r.dir].includes(i.key)&&(n.onOpenChange(!0),n.content?.focus(),i.preventDefault())})})})});ut.displayName=H;var dt="MenuSubContent",pt=s.forwardRef((e,t)=>{const n=We(S,e.__scopeMenu),{forceMount:r=n.forceMount,...a}=e,c=G(S,e.__scopeMenu),l=Z(S,e.__scopeMenu),u=lt(dt,e.__scopeMenu),f=s.useRef(null),m=U(t,f);return o.jsx(q.Provider,{scope:e.__scopeMenu,children:o.jsx(oe,{present:r||c.open,children:o.jsx(q.Slot,{scope:e.__scopeMenu,children:o.jsx(Ce,{id:u.contentId,"aria-labelledby":u.triggerId,...a,ref:m,align:"start",side:l.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:d=>{l.isUsingKeyboardRef.current&&f.current?.focus(),d.preventDefault()},onCloseAutoFocus:d=>d.preventDefault(),onFocusOutside:g(e.onFocusOutside,d=>{d.target!==u.trigger&&c.onOpenChange(!1)}),onEscapeKeyDown:g(e.onEscapeKeyDown,d=>{l.onClose(),d.preventDefault()}),onKeyDown:g(e.onKeyDown,d=>{const i=d.currentTarget.contains(d.target),x=Gn[l.dir].includes(d.key);i&&x&&(c.onOpenChange(!1),u.trigger?.focus(),d.preventDefault())})})})})})});pt.displayName=dt;function ft(e){return e?"open":"closed"}function ne(e){return e==="indeterminate"}function _e(e){return ne(e)?"indeterminate":e?"checked":"unchecked"}function ao(e){const t=document.activeElement;for(const n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function so(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function co(e,t,n){const a=t.length>1&&Array.from(t).every(m=>m===t[0])?t[0]:t,c=n?e.indexOf(n):-1;let l=so(e,Math.max(c,0));a.length===1&&(l=l.filter(m=>m!==n));const f=l.find(m=>m.toLowerCase().startsWith(a.toLowerCase()));return f!==n?f:void 0}function io(e,t){const{x:n,y:r}=e;let a=!1;for(let c=0,l=t.length-1;c<t.length;l=c++){const u=t[c],f=t[l],m=u.x,d=u.y,i=f.x,x=f.y;d>r!=x>r&&n<(i-m)*(r-d)/(x-d)+m&&(a=!a)}return a}function lo(e,t){if(!t)return!1;const n={x:e.clientX,y:e.clientY};return io(n,t)}function W(e){return t=>t.pointerType==="mouse"?e(t):void 0}var uo=qe,po=we,fo=Xe,mo=Qe,ho=be,xo=Ze,go=ae,wo=et,vo=nt,Mo=rt,Co=st,bo=ct,yo=it,_o=ut,Ro=pt,se="DropdownMenu",[No]=he(se,[Ye]),R=Ye(),[Io,mt]=No(se),ht=e=>{const{__scopeDropdownMenu:t,children:n,dir:r,open:a,defaultOpen:c,onOpenChange:l,modal:u=!0}=e,f=R(t),m=s.useRef(null),[d,i]=Oe({prop:a,defaultProp:c??!1,onChange:l,caller:se});return o.jsx(Io,{scope:t,triggerId:pe(),triggerRef:m,contentId:pe(),open:d,onOpenChange:i,onOpenToggle:s.useCallback(()=>i(x=>!x),[i]),modal:u,children:o.jsx(uo,{...f,open:d,onOpenChange:i,dir:r,modal:u,children:n})})};ht.displayName=se;var xt="DropdownMenuTrigger",gt=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,disabled:r=!1,...a}=e,c=mt(xt,n),l=R(n);return o.jsx(po,{asChild:!0,...l,children:o.jsx(T.button,{type:"button",id:c.triggerId,"aria-haspopup":"menu","aria-expanded":c.open,"aria-controls":c.open?c.contentId:void 0,"data-state":c.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...a,ref:ge(t,c.triggerRef),onPointerDown:g(e.onPointerDown,u=>{!r&&u.button===0&&u.ctrlKey===!1&&(c.onOpenToggle(),c.open||u.preventDefault())}),onKeyDown:g(e.onKeyDown,u=>{r||(["Enter"," "].includes(u.key)&&c.onOpenToggle(),u.key==="ArrowDown"&&c.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(u.key)&&u.preventDefault())})})})});gt.displayName=xt;var Eo="DropdownMenuPortal",wt=e=>{const{__scopeDropdownMenu:t,...n}=e,r=R(t);return o.jsx(fo,{...r,...n})};wt.displayName=Eo;var vt="DropdownMenuContent",Mt=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=mt(vt,n),c=R(n),l=s.useRef(!1);return o.jsx(mo,{id:a.contentId,"aria-labelledby":a.triggerId,...c,...r,ref:t,onCloseAutoFocus:g(e.onCloseAutoFocus,u=>{l.current||a.triggerRef.current?.focus(),l.current=!1,u.preventDefault()}),onInteractOutside:g(e.onInteractOutside,u=>{const f=u.detail.originalEvent,m=f.button===0&&f.ctrlKey===!0,d=f.button===2||m;(!a.modal||d)&&(l.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});Mt.displayName=vt;var So="DropdownMenuGroup",jo=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(ho,{...a,...r,ref:t})});jo.displayName=So;var Do="DropdownMenuLabel",Ct=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(xo,{...a,...r,ref:t})});Ct.displayName=Do;var Po="DropdownMenuItem",bt=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(go,{...a,...r,ref:t})});bt.displayName=Po;var To="DropdownMenuCheckboxItem",yt=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(wo,{...a,...r,ref:t})});yt.displayName=To;var Ao="DropdownMenuRadioGroup",Oo=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(vo,{...a,...r,ref:t})});Oo.displayName=Ao;var ko="DropdownMenuRadioItem",_t=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(Mo,{...a,...r,ref:t})});_t.displayName=ko;var Fo="DropdownMenuItemIndicator",Rt=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(Co,{...a,...r,ref:t})});Rt.displayName=Fo;var Lo="DropdownMenuSeparator",Nt=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(bo,{...a,...r,ref:t})});Nt.displayName=Lo;var Go="DropdownMenuArrow",Ko=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(yo,{...a,...r,ref:t})});Ko.displayName=Go;var $o="DropdownMenuSubTrigger",It=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(_o,{...a,...r,ref:t})});It.displayName=$o;var Uo="DropdownMenuSubContent",Et=s.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,a=R(n);return o.jsx(Ro,{...a,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});Et.displayName=Uo;var Bo=ht,Vo=gt,zo=wt,St=Mt,jt=Ct,Dt=bt,Pt=yt,Tt=_t,At=Rt,Ot=Nt,kt=It,Ft=Et;const Yo=Bo,Ho=Vo,qo=s.forwardRef(({className:e,inset:t,children:n,...r},a)=>o.jsxs(kt,{ref:a,className:A("flex cursor-default select-none items-center gap-2 rounded px-2 py-1.5 text-sm outline-none","focus:bg-surface-hover data-[state=open]:bg-surface-hover",t&&"pl-8",e),...r,children:[n,o.jsx(un,{className:"ml-auto h-4 w-4"})]}));qo.displayName=kt.displayName;const Wo=s.forwardRef(({className:e,...t},n)=>o.jsx(Ft,{ref:n,className:A("z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-surface p-1 shadow-md","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",e),...t}));Wo.displayName=Ft.displayName;const Lt=s.forwardRef(({className:e,sideOffset:t=4,...n},r)=>o.jsx(zo,{children:o.jsx(St,{ref:r,sideOffset:t,className:A("z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-surface p-1 shadow-md","data-[state=open]:animate-in data-[state=closed]:animate-out","data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",e),...n})}));Lt.displayName=St.displayName;const Gt=s.forwardRef(({className:e,inset:t,...n},r)=>o.jsx(Dt,{ref:r,className:A("relative flex cursor-default select-none items-center gap-2 rounded px-2 py-1.5 text-sm outline-none","focus:bg-surface-hover focus:text-text","data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t&&"pl-8",e),...n}));Gt.displayName=Dt.displayName;const Xo=s.forwardRef(({className:e,children:t,checked:n,...r},a)=>o.jsxs(Pt,{ref:a,className:A("relative flex cursor-default select-none items-center rounded py-1.5 pl-8 pr-2 text-sm outline-none","focus:bg-surface-hover","data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),checked:n,...r,children:[o.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:o.jsx(At,{children:o.jsx(Jt,{className:"h-4 w-4"})})}),t]}));Xo.displayName=Pt.displayName;const Qo=s.forwardRef(({className:e,children:t,...n},r)=>o.jsxs(Tt,{ref:r,className:A("relative flex cursor-default select-none items-center rounded py-1.5 pl-8 pr-2 text-sm outline-none","focus:bg-surface-hover","data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...n,children:[o.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:o.jsx(At,{children:o.jsx(xn,{className:"h-2 w-2 fill-current"})})}),t]}));Qo.displayName=Tt.displayName;const Zo=s.forwardRef(({className:e,inset:t,...n},r)=>o.jsx(jt,{ref:r,className:A("px-2 py-1.5 text-xs font-semibold uppercase tracking-wide text-text-muted",t&&"pl-8",e),...n}));Zo.displayName=jt.displayName;const Jo=s.forwardRef(({className:e,...t},n)=>o.jsx(Ot,{ref:n,className:A("-mx-1 my-1 h-px bg-border",e),...t}));Jo.displayName=Ot.displayName;const Kt={all:["memos"],list:e=>["memos","list",e]};function er(e){return dn({queryKey:Kt.list(e),queryFn:()=>Fe.listMemos(e)})}function tr(){const e=en();return tn({mutationFn:t=>Fe.deleteMemo(t),onSuccess:()=>e.invalidateQueries({queryKey:Kt.all})})}const nr=300;function Mr(){const{t:e}=Le(["memos","common"]),[t,n]=nn(),r=t.get("q")??"",a=t.get("who")??"",c=t.get("what")??"",l=t.get("has_location")==="1",u=t.get("include_expired")==="1",[f,m]=s.useState(r);s.useEffect(()=>{if(f===r)return;const p=window.setTimeout(()=>{b({q:f||null})},nr);return()=>window.clearTimeout(p)},[f]);const d=s.useMemo(()=>({...r?{query:r}:{},...a?{who:a}:{},...c?{what:c}:{},...l?{has_location:!0}:{},...u?{include_expired:!0}:{},limit:200}),[r,a,c,l,u]),{data:i,isLoading:x,isFetching:M,refetch:w}=er(d),N=i?.memos??[],v=tr(),[C,P]=s.useState(null);function b(p){const _=new URLSearchParams(t);for(const[y,j]of Object.entries(p))j==null||j===""?_.delete(y):_.set(y,j);n(_,{replace:!0})}async function I(){if(C!=null)try{await v.mutateAsync(C),Se.success(e("toast.deleted"))}catch(p){const{message:_}=an(p,e);throw Se.error(_),p}}const O=s.useMemo(()=>[{id:"id",header:e("col.id"),cell:p=>o.jsxs("span",{className:"tabular-nums text-text-dim",children:["#",p.id]}),headClassName:"w-16"},{id:"what",header:e("col.what"),cell:p=>o.jsx("span",{className:"line-clamp-2",children:p.memo?o.jsx("span",{className:"text-text",children:p.memo}):o.jsx("span",{className:"font-medium text-text",children:p.what})}),asCardTitle:!0},{id:"who",header:e("col.who"),cell:p=>p.who?o.jsx(on,{variant:"secondary",children:p.who}):o.jsx("span",{className:"text-text-muted",children:"—"}),headClassName:"w-32"},{id:"when",header:e("col.when"),cell:p=>o.jsx("span",{className:"text-text-dim",children:p.whenText||(p.whenAt?De(p.whenAt):"—")}),headClassName:"w-36"},{id:"where",header:e("col.where"),cell:p=>p.where_label||p.where_lat!=null&&p.where_lng!=null?o.jsx(rr,{memo:p}):o.jsx("span",{className:"text-text-muted",children:"—"}),headClassName:"w-44"},{id:"platform",header:e("col.platform"),cell:p=>o.jsx("span",{className:"text-text-dim",children:p.platform}),headClassName:"w-24",hideOnMobile:!0},{id:"createdAt",header:e("col.createdAt"),cell:p=>o.jsx("span",{className:"text-text-dim",children:De(p.createdAt)}),headClassName:"w-36",hideOnMobile:!0},{id:"actions",header:"",cell:p=>o.jsx("div",{className:"flex justify-end",children:o.jsxs(Ie,{variant:"ghost",size:"sm",onClick:_=>{_.stopPropagation(),P(p.id)},disabled:v.isPending,"aria-label":e("action.delete"),children:[o.jsx(pn,{className:"h-3 w-3"}),o.jsx("span",{className:"sr-only sm:not-sr-only sm:ml-1",children:e("action.delete")})]})}),headClassName:"w-24"}],[e,v.isPending]);return o.jsxs("div",{className:"flex min-h-dvh flex-col bg-bg",children:[o.jsx(rn,{}),o.jsxs("main",{className:"mx-auto flex w-full max-w-7xl flex-1 flex-col gap-4 px-3 py-4 sm:px-4 pb-safe",children:[o.jsxs("header",{className:"flex flex-col gap-1",children:[o.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[o.jsx("h1",{className:"text-xl font-semibold",children:e("pageTitle")}),o.jsxs(Ie,{variant:"ghost",size:"sm",className:"ml-auto",onClick:()=>w(),disabled:M,"aria-label":e("actions.refresh",{ns:"common"}),children:[o.jsx(fn,{className:`h-4 w-4 ${M?"animate-spin":""}`}),o.jsx("span",{className:"hidden sm:inline",children:e("actions.refresh",{ns:"common"})})]})]}),o.jsx("p",{className:"text-sm text-text-dim",children:e("subtitle")})]}),o.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-end",children:[o.jsxs("div",{className:"relative flex-1 max-w-md",children:[o.jsx(mn,{className:"pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-text-muted"}),o.jsx(ue,{value:f,onChange:p=>m(p.target.value),placeholder:e("search.placeholder"),className:"pl-7"})]}),o.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:flex sm:items-end",children:[o.jsxs("div",{className:"flex flex-col gap-1",children:[o.jsx(Ee,{htmlFor:"who-filter",className:"text-xs text-text-dim",children:e("search.who")}),o.jsx(ue,{id:"who-filter",value:a,onChange:p=>b({who:p.target.value||null}),className:"w-36"})]}),o.jsxs("div",{className:"flex flex-col gap-1",children:[o.jsx(Ee,{htmlFor:"what-filter",className:"text-xs text-text-dim",children:e("search.what")}),o.jsx(ue,{id:"what-filter",value:c,onChange:p=>b({what:p.target.value||null}),className:"w-36"})]})]}),o.jsxs("div",{className:"flex items-center gap-3",children:[o.jsxs("label",{className:"inline-flex items-center gap-1 text-sm text-text-dim",children:[o.jsx("input",{type:"checkbox",checked:l,onChange:p=>b({has_location:p.target.checked?"1":null}),className:"h-4 w-4 accent-accent"}),e("search.hasLocation")]}),o.jsxs("label",{className:"inline-flex items-center gap-1 text-sm text-text-dim",children:[o.jsx("input",{type:"checkbox",checked:u,onChange:p=>b({include_expired:p.target.checked?"1":null}),className:"h-4 w-4 accent-accent"}),e("search.includeExpired")]})]})]}),o.jsx(sn,{columns:O,rows:N,getRowId:p=>String(p.id),loading:x,emptyState:o.jsx(cn,{icon:o.jsx(gn,{}),title:e("empty.title"),description:e("empty.description")})}),o.jsx(ln,{open:C!=null,onOpenChange:p=>{p||P(null)},title:e("action.confirmDelete"),description:e("action.confirmDeleteDesc"),intent:"danger",confirmLabel:e("action.delete"),onConfirm:I})]})]})}const or={baidu:"openMap.baidu",apple:"openMap.apple",google:"openMap.google",osm:"openMap.osm"};function rr({memo:e}){const{t}=Le("memos"),n=e.where_label||`${e.where_lat}, ${e.where_lng}`,r=Object.entries(e.mapUrls??{});return r.length===0?o.jsx("span",{className:"text-text-dim",children:n}):o.jsxs(Yo,{children:[o.jsx(Ho,{asChild:!0,children:o.jsxs("button",{type:"button",className:"inline-flex items-center gap-1 text-sm text-text-dim hover:text-accent",onClick:a=>a.stopPropagation(),children:[o.jsx(hn,{className:"h-3 w-3"}),o.jsx("span",{className:"line-clamp-1 underline-offset-2 hover:underline",children:n})]})}),o.jsx(Lt,{children:r.map(([a,c])=>o.jsx(Gt,{asChild:!0,children:o.jsx("a",{href:c,target:"_blank",rel:"noopener noreferrer",children:t(or[a]??"openMap.label",{defaultValue:a})})},a))})]})}function De(e){try{const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return e}}export{Mr as default};
12
- //# sourceMappingURL=memos-C0_I1Uzt.js.map
12
+ //# sourceMappingURL=memos-Bsiq64qW.js.map