@cosmicstack/mercury-agent 1.1.9 → 1.1.12

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 (114) hide show
  1. package/README.md +101 -1
  2. package/README.zh-CN.md +265 -140
  3. package/dist/index.js +4473 -1842
  4. package/dist/index.js.map +1 -1
  5. package/dist/web/ui/assets/{Chat-DCFkzIwn.js → Chat-DXSn2dY8.js} +2 -2
  6. package/dist/web/ui/assets/{Chat-DCFkzIwn.js.map → Chat-DXSn2dY8.js.map} +1 -1
  7. package/dist/web/ui/assets/{Dashboard-B81ollv8.js → Dashboard-1rlAqQ-Y.js} +2 -2
  8. package/dist/web/ui/assets/{Dashboard-B81ollv8.js.map → Dashboard-1rlAqQ-Y.js.map} +1 -1
  9. package/dist/web/ui/assets/{Goals-D0cR8yIP.js → Goals-CgSUAXLH.js} +2 -2
  10. package/dist/web/ui/assets/{Goals-D0cR8yIP.js.map → Goals-CgSUAXLH.js.map} +1 -1
  11. package/dist/web/ui/assets/{Graph-C3eHp3_J.js → Graph-DnlOWkay.js} +2 -2
  12. package/dist/web/ui/assets/{Graph-C3eHp3_J.js.map → Graph-DnlOWkay.js.map} +1 -1
  13. package/dist/web/ui/assets/{Kanban-DrkTRyni.js → Kanban-DRlNiNRF.js} +2 -2
  14. package/dist/web/ui/assets/{Kanban-DrkTRyni.js.map → Kanban-DRlNiNRF.js.map} +1 -1
  15. package/dist/web/ui/assets/{Login-GRQ-LjgN.js → Login-BP5524pC.js} +2 -2
  16. package/dist/web/ui/assets/{Login-GRQ-LjgN.js.map → Login-BP5524pC.js.map} +1 -1
  17. package/dist/web/ui/assets/{MarkdownRenderer-Dvh1jwyj.js → MarkdownRenderer-B9KGVD0X.js} +2 -2
  18. package/dist/web/ui/assets/{MarkdownRenderer-Dvh1jwyj.js.map → MarkdownRenderer-B9KGVD0X.js.map} +1 -1
  19. package/dist/web/ui/assets/{Memory-dAZsKmWz.js → Memory-BOQEY0H8.js} +2 -2
  20. package/dist/web/ui/assets/{Memory-dAZsKmWz.js.map → Memory-BOQEY0H8.js.map} +1 -1
  21. package/dist/web/ui/assets/{Permissions-DCiyUUfI.js → Permissions-jbFH-toa.js} +2 -2
  22. package/dist/web/ui/assets/{Permissions-DCiyUUfI.js.map → Permissions-jbFH-toa.js.map} +1 -1
  23. package/dist/web/ui/assets/{PersonDetail-iZgApJog.js → PersonDetail-Ca8B9io8.js} +2 -2
  24. package/dist/web/ui/assets/{PersonDetail-iZgApJog.js.map → PersonDetail-Ca8B9io8.js.map} +1 -1
  25. package/dist/web/ui/assets/{Persons-Bs_HhYjC.js → Persons-epdmUeBM.js} +2 -2
  26. package/dist/web/ui/assets/{Persons-Bs_HhYjC.js.map → Persons-epdmUeBM.js.map} +1 -1
  27. package/dist/web/ui/assets/{Providers-CL6wMWni.js → Providers-Bm8sZNZo.js} +2 -2
  28. package/dist/web/ui/assets/{Providers-CL6wMWni.js.map → Providers-Bm8sZNZo.js.map} +1 -1
  29. package/dist/web/ui/assets/{Schedules-BQwE1hP5.js → Schedules-BZKhm9R7.js} +2 -2
  30. package/dist/web/ui/assets/{Schedules-BQwE1hP5.js.map → Schedules-BZKhm9R7.js.map} +1 -1
  31. package/dist/web/ui/assets/{Settings-26SF-okR.js → Settings-Hii-5oku.js} +2 -2
  32. package/dist/web/ui/assets/{Settings-26SF-okR.js.map → Settings-Hii-5oku.js.map} +1 -1
  33. package/dist/web/ui/assets/Skills-BHJp2CgD.js +17 -0
  34. package/dist/web/ui/assets/Skills-BHJp2CgD.js.map +1 -0
  35. package/dist/web/ui/assets/{Tasks-DbwRozzx.js → Tasks-D36pqkro.js} +2 -2
  36. package/dist/web/ui/assets/{Tasks-DbwRozzx.js.map → Tasks-D36pqkro.js.map} +1 -1
  37. package/dist/web/ui/assets/{Usage-i_q6Ri4s.js → Usage-CmjaYrsT.js} +2 -2
  38. package/dist/web/ui/assets/{Usage-i_q6Ri4s.js.map → Usage-CmjaYrsT.js.map} +1 -1
  39. package/dist/web/ui/assets/{Workspace-ZR5syf-9.js → Workspace-BYLf-wTJ.js} +2 -2
  40. package/dist/web/ui/assets/{Workspace-ZR5syf-9.js.map → Workspace-BYLf-wTJ.js.map} +1 -1
  41. package/dist/web/ui/assets/{activity-CIP1IzSg.js → activity-MOTqH8zM.js} +2 -2
  42. package/dist/web/ui/assets/{activity-CIP1IzSg.js.map → activity-MOTqH8zM.js.map} +1 -1
  43. package/dist/web/ui/assets/{alert-dialog-CW-j2nG4.js → alert-dialog-MbYSbZx5.js} +2 -2
  44. package/dist/web/ui/assets/{alert-dialog-CW-j2nG4.js.map → alert-dialog-MbYSbZx5.js.map} +1 -1
  45. package/dist/web/ui/assets/{arrow-left-D2YO-iMS.js → arrow-left-CtqQsBC6.js} +2 -2
  46. package/dist/web/ui/assets/{arrow-left-D2YO-iMS.js.map → arrow-left-CtqQsBC6.js.map} +1 -1
  47. package/dist/web/ui/assets/{avatar-BLsf3GhK.js → avatar-BIYaY7pR.js} +2 -2
  48. package/dist/web/ui/assets/{avatar-BLsf3GhK.js.map → avatar-BIYaY7pR.js.map} +1 -1
  49. package/dist/web/ui/assets/{badge-DfDJNUtd.js → badge-CUJiWF1y.js} +2 -2
  50. package/dist/web/ui/assets/{badge-DfDJNUtd.js.map → badge-CUJiWF1y.js.map} +1 -1
  51. package/dist/web/ui/assets/{button-TaFPR-zy.js → button-CNasMlFE.js} +2 -2
  52. package/dist/web/ui/assets/{button-TaFPR-zy.js.map → button-CNasMlFE.js.map} +1 -1
  53. package/dist/web/ui/assets/{card-DAYo4Zl5.js → card-BdsEOP7t.js} +2 -2
  54. package/dist/web/ui/assets/{card-DAYo4Zl5.js.map → card-BdsEOP7t.js.map} +1 -1
  55. package/dist/web/ui/assets/{chevron-down-CQi0yuay.js → chevron-down-CB9J_vvZ.js} +2 -2
  56. package/dist/web/ui/assets/{chevron-down-CQi0yuay.js.map → chevron-down-CB9J_vvZ.js.map} +1 -1
  57. package/dist/web/ui/assets/{circle-check-DweDcOkA.js → circle-check-DvGSe1uZ.js} +2 -2
  58. package/dist/web/ui/assets/{circle-check-DweDcOkA.js.map → circle-check-DvGSe1uZ.js.map} +1 -1
  59. package/dist/web/ui/assets/{circle-x-BmL20etA.js → circle-x-CyaGJ_BM.js} +2 -2
  60. package/dist/web/ui/assets/{circle-x-BmL20etA.js.map → circle-x-CyaGJ_BM.js.map} +1 -1
  61. package/dist/web/ui/assets/{dialog-DovgkMhT.js → dialog-Bd1rELXb.js} +2 -2
  62. package/dist/web/ui/assets/{dialog-DovgkMhT.js.map → dialog-Bd1rELXb.js.map} +1 -1
  63. package/dist/web/ui/assets/{download-_QBatDio.js → download-C8RvlFqO.js} +2 -2
  64. package/dist/web/ui/assets/{download-_QBatDio.js.map → download-C8RvlFqO.js.map} +1 -1
  65. package/dist/web/ui/assets/{eye-Wpgtfmgw.js → eye-BJ0NucMz.js} +2 -2
  66. package/dist/web/ui/assets/{eye-Wpgtfmgw.js.map → eye-BJ0NucMz.js.map} +1 -1
  67. package/dist/web/ui/assets/{file-text-2EGFNyc1.js → file-text-BWWBuD_N.js} +2 -2
  68. package/dist/web/ui/assets/{file-text-2EGFNyc1.js.map → file-text-BWWBuD_N.js.map} +1 -1
  69. package/dist/web/ui/assets/{folder-open-C-OiZn9P.js → folder-open-BwjemFy7.js} +2 -2
  70. package/dist/web/ui/assets/{folder-open-C-OiZn9P.js.map → folder-open-BwjemFy7.js.map} +1 -1
  71. package/dist/web/ui/assets/{git-branch-BT9gCKgG.js → git-branch-D9JVASpC.js} +2 -2
  72. package/dist/web/ui/assets/{git-branch-BT9gCKgG.js.map → git-branch-D9JVASpC.js.map} +1 -1
  73. package/dist/web/ui/assets/{index-BhxU0YlT.js → index-C3YiF4qv.js} +6 -6
  74. package/dist/web/ui/assets/index-C3YiF4qv.js.map +1 -0
  75. package/dist/web/ui/assets/{index-CUT6Fr2C.js → index-CaqLZNof.js} +2 -2
  76. package/dist/web/ui/assets/{index-CUT6Fr2C.js.map → index-CaqLZNof.js.map} +1 -1
  77. package/dist/web/ui/assets/index-CuhiuVab.css +1 -0
  78. package/dist/web/ui/assets/{input-L1uz5xAQ.js → input-CH3dmo9r.js} +2 -2
  79. package/dist/web/ui/assets/{input-L1uz5xAQ.js.map → input-CH3dmo9r.js.map} +1 -1
  80. package/dist/web/ui/assets/{loader-circle-BTFgt3hG.js → loader-circle-DbYKk0_Q.js} +2 -2
  81. package/dist/web/ui/assets/{loader-circle-BTFgt3hG.js.map → loader-circle-DbYKk0_Q.js.map} +1 -1
  82. package/dist/web/ui/assets/{pencil-uxK07iYy.js → pencil-gNDEMhav.js} +2 -2
  83. package/dist/web/ui/assets/{pencil-uxK07iYy.js.map → pencil-gNDEMhav.js.map} +1 -1
  84. package/dist/web/ui/assets/{plus-DcWFYr4m.js → plus-7rbHkByr.js} +2 -2
  85. package/dist/web/ui/assets/{plus-DcWFYr4m.js.map → plus-7rbHkByr.js.map} +1 -1
  86. package/dist/web/ui/assets/{power-DVIqVIMj.js → power-BS7gCDWs.js} +2 -2
  87. package/dist/web/ui/assets/{power-DVIqVIMj.js.map → power-BS7gCDWs.js.map} +1 -1
  88. package/dist/web/ui/assets/{progress-DMwOdxli.js → progress-ZzhsBV2v.js} +2 -2
  89. package/dist/web/ui/assets/{progress-DMwOdxli.js.map → progress-ZzhsBV2v.js.map} +1 -1
  90. package/dist/web/ui/assets/{search-D1OOxb1X.js → search-BZsbhO0B.js} +2 -2
  91. package/dist/web/ui/assets/{search-D1OOxb1X.js.map → search-BZsbhO0B.js.map} +1 -1
  92. package/dist/web/ui/assets/{select-Dnx_bUgy.js → select-vRSgBrHz.js} +2 -2
  93. package/dist/web/ui/assets/{select-Dnx_bUgy.js.map → select-vRSgBrHz.js.map} +1 -1
  94. package/dist/web/ui/assets/{send-D4uxqmyH.js → send-BkyTIUtJ.js} +2 -2
  95. package/dist/web/ui/assets/{send-D4uxqmyH.js.map → send-BkyTIUtJ.js.map} +1 -1
  96. package/dist/web/ui/assets/{sparkles-DLSJA4xU.js → sparkles-DcP24GEL.js} +2 -2
  97. package/dist/web/ui/assets/{sparkles-DLSJA4xU.js.map → sparkles-DcP24GEL.js.map} +1 -1
  98. package/dist/web/ui/assets/{switch-CvDDbCUA.js → switch-LRN9wWy2.js} +2 -2
  99. package/dist/web/ui/assets/{switch-CvDDbCUA.js.map → switch-LRN9wWy2.js.map} +1 -1
  100. package/dist/web/ui/assets/{terminal-DI3J3W_z.js → terminal-CWG62zdD.js} +2 -2
  101. package/dist/web/ui/assets/{terminal-DI3J3W_z.js.map → terminal-CWG62zdD.js.map} +1 -1
  102. package/dist/web/ui/assets/{textarea-CXLsr8tf.js → textarea-CXh3tmJ1.js} +2 -2
  103. package/dist/web/ui/assets/{textarea-CXLsr8tf.js.map → textarea-CXh3tmJ1.js.map} +1 -1
  104. package/dist/web/ui/assets/{zap-C-0oH5gt.js → zap-BEfqVtvZ.js} +2 -2
  105. package/dist/web/ui/assets/{zap-C-0oH5gt.js.map → zap-BEfqVtvZ.js.map} +1 -1
  106. package/dist/web/ui/index.html +2 -2
  107. package/package.json +9 -4
  108. package/dist/web/ui/assets/Skills-DANyYK_d.js +0 -7
  109. package/dist/web/ui/assets/Skills-DANyYK_d.js.map +0 -1
  110. package/dist/web/ui/assets/index-BhxU0YlT.js.map +0 -1
  111. package/dist/web/ui/assets/index-DOw1nKre.css +0 -1
  112. package/dist/web/ui/sw.js.map +0 -1
  113. package/dist/web/ui/workbox-0bb07689.js +0 -3
  114. package/dist/web/ui/workbox-0bb07689.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Dashboard-B81ollv8.js","sources":["../../src/pages/Dashboard.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport {\n Activity,\n Zap,\n Brain,\n Cpu,\n Clock,\n CheckCircle2,\n XCircle,\n} from \"lucide-react\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { cn } from \"@/lib/utils\";\nimport { formatUptime, formatTokens } from \"@/lib/utils\";\nimport api, { type AgentStatus } from \"@/lib/api\";\n\nconst fadeUp = {\n hidden: { opacity: 0, y: 12 },\n visible: (i: number) => ({\n opacity: 1,\n y: 0,\n transition: { delay: i * 0.07, duration: 0.35, ease: \"easeOut\" as const },\n }),\n};\n\nfunction Skeleton({ className }: { className?: string }) {\n return (\n <div\n className={cn(\n \"animate-pulse rounded-lg bg-muted\",\n className\n )}\n />\n );\n}\n\nfunction StatCard({\n icon: Icon,\n label,\n children,\n index,\n glow,\n}: {\n icon: React.ElementType;\n label: string;\n children: React.ReactNode;\n index: number;\n glow?: boolean;\n}) {\n return (\n <motion.div\n custom={index}\n variants={fadeUp}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <Card className={cn(glow && \"mercury-glow-sm\")}>\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">\n {label}\n </CardTitle>\n <Icon className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>{children}</CardContent>\n </Card>\n </motion.div>\n );\n}\n\nexport function DashboardPage() {\n const [data, setData] = useState<AgentStatus | null>(null);\n const [error, setError] = useState(\"\");\n\n useEffect(() => {\n api.status\n .get()\n .then(setData)\n .catch((err: Error) => setError(err.message));\n }, []);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-8\">\n <p className=\"text-sm text-destructive\">{error}</p>\n </div>\n );\n }\n\n if (!data) {\n return (\n <div className=\"space-y-6 p-6 lg:p-8\">\n <div className=\"space-y-1\">\n <Skeleton className=\"h-8 w-40\" />\n <Skeleton className=\"h-4 w-56\" />\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {Array.from({ length: 4 }).map((_, i) => (\n <Skeleton key={i} className=\"h-[120px]\" />\n ))}\n </div>\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Skeleton className=\"h-[200px]\" />\n <Skeleton className=\"h-[200px]\" />\n </div>\n </div>\n );\n }\n\n const tokenPct = data.tokens.dailyBudget\n ? Math.min(\n Math.round((data.tokens.dailyUsed / data.tokens.dailyBudget) * 100),\n 100\n )\n : 0;\n\n const providerEntries = Object.entries(data.providers);\n const activeProviders = providerEntries.filter(([, v]) => v.enabled).length;\n const memoryTypes = Object.entries(data.memory.byType);\n\n return (\n <div className=\"space-y-6 p-6 lg:p-8\">\n {/* Header */}\n <motion.div\n initial={{ opacity: 0, y: -8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3 }}\n >\n <h1 className=\"text-2xl font-bold tracking-tight\">Status</h1>\n <p className=\"text-sm text-muted-foreground\">\n Agent is{\" \"}\n <span\n className={cn(\n \"font-medium\",\n data.running ? \"text-emerald-500\" : \"text-muted-foreground\"\n )}\n >\n {data.state}\n </span>\n </p>\n </motion.div>\n\n {/* Hero Stats */}\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <StatCard icon={Clock} label=\"Uptime\" index={0} glow>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatUptime(data.uptime)}\n </p>\n </StatCard>\n\n <StatCard icon={Zap} label=\"Tokens Used\" index={1}>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatTokens(data.tokens.dailyUsed)}\n <span className=\"ml-1 text-sm font-normal text-muted-foreground\">\n / {formatTokens(data.tokens.dailyBudget)}\n </span>\n </p>\n <Progress value={tokenPct} className=\"mt-3\" />\n </StatCard>\n\n <StatCard icon={Brain} label=\"Total Memories\" index={2}>\n <p className=\"text-2xl font-bold tabular-nums\">\n {data.memory.total.toLocaleString()}\n </p>\n </StatCard>\n\n <StatCard icon={Cpu} label=\"Active Providers\" index={3}>\n <p className=\"text-2xl font-bold tabular-nums\">\n {activeProviders}\n <span className=\"ml-1 text-sm font-normal text-muted-foreground\">\n / {providerEntries.length}\n </span>\n </p>\n </StatCard>\n </div>\n\n {/* Detail Cards */}\n <div className=\"grid gap-4 md:grid-cols-2\">\n {/* Memory by Type */}\n <motion.div\n custom={4}\n variants={fadeUp}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Brain className=\"h-4 w-4\" />\n Memory by Type\n </CardTitle>\n </CardHeader>\n <CardContent>\n {memoryTypes.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n No memories stored yet.\n </p>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {memoryTypes.map(([type, count]) => (\n <div\n key={type}\n className=\"flex items-center justify-between\"\n >\n <Badge variant=\"secondary\" className=\"capitalize\">\n {type}\n </Badge>\n <span className=\"text-sm font-medium tabular-nums\">\n {count.toLocaleString()}\n </span>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </motion.div>\n\n {/* Provider Status */}\n <motion.div\n custom={5}\n variants={fadeUp}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Activity className=\"h-4 w-4\" />\n Providers\n </CardTitle>\n </CardHeader>\n <CardContent>\n {providerEntries.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n No providers configured.\n </p>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {providerEntries.map(([name, info]) => (\n <div\n key={name}\n className=\"flex items-center justify-between\"\n >\n <span className=\"text-sm font-medium\">{name}</span>\n {info.enabled ? (\n <Badge variant=\"success\" className=\"gap-1\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Enabled\n </Badge>\n ) : (\n <Badge variant=\"outline\" className=\"gap-1 text-muted-foreground\">\n <XCircle className=\"h-3 w-3\" />\n Disabled\n </Badge>\n )}\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </motion.div>\n </div>\n </div>\n );\n}\n"],"names":["fadeUp","i","Skeleton","className","jsx","cn","StatCard","Icon","label","children","index","glow","motion","Card","jsxs","CardHeader","CardTitle","CardContent","DashboardPage","data","setData","useState","error","setError","useEffect","api","err","_","tokenPct","providerEntries","activeProviders","v","memoryTypes","Clock","Zap","formatTokens","Progress","Brain","Cpu","type","count","Badge","Activity","name","info","CheckCircle2","XCircle"],"mappings":"glBAkBA,MAAMA,EAAS,CACb,OAAQ,CAAE,QAAS,EAAG,EAAG,EAAA,EACzB,QAAUC,IAAe,CACvB,QAAS,EACT,EAAG,EACH,WAAY,CAAE,MAAOA,EAAI,IAAM,SAAU,IAAM,KAAM,SAAA,CAAmB,EAE5E,EAEA,SAASC,EAAS,CAAE,UAAAC,GAAqC,CACvD,OACEC,EAAAA,IAAC,MAAA,CACC,UAAWC,EACT,oCACAF,CAAA,CACF,CAAA,CAGN,CAEA,SAASG,EAAS,CAChB,KAAMC,EACN,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,KAAAC,CACF,EAMG,CACD,OACEP,EAAAA,IAACQ,EAAO,IAAP,CACC,OAAQF,EACR,SAAUV,EACV,QAAQ,SACR,QAAQ,UAER,gBAACa,EAAA,CAAK,UAAWR,EAAGM,GAAQ,iBAAiB,EAC3C,SAAA,CAAAG,EAAAA,KAACC,EAAA,CAAW,UAAU,kDACpB,SAAA,CAAAX,EAAAA,IAACY,EAAA,CAAU,UAAU,4CAClB,SAAAR,EACH,EACAJ,EAAAA,IAACG,EAAA,CAAK,UAAU,+BAAA,CAAgC,CAAA,EAClD,EACAH,MAACa,GAAa,SAAAR,CAAA,CAAS,CAAA,CAAA,CACzB,CAAA,CAAA,CAGN,CAEO,SAASS,GAAgB,CAC9B,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAA6B,IAAI,EACnD,CAACC,EAAOC,CAAQ,EAAIF,EAAAA,SAAS,EAAE,EASrC,GAPAG,EAAAA,UAAU,IAAM,CACdC,EAAI,OACD,IAAA,EACA,KAAKL,CAAO,EACZ,MAAOM,GAAeH,EAASG,EAAI,OAAO,CAAC,CAChD,EAAG,CAAA,CAAE,EAEDJ,EACF,OACElB,EAAAA,IAAC,OAAI,UAAU,8CACb,eAAC,IAAA,CAAE,UAAU,2BAA4B,SAAAkB,CAAA,CAAM,CAAA,CACjD,EAIJ,GAAI,CAACH,EACH,OACEL,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAV,EAAAA,IAACF,EAAA,CAAS,UAAU,UAAA,CAAW,EAC/BE,EAAAA,IAACF,EAAA,CAAS,UAAU,UAAA,CAAW,CAAA,EACjC,EACAE,MAAC,OAAI,UAAU,2CACZ,eAAM,KAAK,CAAE,OAAQ,CAAA,CAAG,EAAE,IAAI,CAACuB,EAAG1B,IACjCG,EAAAA,IAACF,GAAiB,UAAU,WAAA,EAAbD,CAAyB,CACzC,EACH,EACAa,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAV,EAAAA,IAACF,EAAA,CAAS,UAAU,WAAA,CAAY,EAChCE,EAAAA,IAACF,EAAA,CAAS,UAAU,WAAA,CAAY,CAAA,CAAA,CAClC,CAAA,EACF,EAIJ,MAAM0B,EAAWT,EAAK,OAAO,YACzB,KAAK,IACH,KAAK,MAAOA,EAAK,OAAO,UAAYA,EAAK,OAAO,YAAe,GAAG,EAClE,GAAA,EAEF,EAEEU,EAAkB,OAAO,QAAQV,EAAK,SAAS,EAC/CW,EAAkBD,EAAgB,OAAO,CAAC,CAAA,CAAGE,CAAC,IAAMA,EAAE,OAAO,EAAE,OAC/DC,EAAc,OAAO,QAAQb,EAAK,OAAO,MAAM,EAErD,OACEL,EAAAA,KAAC,MAAA,CAAI,UAAU,uBAEb,SAAA,CAAAA,EAAAA,KAACF,EAAO,IAAP,CACC,QAAS,CAAE,QAAS,EAAG,EAAG,EAAA,EAC1B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAA,EAC1B,WAAY,CAAE,SAAU,EAAA,EAExB,SAAA,CAAAR,EAAAA,IAAC,KAAA,CAAG,UAAU,oCAAoC,SAAA,SAAM,EACxDU,EAAAA,KAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,CAAA,WAClC,IACTV,EAAAA,IAAC,OAAA,CACC,UAAWC,EACT,cACAc,EAAK,QAAU,mBAAqB,uBAAA,EAGrC,SAAAA,EAAK,KAAA,CAAA,CACR,CAAA,CACF,CAAA,CAAA,CAAA,EAIFL,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACb,SAAA,CAAAV,MAACE,GAAS,KAAM2B,EAAO,MAAM,SAAS,MAAO,EAAG,KAAI,GAClD,SAAA7B,EAAAA,IAAC,KAAE,UAAU,kCACV,WAAae,EAAK,MAAM,EAC3B,EACF,SAECb,EAAA,CAAS,KAAM4B,EAAK,MAAM,cAAc,MAAO,EAC9C,SAAA,CAAApB,EAAAA,KAAC,IAAA,CAAE,UAAU,kCACV,SAAA,CAAAqB,EAAahB,EAAK,OAAO,SAAS,EACnCL,EAAAA,KAAC,OAAA,CAAK,UAAU,iDAAiD,SAAA,CAAA,KAC5DqB,EAAahB,EAAK,OAAO,WAAW,CAAA,CAAA,CACzC,CAAA,EACF,EACAf,EAAAA,IAACgC,EAAA,CAAS,MAAOR,EAAU,UAAU,MAAA,CAAO,CAAA,EAC9C,QAECtB,EAAA,CAAS,KAAM+B,EAAO,MAAM,iBAAiB,MAAO,EACnD,SAAAjC,EAAAA,IAAC,IAAA,CAAE,UAAU,kCACV,SAAAe,EAAK,OAAO,MAAM,iBACrB,EACF,EAEAf,EAAAA,IAACE,EAAA,CAAS,KAAMgC,EAAK,MAAM,mBAAmB,MAAO,EACnD,SAAAxB,EAAAA,KAAC,IAAA,CAAE,UAAU,kCACV,SAAA,CAAAgB,EACDhB,EAAAA,KAAC,OAAA,CAAK,UAAU,iDAAiD,SAAA,CAAA,KAC5De,EAAgB,MAAA,CAAA,CACrB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,EAGAf,EAAAA,KAAC,MAAA,CAAI,UAAU,4BAEb,SAAA,CAAAV,EAAAA,IAACQ,EAAO,IAAP,CACC,OAAQ,EACR,SAAUZ,EACV,QAAQ,SACR,QAAQ,UAER,gBAACa,EAAA,CACC,SAAA,CAAAT,MAACW,EAAA,CACC,SAAAD,EAAAA,KAACE,EAAA,CAAU,UAAU,oCACnB,SAAA,CAAAZ,EAAAA,IAACiC,EAAA,CAAM,UAAU,SAAA,CAAU,EAAE,gBAAA,CAAA,CAE/B,CAAA,CACF,EACAjC,EAAAA,IAACa,GACE,SAAAe,EAAY,SAAW,EACtB5B,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,0BAE7C,EAEAA,MAAC,MAAA,CAAI,UAAU,sBACZ,SAAA4B,EAAY,IAAI,CAAC,CAACO,EAAMC,CAAK,IAC5B1B,EAAAA,KAAC,MAAA,CAEC,UAAU,oCAEV,SAAA,CAAAV,MAACqC,EAAA,CAAM,QAAQ,YAAY,UAAU,aAClC,SAAAF,EACH,QACC,OAAA,CAAK,UAAU,mCACb,SAAAC,EAAM,gBAAe,CACxB,CAAA,CAAA,EARKD,CAAA,CAUR,EACH,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,EAIFnC,EAAAA,IAACQ,EAAO,IAAP,CACC,OAAQ,EACR,SAAUZ,EACV,QAAQ,SACR,QAAQ,UAER,gBAACa,EAAA,CACC,SAAA,CAAAT,MAACW,EAAA,CACC,SAAAD,EAAAA,KAACE,EAAA,CAAU,UAAU,oCACnB,SAAA,CAAAZ,EAAAA,IAACsC,EAAA,CAAS,UAAU,SAAA,CAAU,EAAE,WAAA,CAAA,CAElC,CAAA,CACF,EACAtC,EAAAA,IAACa,GACE,SAAAY,EAAgB,SAAW,EAC1BzB,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,2BAE7C,EAEAA,MAAC,MAAA,CAAI,UAAU,sBACZ,SAAAyB,EAAgB,IAAI,CAAC,CAACc,EAAMC,CAAI,IAC/B9B,EAAAA,KAAC,MAAA,CAEC,UAAU,oCAEV,SAAA,CAAAV,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAuB,SAAAuC,EAAK,EAC3CC,EAAK,QACJ9B,EAAAA,KAAC2B,GAAM,QAAQ,UAAU,UAAU,QACjC,SAAA,CAAArC,EAAAA,IAACyC,EAAA,CAAa,UAAU,SAAA,CAAU,EAAE,SAAA,EAEtC,EAEA/B,EAAAA,KAAC2B,EAAA,CAAM,QAAQ,UAAU,UAAU,8BACjC,SAAA,CAAArC,EAAAA,IAAC0C,EAAA,CAAQ,UAAU,SAAA,CAAU,EAAE,UAAA,CAAA,CAEjC,CAAA,CAAA,EAbGH,CAAA,CAgBR,EACH,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"Dashboard-1rlAqQ-Y.js","sources":["../../src/pages/Dashboard.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport {\n Activity,\n Zap,\n Brain,\n Cpu,\n Clock,\n CheckCircle2,\n XCircle,\n} from \"lucide-react\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { cn } from \"@/lib/utils\";\nimport { formatUptime, formatTokens } from \"@/lib/utils\";\nimport api, { type AgentStatus } from \"@/lib/api\";\n\nconst fadeUp = {\n hidden: { opacity: 0, y: 12 },\n visible: (i: number) => ({\n opacity: 1,\n y: 0,\n transition: { delay: i * 0.07, duration: 0.35, ease: \"easeOut\" as const },\n }),\n};\n\nfunction Skeleton({ className }: { className?: string }) {\n return (\n <div\n className={cn(\n \"animate-pulse rounded-lg bg-muted\",\n className\n )}\n />\n );\n}\n\nfunction StatCard({\n icon: Icon,\n label,\n children,\n index,\n glow,\n}: {\n icon: React.ElementType;\n label: string;\n children: React.ReactNode;\n index: number;\n glow?: boolean;\n}) {\n return (\n <motion.div\n custom={index}\n variants={fadeUp}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <Card className={cn(glow && \"mercury-glow-sm\")}>\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <CardTitle className=\"text-sm font-medium text-muted-foreground\">\n {label}\n </CardTitle>\n <Icon className=\"h-4 w-4 text-muted-foreground\" />\n </CardHeader>\n <CardContent>{children}</CardContent>\n </Card>\n </motion.div>\n );\n}\n\nexport function DashboardPage() {\n const [data, setData] = useState<AgentStatus | null>(null);\n const [error, setError] = useState(\"\");\n\n useEffect(() => {\n api.status\n .get()\n .then(setData)\n .catch((err: Error) => setError(err.message));\n }, []);\n\n if (error) {\n return (\n <div className=\"flex h-full items-center justify-center p-8\">\n <p className=\"text-sm text-destructive\">{error}</p>\n </div>\n );\n }\n\n if (!data) {\n return (\n <div className=\"space-y-6 p-6 lg:p-8\">\n <div className=\"space-y-1\">\n <Skeleton className=\"h-8 w-40\" />\n <Skeleton className=\"h-4 w-56\" />\n </div>\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {Array.from({ length: 4 }).map((_, i) => (\n <Skeleton key={i} className=\"h-[120px]\" />\n ))}\n </div>\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Skeleton className=\"h-[200px]\" />\n <Skeleton className=\"h-[200px]\" />\n </div>\n </div>\n );\n }\n\n const tokenPct = data.tokens.dailyBudget\n ? Math.min(\n Math.round((data.tokens.dailyUsed / data.tokens.dailyBudget) * 100),\n 100\n )\n : 0;\n\n const providerEntries = Object.entries(data.providers);\n const activeProviders = providerEntries.filter(([, v]) => v.enabled).length;\n const memoryTypes = Object.entries(data.memory.byType);\n\n return (\n <div className=\"space-y-6 p-6 lg:p-8\">\n {/* Header */}\n <motion.div\n initial={{ opacity: 0, y: -8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3 }}\n >\n <h1 className=\"text-2xl font-bold tracking-tight\">Status</h1>\n <p className=\"text-sm text-muted-foreground\">\n Agent is{\" \"}\n <span\n className={cn(\n \"font-medium\",\n data.running ? \"text-emerald-500\" : \"text-muted-foreground\"\n )}\n >\n {data.state}\n </span>\n </p>\n </motion.div>\n\n {/* Hero Stats */}\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <StatCard icon={Clock} label=\"Uptime\" index={0} glow>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatUptime(data.uptime)}\n </p>\n </StatCard>\n\n <StatCard icon={Zap} label=\"Tokens Used\" index={1}>\n <p className=\"text-2xl font-bold tabular-nums\">\n {formatTokens(data.tokens.dailyUsed)}\n <span className=\"ml-1 text-sm font-normal text-muted-foreground\">\n / {formatTokens(data.tokens.dailyBudget)}\n </span>\n </p>\n <Progress value={tokenPct} className=\"mt-3\" />\n </StatCard>\n\n <StatCard icon={Brain} label=\"Total Memories\" index={2}>\n <p className=\"text-2xl font-bold tabular-nums\">\n {data.memory.total.toLocaleString()}\n </p>\n </StatCard>\n\n <StatCard icon={Cpu} label=\"Active Providers\" index={3}>\n <p className=\"text-2xl font-bold tabular-nums\">\n {activeProviders}\n <span className=\"ml-1 text-sm font-normal text-muted-foreground\">\n / {providerEntries.length}\n </span>\n </p>\n </StatCard>\n </div>\n\n {/* Detail Cards */}\n <div className=\"grid gap-4 md:grid-cols-2\">\n {/* Memory by Type */}\n <motion.div\n custom={4}\n variants={fadeUp}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Brain className=\"h-4 w-4\" />\n Memory by Type\n </CardTitle>\n </CardHeader>\n <CardContent>\n {memoryTypes.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n No memories stored yet.\n </p>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {memoryTypes.map(([type, count]) => (\n <div\n key={type}\n className=\"flex items-center justify-between\"\n >\n <Badge variant=\"secondary\" className=\"capitalize\">\n {type}\n </Badge>\n <span className=\"text-sm font-medium tabular-nums\">\n {count.toLocaleString()}\n </span>\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </motion.div>\n\n {/* Provider Status */}\n <motion.div\n custom={5}\n variants={fadeUp}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Activity className=\"h-4 w-4\" />\n Providers\n </CardTitle>\n </CardHeader>\n <CardContent>\n {providerEntries.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n No providers configured.\n </p>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {providerEntries.map(([name, info]) => (\n <div\n key={name}\n className=\"flex items-center justify-between\"\n >\n <span className=\"text-sm font-medium\">{name}</span>\n {info.enabled ? (\n <Badge variant=\"success\" className=\"gap-1\">\n <CheckCircle2 className=\"h-3 w-3\" />\n Enabled\n </Badge>\n ) : (\n <Badge variant=\"outline\" className=\"gap-1 text-muted-foreground\">\n <XCircle className=\"h-3 w-3\" />\n Disabled\n </Badge>\n )}\n </div>\n ))}\n </div>\n )}\n </CardContent>\n </Card>\n </motion.div>\n </div>\n </div>\n );\n}\n"],"names":["fadeUp","i","Skeleton","className","jsx","cn","StatCard","Icon","label","children","index","glow","motion","Card","jsxs","CardHeader","CardTitle","CardContent","DashboardPage","data","setData","useState","error","setError","useEffect","api","err","_","tokenPct","providerEntries","activeProviders","v","memoryTypes","Clock","Zap","formatTokens","Progress","Brain","Cpu","type","count","Badge","Activity","name","info","CheckCircle2","XCircle"],"mappings":"glBAkBA,MAAMA,EAAS,CACb,OAAQ,CAAE,QAAS,EAAG,EAAG,EAAA,EACzB,QAAUC,IAAe,CACvB,QAAS,EACT,EAAG,EACH,WAAY,CAAE,MAAOA,EAAI,IAAM,SAAU,IAAM,KAAM,SAAA,CAAmB,EAE5E,EAEA,SAASC,EAAS,CAAE,UAAAC,GAAqC,CACvD,OACEC,EAAAA,IAAC,MAAA,CACC,UAAWC,EACT,oCACAF,CAAA,CACF,CAAA,CAGN,CAEA,SAASG,EAAS,CAChB,KAAMC,EACN,MAAAC,EACA,SAAAC,EACA,MAAAC,EACA,KAAAC,CACF,EAMG,CACD,OACEP,EAAAA,IAACQ,EAAO,IAAP,CACC,OAAQF,EACR,SAAUV,EACV,QAAQ,SACR,QAAQ,UAER,gBAACa,EAAA,CAAK,UAAWR,EAAGM,GAAQ,iBAAiB,EAC3C,SAAA,CAAAG,EAAAA,KAACC,EAAA,CAAW,UAAU,kDACpB,SAAA,CAAAX,EAAAA,IAACY,EAAA,CAAU,UAAU,4CAClB,SAAAR,EACH,EACAJ,EAAAA,IAACG,EAAA,CAAK,UAAU,+BAAA,CAAgC,CAAA,EAClD,EACAH,MAACa,GAAa,SAAAR,CAAA,CAAS,CAAA,CAAA,CACzB,CAAA,CAAA,CAGN,CAEO,SAASS,GAAgB,CAC9B,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAA6B,IAAI,EACnD,CAACC,EAAOC,CAAQ,EAAIF,EAAAA,SAAS,EAAE,EASrC,GAPAG,EAAAA,UAAU,IAAM,CACdC,EAAI,OACD,IAAA,EACA,KAAKL,CAAO,EACZ,MAAOM,GAAeH,EAASG,EAAI,OAAO,CAAC,CAChD,EAAG,CAAA,CAAE,EAEDJ,EACF,OACElB,EAAAA,IAAC,OAAI,UAAU,8CACb,eAAC,IAAA,CAAE,UAAU,2BAA4B,SAAAkB,CAAA,CAAM,CAAA,CACjD,EAIJ,GAAI,CAACH,EACH,OACEL,EAAAA,KAAC,MAAA,CAAI,UAAU,uBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAV,EAAAA,IAACF,EAAA,CAAS,UAAU,UAAA,CAAW,EAC/BE,EAAAA,IAACF,EAAA,CAAS,UAAU,UAAA,CAAW,CAAA,EACjC,EACAE,MAAC,OAAI,UAAU,2CACZ,eAAM,KAAK,CAAE,OAAQ,CAAA,CAAG,EAAE,IAAI,CAACuB,EAAG1B,IACjCG,EAAAA,IAACF,GAAiB,UAAU,WAAA,EAAbD,CAAyB,CACzC,EACH,EACAa,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAV,EAAAA,IAACF,EAAA,CAAS,UAAU,WAAA,CAAY,EAChCE,EAAAA,IAACF,EAAA,CAAS,UAAU,WAAA,CAAY,CAAA,CAAA,CAClC,CAAA,EACF,EAIJ,MAAM0B,EAAWT,EAAK,OAAO,YACzB,KAAK,IACH,KAAK,MAAOA,EAAK,OAAO,UAAYA,EAAK,OAAO,YAAe,GAAG,EAClE,GAAA,EAEF,EAEEU,EAAkB,OAAO,QAAQV,EAAK,SAAS,EAC/CW,EAAkBD,EAAgB,OAAO,CAAC,CAAA,CAAGE,CAAC,IAAMA,EAAE,OAAO,EAAE,OAC/DC,EAAc,OAAO,QAAQb,EAAK,OAAO,MAAM,EAErD,OACEL,EAAAA,KAAC,MAAA,CAAI,UAAU,uBAEb,SAAA,CAAAA,EAAAA,KAACF,EAAO,IAAP,CACC,QAAS,CAAE,QAAS,EAAG,EAAG,EAAA,EAC1B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAA,EAC1B,WAAY,CAAE,SAAU,EAAA,EAExB,SAAA,CAAAR,EAAAA,IAAC,KAAA,CAAG,UAAU,oCAAoC,SAAA,SAAM,EACxDU,EAAAA,KAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,CAAA,WAClC,IACTV,EAAAA,IAAC,OAAA,CACC,UAAWC,EACT,cACAc,EAAK,QAAU,mBAAqB,uBAAA,EAGrC,SAAAA,EAAK,KAAA,CAAA,CACR,CAAA,CACF,CAAA,CAAA,CAAA,EAIFL,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACb,SAAA,CAAAV,MAACE,GAAS,KAAM2B,EAAO,MAAM,SAAS,MAAO,EAAG,KAAI,GAClD,SAAA7B,EAAAA,IAAC,KAAE,UAAU,kCACV,WAAae,EAAK,MAAM,EAC3B,EACF,SAECb,EAAA,CAAS,KAAM4B,EAAK,MAAM,cAAc,MAAO,EAC9C,SAAA,CAAApB,EAAAA,KAAC,IAAA,CAAE,UAAU,kCACV,SAAA,CAAAqB,EAAahB,EAAK,OAAO,SAAS,EACnCL,EAAAA,KAAC,OAAA,CAAK,UAAU,iDAAiD,SAAA,CAAA,KAC5DqB,EAAahB,EAAK,OAAO,WAAW,CAAA,CAAA,CACzC,CAAA,EACF,EACAf,EAAAA,IAACgC,EAAA,CAAS,MAAOR,EAAU,UAAU,MAAA,CAAO,CAAA,EAC9C,QAECtB,EAAA,CAAS,KAAM+B,EAAO,MAAM,iBAAiB,MAAO,EACnD,SAAAjC,EAAAA,IAAC,IAAA,CAAE,UAAU,kCACV,SAAAe,EAAK,OAAO,MAAM,iBACrB,EACF,EAEAf,EAAAA,IAACE,EAAA,CAAS,KAAMgC,EAAK,MAAM,mBAAmB,MAAO,EACnD,SAAAxB,EAAAA,KAAC,IAAA,CAAE,UAAU,kCACV,SAAA,CAAAgB,EACDhB,EAAAA,KAAC,OAAA,CAAK,UAAU,iDAAiD,SAAA,CAAA,KAC5De,EAAgB,MAAA,CAAA,CACrB,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,EAGAf,EAAAA,KAAC,MAAA,CAAI,UAAU,4BAEb,SAAA,CAAAV,EAAAA,IAACQ,EAAO,IAAP,CACC,OAAQ,EACR,SAAUZ,EACV,QAAQ,SACR,QAAQ,UAER,gBAACa,EAAA,CACC,SAAA,CAAAT,MAACW,EAAA,CACC,SAAAD,EAAAA,KAACE,EAAA,CAAU,UAAU,oCACnB,SAAA,CAAAZ,EAAAA,IAACiC,EAAA,CAAM,UAAU,SAAA,CAAU,EAAE,gBAAA,CAAA,CAE/B,CAAA,CACF,EACAjC,EAAAA,IAACa,GACE,SAAAe,EAAY,SAAW,EACtB5B,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,0BAE7C,EAEAA,MAAC,MAAA,CAAI,UAAU,sBACZ,SAAA4B,EAAY,IAAI,CAAC,CAACO,EAAMC,CAAK,IAC5B1B,EAAAA,KAAC,MAAA,CAEC,UAAU,oCAEV,SAAA,CAAAV,MAACqC,EAAA,CAAM,QAAQ,YAAY,UAAU,aAClC,SAAAF,EACH,QACC,OAAA,CAAK,UAAU,mCACb,SAAAC,EAAM,gBAAe,CACxB,CAAA,CAAA,EARKD,CAAA,CAUR,EACH,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,EAIFnC,EAAAA,IAACQ,EAAO,IAAP,CACC,OAAQ,EACR,SAAUZ,EACV,QAAQ,SACR,QAAQ,UAER,gBAACa,EAAA,CACC,SAAA,CAAAT,MAACW,EAAA,CACC,SAAAD,EAAAA,KAACE,EAAA,CAAU,UAAU,oCACnB,SAAA,CAAAZ,EAAAA,IAACsC,EAAA,CAAS,UAAU,SAAA,CAAU,EAAE,WAAA,CAAA,CAElC,CAAA,CACF,EACAtC,EAAAA,IAACa,GACE,SAAAY,EAAgB,SAAW,EAC1BzB,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,2BAE7C,EAEAA,MAAC,MAAA,CAAI,UAAU,sBACZ,SAAAyB,EAAgB,IAAI,CAAC,CAACc,EAAMC,CAAI,IAC/B9B,EAAAA,KAAC,MAAA,CAEC,UAAU,oCAEV,SAAA,CAAAV,EAAAA,IAAC,OAAA,CAAK,UAAU,sBAAuB,SAAAuC,EAAK,EAC3CC,EAAK,QACJ9B,EAAAA,KAAC2B,GAAM,QAAQ,UAAU,UAAU,QACjC,SAAA,CAAArC,EAAAA,IAACyC,EAAA,CAAa,UAAU,SAAA,CAAU,EAAE,SAAA,EAEtC,EAEA/B,EAAAA,KAAC2B,EAAA,CAAM,QAAQ,UAAU,UAAU,8BACjC,SAAA,CAAArC,EAAAA,IAAC0C,EAAA,CAAQ,UAAU,SAAA,CAAU,EAAE,UAAA,CAAA,CAEjC,CAAA,CAAA,EAbGH,CAAA,CAgBR,EACH,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ"}
@@ -1,4 +1,4 @@
1
- import{j as e,m as y,A as B}from"./vendor-motion-Dwx3-JO5.js";import{r}from"./vendor-react-C7pctHW3.js";import{C as k,c as A}from"./card-DAYo4Zl5.js";import{B as b}from"./button-TaFPR-zy.js";import{I as R}from"./input-L1uz5xAQ.js";import{B as ae}from"./badge-DfDJNUtd.js";import{T as re}from"./textarea-CXLsr8tf.js";import{J as oe,K as H,M as O,N as _}from"./vendor-radix-3UdfCgs_.js";import{e as K,c as p,a as j,T as S,h as ie}from"./index-BhxU0YlT.js";import{D as le,a as ne,b as ce,c as de,d as me,e as xe}from"./dialog-DovgkMhT.js";import{A as ue,h as ge,T as he,a as pe,b as fe,c as je,d as ye,e as be,f as ve,g as Ne}from"./alert-dialog-CW-j2nG4.js";import{P as q}from"./plus-DcWFYr4m.js";import{C as $}from"./circle-x-BmL20etA.js";import{L as we}from"./loader-circle-BTFgt3hG.js";import{C as Ce}from"./circle-check-DweDcOkA.js";import"./index-CUT6Fr2C.js";import"./vendor-syntax-xZUI6Op9.js";/**
1
+ import{j as e,m as y,A as B}from"./vendor-motion-Dwx3-JO5.js";import{r}from"./vendor-react-C7pctHW3.js";import{C as k,c as A}from"./card-BdsEOP7t.js";import{B as b}from"./button-CNasMlFE.js";import{I as R}from"./input-CH3dmo9r.js";import{B as ae}from"./badge-CUJiWF1y.js";import{T as re}from"./textarea-CXh3tmJ1.js";import{J as oe,K as H,M as O,N as _}from"./vendor-radix-3UdfCgs_.js";import{e as K,c as p,a as j,T as S,h as ie}from"./index-C3YiF4qv.js";import{D as le,a as ne,b as ce,c as de,d as me,e as xe}from"./dialog-Bd1rELXb.js";import{A as ue,h as ge,T as he,a as pe,b as fe,c as je,d as ye,e as be,f as ve,g as Ne}from"./alert-dialog-MbYSbZx5.js";import{P as q}from"./plus-7rbHkByr.js";import{C as $}from"./circle-x-CyaGJ_BM.js";import{L as we}from"./loader-circle-DbYKk0_Q.js";import{C as Ce}from"./circle-check-DvGSe1uZ.js";import"./index-CaqLZNof.js";import"./vendor-syntax-xZUI6Op9.js";/**
2
2
  * @license lucide-react v0.511.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -9,4 +9,4 @@ import{j as e,m as y,A as B}from"./vendor-motion-Dwx3-JO5.js";import{r}from"./ve
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 ke=[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]],Ae=K("rocket",ke),Se=oe,W=r.forwardRef(({className:s,...a},o)=>e.jsx(H,{ref:o,className:p("inline-flex h-9 items-center justify-center gap-1 border-b border-border bg-transparent p-0 text-muted-foreground",s),...a}));W.displayName=H.displayName;const L=r.forwardRef(({className:s,...a},o)=>e.jsx(O,{ref:o,className:p("inline-flex items-center justify-center whitespace-nowrap px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:text-foreground data-[state=active]:shadow-none",s),...a}));L.displayName=O.displayName;const M=r.forwardRef(({className:s,...a},o)=>e.jsx(_,{ref:o,className:p("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",s),...a}));M.displayName=_.displayName;const Te={hidden:{opacity:0,y:12},visible:s=>({opacity:1,y:0,transition:{delay:s*.05,duration:.3,ease:"easeOut"}}),exit:{opacity:0,y:-8,transition:{duration:.2}}},Pe={visible:{transition:{staggerChildren:.05}}};function Ge({toasts:s}){return e.jsx("div",{className:"fixed bottom-6 right-6 z-50 flex flex-col gap-2",children:e.jsx(B,{children:s.map(a=>e.jsxs(y.div,{initial:{opacity:0,x:40},animate:{opacity:1,x:0},exit:{opacity:0,x:40},className:p("flex items-center gap-2 rounded-lg border px-4 py-3 text-sm shadow-lg backdrop-blur-sm",a.type==="success"?"border-emerald-500/30 bg-emerald-500/10 text-emerald-400":"border-destructive/30 bg-destructive/10 text-destructive"),children:[a.type==="success"?e.jsx(Ce,{className:"h-4 w-4"}):e.jsx($,{className:"h-4 w-4"}),a.message]},a.id))})})}function D({className:s}){return e.jsx("div",{className:p("animate-pulse rounded-lg bg-muted",s)})}function Ee(){return e.jsx(k,{children:e.jsxs(A,{className:"p-5 space-y-3",children:[e.jsx(D,{className:"h-5 w-3/4"}),e.jsx(D,{className:"h-3 w-full"}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(D,{className:"h-3 w-16"}),e.jsx(D,{className:"h-3 w-20"})]})]})})}function Le({importance:s}){const a=s>=8?"Critical":s>=6?"High":s>=4?"Medium":"Low",o=s>=8?"text-red-400 bg-red-500/15":s>=6?"text-amber-400 bg-amber-500/15":s>=4?"text-[#00d4ff] bg-[#00d4ff]/15":"text-muted-foreground bg-muted";return e.jsx("span",{className:p("inline-flex items-center rounded-md px-2 py-0.5 text-xs font-medium",o),children:a})}function Me({item:s,onDelete:a,index:o,kind:i}){return e.jsx(y.div,{custom:o,variants:Te,initial:"hidden",animate:"visible",exit:"exit",layout:!0,children:e.jsx(k,{className:"group transition-colors hover:border-[#00d4ff]/20",children:e.jsx(A,{className:"p-5",children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex-1 min-w-0 space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2.5",children:[i==="goal"?e.jsx(S,{className:"h-4 w-4 text-amber-400 shrink-0"}):e.jsx(V,{className:"h-4 w-4 text-cyan-400 shrink-0"}),e.jsx("h3",{className:"text-sm font-semibold text-foreground leading-tight",children:s.summary})]}),s.detail&&e.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed line-clamp-3",children:s.detail}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3 pt-0.5",children:[s.importance!=null&&e.jsx(Le,{importance:s.importance}),e.jsx("span",{className:"text-xs text-muted-foreground/50",children:ie(s.createdAt)})]})]}),e.jsxs(ue,{children:[e.jsx(ge,{asChild:!0,children:e.jsx(b,{size:"sm",variant:"ghost",className:"opacity-0 group-hover:opacity-100 transition-opacity text-muted-foreground hover:text-destructive shrink-0",children:e.jsx(he,{className:"h-3.5 w-3.5"})})}),e.jsxs(pe,{children:[e.jsxs(fe,{children:[e.jsxs(je,{children:["Delete ",i==="goal"?"Goal":"Project"]}),e.jsxs(ye,{children:["Are you sure you want to delete this"," ",i==="goal"?"goal":"project","? This action cannot be undone."]})]}),e.jsxs(be,{children:[e.jsx(ve,{children:"Cancel"}),e.jsx(Ne,{onClick:()=>a(s.id),className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Delete"})]})]})]})]})})})})}function Ie({open:s,onOpenChange:a,onSubmit:o,submitting:i,kind:c}){const[d,u]=r.useState(""),[m,x]=r.useState(""),[f,v]=r.useState("5"),N=l=>{l.preventDefault(),d.trim()&&o({type:c,summary:d.trim(),detail:m.trim()||void 0,importance:parseInt(f)})},T=()=>{u(""),x(""),v("5")};return e.jsx(le,{open:s,onOpenChange:l=>{l||T(),a(l)},children:e.jsxs(ne,{className:"sm:max-w-md",children:[e.jsxs(ce,{children:[e.jsxs(de,{children:["Add ",c==="goal"?"Goal":"Project"]}),e.jsxs(me,{children:["Create a new ",c==="goal"?"goal":"project"," in the Second Brain."]})]}),e.jsxs("form",{onSubmit:N,className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("label",{className:"text-sm font-medium text-foreground",children:["Summary ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(R,{placeholder:c==="goal"?"What do you want to achieve?":"What are you working on?",value:d,onChange:l=>u(l.target.value),required:!0})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:"Detail"}),e.jsx(re,{placeholder:"Additional context...",value:m,onChange:l=>x(l.target.value),rows:3})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("label",{className:"text-sm font-medium text-foreground",children:"Importance (1–10)"}),e.jsx(R,{type:"number",min:"1",max:"10",step:"1",value:f,onChange:l=>v(l.target.value)})]}),e.jsx(xe,{children:e.jsx(b,{type:"submit",disabled:i||!d.trim(),children:i?e.jsxs(e.Fragment,{children:[e.jsx(we,{className:"h-4 w-4 animate-spin"}),"Saving..."]}):`Add ${c==="goal"?"Goal":"Project"}`})})]})]})})}function z({items:s,loading:a,error:o,kind:i,onDelete:c,onRetry:d,onAdd:u}){return o?e.jsx(k,{className:"border-destructive/30",children:e.jsxs(A,{className:"flex items-center gap-3 p-4 text-sm text-destructive",children:[e.jsx($,{className:"h-4 w-4 shrink-0"}),o,e.jsx(b,{size:"sm",variant:"outline",className:"ml-auto",onClick:d,children:"Retry"})]})}):a?e.jsx("div",{className:"space-y-3",children:Array.from({length:3}).map((m,x)=>e.jsx(Ee,{},x))}):s.length===0?e.jsx(k,{children:e.jsxs(A,{className:"flex flex-col items-center justify-center py-16 text-center",children:[e.jsx("div",{className:"flex h-14 w-14 items-center justify-center rounded-full bg-muted mb-4",children:i==="goal"?e.jsx(S,{className:"h-7 w-7 text-muted-foreground"}):e.jsx(Ae,{className:"h-7 w-7 text-muted-foreground"})}),e.jsxs("h3",{className:"text-base font-medium text-foreground mb-1",children:["No ",i==="goal"?"goals":"projects"," yet"]}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-sm",children:i==="goal"?"Add goals to help Mercury understand what you're working towards.":"Track active projects so Mercury can provide better context."}),e.jsxs(b,{className:"mt-4",onClick:u,children:[e.jsx(q,{className:"h-4 w-4"}),"Add ",i==="goal"?"Goal":"Project"]})]})}):e.jsx(y.div,{className:"space-y-3",variants:Pe,initial:"hidden",animate:"visible",children:e.jsx(B,{mode:"popLayout",children:s.map((m,x)=>e.jsx(Me,{item:m,onDelete:c,index:x,kind:i},m.id))})})}function Ye(){const[s,a]=r.useState([]),[o,i]=r.useState([]),[c,d]=r.useState(!0),[u,m]=r.useState(!0),[x,f]=r.useState(null),[v,N]=r.useState(null),[T,l]=r.useState(!1),[J,U]=r.useState("goal"),[X,I]=r.useState(!1),[P,Z]=r.useState("goals"),[Q,F]=r.useState([]),g=r.useCallback((t,n)=>{const h=Date.now();F(E=>[...E,{id:h,type:t,message:n}]),setTimeout(()=>{F(E=>E.filter(te=>te.id!==h))},3500)},[]),w=r.useCallback(async()=>{try{d(!0),f(null);const t=await j.brain.memory.list({type:"goal"});a(t.memories)}catch(t){f(t instanceof Error?t.message:"Failed to load goals")}finally{d(!1)}},[]),C=r.useCallback(async()=>{try{m(!0),N(null);const t=await j.brain.memory.list({type:"project"});i(t.memories)}catch(t){N(t instanceof Error?t.message:"Failed to load projects")}finally{m(!1)}},[]);r.useEffect(()=>{w(),C()},[w,C]);const G=t=>{U(t),l(!0)},Y=async t=>{I(!0);try{await j.brain.memory.create(t),g("success",`${t.type==="goal"?"Goal":"Project"} created`),l(!1),t.type==="goal"?w():C()}catch(n){g("error",n instanceof Error?n.message:"Failed to create")}finally{I(!1)}},ee=async t=>{try{await j.brain.memory.delete(t),a(n=>n.filter(h=>h.id!==t)),g("success","Goal deleted")}catch(n){g("error",n instanceof Error?n.message:"Failed to delete")}},se=async t=>{try{await j.brain.memory.delete(t),i(n=>n.filter(h=>h.id!==t)),g("success","Project deleted")}catch(n){g("error",n instanceof Error?n.message:"Failed to delete")}};return e.jsxs("div",{className:"space-y-6 p-6",children:[e.jsxs(y.div,{initial:{opacity:0,y:-8},animate:{opacity:1,y:0},transition:{duration:.3},className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-lg bg-[#00d4ff]/10",children:e.jsx(S,{className:"h-5 w-5 text-[#00d4ff]"})}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2.5",children:[e.jsx("h1",{className:"text-2xl font-semibold text-foreground",children:"Goals & Projects"}),e.jsx(ae,{variant:"secondary",className:"tabular-nums",children:s.length+o.length})]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Track objectives and active initiatives"})]})]}),e.jsxs(b,{onClick:()=>G(P==="goals"?"goal":"project"),children:[e.jsx(q,{className:"h-4 w-4"}),"Add ",P==="goals"?"Goal":"Project"]})]}),e.jsx(y.div,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{delay:.1,duration:.3},children:e.jsxs(Se,{value:P,onValueChange:Z,className:"space-y-4",children:[e.jsxs(W,{className:"w-full sm:w-auto",children:[e.jsxs(L,{value:"goals",className:"gap-1.5",children:[e.jsx(S,{className:"h-3.5 w-3.5"}),"Goals",!c&&e.jsxs("span",{className:"ml-1 text-xs text-muted-foreground/60 tabular-nums",children:["(",s.length,")"]})]}),e.jsxs(L,{value:"projects",className:"gap-1.5",children:[e.jsx(V,{className:"h-3.5 w-3.5"}),"Projects",!u&&e.jsxs("span",{className:"ml-1 text-xs text-muted-foreground/60 tabular-nums",children:["(",o.length,")"]})]})]}),e.jsx(M,{value:"goals",children:e.jsx(z,{items:s,loading:c,error:x,kind:"goal",onDelete:ee,onRetry:w,onAdd:()=>G("goal")})}),e.jsx(M,{value:"projects",children:e.jsx(z,{items:o,loading:u,error:v,kind:"project",onDelete:se,onRetry:C,onAdd:()=>G("project")})})]})}),e.jsx(Ie,{open:T,onOpenChange:l,onSubmit:Y,submitting:X,kind:J}),e.jsx(Ge,{toasts:Q})]})}export{Ye as GoalsPage};
12
- //# sourceMappingURL=Goals-D0cR8yIP.js.map
12
+ //# sourceMappingURL=Goals-CgSUAXLH.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Goals-D0cR8yIP.js","sources":["../../node_modules/lucide-react/dist/esm/icons/folder-kanban.js","../../node_modules/lucide-react/dist/esm/icons/rocket.js","../../src/components/ui/tabs.tsx","../../src/pages/brain/Goals.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.511.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 __iconNode = [\n [\n \"path\",\n {\n d: \"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z\",\n key: \"1fr9dc\"\n }\n ],\n [\"path\", { d: \"M8 10v4\", key: \"tgpxqk\" }],\n [\"path\", { d: \"M12 10v2\", key: \"hh53o1\" }],\n [\"path\", { d: \"M16 10v6\", key: \"1d6xys\" }]\n];\nconst FolderKanban = createLucideIcon(\"folder-kanban\", __iconNode);\n\nexport { __iconNode, FolderKanban as default };\n//# sourceMappingURL=folder-kanban.js.map\n","/**\n * @license lucide-react v0.511.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 __iconNode = [\n [\n \"path\",\n {\n d: \"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z\",\n key: \"m3kijz\"\n }\n ],\n [\n \"path\",\n {\n d: \"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\",\n key: \"1fmvmk\"\n }\n ],\n [\"path\", { d: \"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\", key: \"1f8sc4\" }],\n [\"path\", { d: \"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\", key: \"qeys4\" }]\n];\nconst Rocket = createLucideIcon(\"rocket\", __iconNode);\n\nexport { __iconNode, Rocket as default };\n//# sourceMappingURL=rocket.js.map\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"@/lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center gap-1 border-b border-border bg-transparent p-0 text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:text-foreground data-[state=active]:shadow-none\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { useEffect, useState, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Target,\n FolderKanban,\n Plus,\n Trash2,\n Loader2,\n CheckCircle2,\n XCircle,\n Rocket,\n} from \"lucide-react\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"@/components/ui/tabs\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/components/ui/alert-dialog\";\nimport { cn, formatDate } from \"@/lib/utils\";\nimport api, { type Memory, type MemoryCreate } from \"@/lib/api\";\n\n/* ── Animations ─────────────────────────────────────────────── */\n\nconst fadeUp = {\n hidden: { opacity: 0, y: 12 },\n visible: (i: number) => ({\n opacity: 1,\n y: 0,\n transition: { delay: i * 0.05, duration: 0.3, ease: \"easeOut\" as const },\n }),\n exit: { opacity: 0, y: -8, transition: { duration: 0.2 } },\n};\n\nconst stagger = {\n visible: { transition: { staggerChildren: 0.05 } },\n};\n\n/* ── Toast ──────────────────────────────────────────────────── */\n\ninterface Toast {\n id: number;\n type: \"success\" | \"error\";\n message: string;\n}\n\nfunction ToastBar({ toasts }: { toasts: Toast[] }) {\n return (\n <div className=\"fixed bottom-6 right-6 z-50 flex flex-col gap-2\">\n <AnimatePresence>\n {toasts.map((t) => (\n <motion.div\n key={t.id}\n initial={{ opacity: 0, x: 40 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: 40 }}\n className={cn(\n \"flex items-center gap-2 rounded-lg border px-4 py-3 text-sm shadow-lg backdrop-blur-sm\",\n t.type === \"success\"\n ? \"border-emerald-500/30 bg-emerald-500/10 text-emerald-400\"\n : \"border-destructive/30 bg-destructive/10 text-destructive\"\n )}\n >\n {t.type === \"success\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n <XCircle className=\"h-4 w-4\" />\n )}\n {t.message}\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n );\n}\n\n/* ── Skeleton ───────────────────────────────────────────────── */\n\nfunction Skeleton({ className }: { className?: string }) {\n return (\n <div className={cn(\"animate-pulse rounded-lg bg-muted\", className)} />\n );\n}\n\nfunction ItemCardSkeleton() {\n return (\n <Card>\n <CardContent className=\"p-5 space-y-3\">\n <Skeleton className=\"h-5 w-3/4\" />\n <Skeleton className=\"h-3 w-full\" />\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-3 w-16\" />\n <Skeleton className=\"h-3 w-20\" />\n </div>\n </CardContent>\n </Card>\n );\n}\n\n/* ── Priority Indicator ─────────────────────────────────────── */\n\nfunction PriorityIndicator({ importance }: { importance: number }) {\n const label =\n importance >= 8\n ? \"Critical\"\n : importance >= 6\n ? \"High\"\n : importance >= 4\n ? \"Medium\"\n : \"Low\";\n const color =\n importance >= 8\n ? \"text-red-400 bg-red-500/15\"\n : importance >= 6\n ? \"text-amber-400 bg-amber-500/15\"\n : importance >= 4\n ? \"text-[#00d4ff] bg-[#00d4ff]/15\"\n : \"text-muted-foreground bg-muted\";\n\n return (\n <span\n className={cn(\n \"inline-flex items-center rounded-md px-2 py-0.5 text-xs font-medium\",\n color\n )}\n >\n {label}\n </span>\n );\n}\n\n/* ── Item Card ──────────────────────────────────────────────── */\n\nfunction ItemCard({\n item,\n onDelete,\n index,\n kind,\n}: {\n item: Memory;\n onDelete: (id: string) => void;\n index: number;\n kind: \"goal\" | \"project\";\n}) {\n return (\n <motion.div\n custom={index}\n variants={fadeUp}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n layout\n >\n <Card className=\"group transition-colors hover:border-[#00d4ff]/20\">\n <CardContent className=\"p-5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex-1 min-w-0 space-y-2\">\n {/* Title row */}\n <div className=\"flex items-center gap-2.5\">\n {kind === \"goal\" ? (\n <Target className=\"h-4 w-4 text-amber-400 shrink-0\" />\n ) : (\n <FolderKanban className=\"h-4 w-4 text-cyan-400 shrink-0\" />\n )}\n <h3 className=\"text-sm font-semibold text-foreground leading-tight\">\n {item.summary}\n </h3>\n </div>\n\n {/* Detail */}\n {item.detail && (\n <p className=\"text-sm text-muted-foreground leading-relaxed line-clamp-3\">\n {item.detail}\n </p>\n )}\n\n {/* Meta */}\n <div className=\"flex flex-wrap items-center gap-3 pt-0.5\">\n {item.importance != null && (\n <PriorityIndicator importance={item.importance} />\n )}\n <span className=\"text-xs text-muted-foreground/50\">\n {formatDate(item.createdAt)}\n </span>\n </div>\n </div>\n\n {/* Delete */}\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"opacity-0 group-hover:opacity-100 transition-opacity text-muted-foreground hover:text-destructive shrink-0\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n Delete {kind === \"goal\" ? \"Goal\" : \"Project\"}\n </AlertDialogTitle>\n <AlertDialogDescription>\n Are you sure you want to delete this{\" \"}\n {kind === \"goal\" ? \"goal\" : \"project\"}? This action cannot\n be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => onDelete(item.id)}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n Delete\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </CardContent>\n </Card>\n </motion.div>\n );\n}\n\n/* ── Add Dialog ─────────────────────────────────────────────── */\n\nfunction AddItemDialog({\n open,\n onOpenChange,\n onSubmit,\n submitting,\n kind,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSubmit: (data: MemoryCreate) => void;\n submitting: boolean;\n kind: \"goal\" | \"project\";\n}) {\n const [summary, setSummary] = useState(\"\");\n const [detail, setDetail] = useState(\"\");\n const [importance, setImportance] = useState(\"5\");\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!summary.trim()) return;\n onSubmit({\n type: kind,\n summary: summary.trim(),\n detail: detail.trim() || undefined,\n importance: parseInt(importance),\n });\n };\n\n const reset = () => {\n setSummary(\"\");\n setDetail(\"\");\n setImportance(\"5\");\n };\n\n return (\n <Dialog\n open={open}\n onOpenChange={(v) => {\n if (!v) reset();\n onOpenChange(v);\n }}\n >\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>\n Add {kind === \"goal\" ? \"Goal\" : \"Project\"}\n </DialogTitle>\n <DialogDescription>\n Create a new {kind === \"goal\" ? \"goal\" : \"project\"} in the Second\n Brain.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <label className=\"text-sm font-medium text-foreground\">\n Summary <span className=\"text-destructive\">*</span>\n </label>\n <Input\n placeholder={\n kind === \"goal\"\n ? \"What do you want to achieve?\"\n : \"What are you working on?\"\n }\n value={summary}\n onChange={(e) => setSummary(e.target.value)}\n required\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <label className=\"text-sm font-medium text-foreground\">\n Detail\n </label>\n <Textarea\n placeholder=\"Additional context...\"\n value={detail}\n onChange={(e) => setDetail(e.target.value)}\n rows={3}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <label className=\"text-sm font-medium text-foreground\">\n Importance (1–10)\n </label>\n <Input\n type=\"number\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n value={importance}\n onChange={(e) => setImportance(e.target.value)}\n />\n </div>\n\n <DialogFooter>\n <Button type=\"submit\" disabled={submitting || !summary.trim()}>\n {submitting ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Saving...\n </>\n ) : (\n `Add ${kind === \"goal\" ? \"Goal\" : \"Project\"}`\n )}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n\n/* ── Tab Content ────────────────────────────────────────────── */\n\nfunction TabSection({\n items,\n loading,\n error,\n kind,\n onDelete,\n onRetry,\n onAdd,\n}: {\n items: Memory[];\n loading: boolean;\n error: string | null;\n kind: \"goal\" | \"project\";\n onDelete: (id: string) => void;\n onRetry: () => void;\n onAdd: () => void;\n}) {\n if (error) {\n return (\n <Card className=\"border-destructive/30\">\n <CardContent className=\"flex items-center gap-3 p-4 text-sm text-destructive\">\n <XCircle className=\"h-4 w-4 shrink-0\" />\n {error}\n <Button size=\"sm\" variant=\"outline\" className=\"ml-auto\" onClick={onRetry}>\n Retry\n </Button>\n </CardContent>\n </Card>\n );\n }\n\n if (loading) {\n return (\n <div className=\"space-y-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <ItemCardSkeleton key={i} />\n ))}\n </div>\n );\n }\n\n if (items.length === 0) {\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"flex h-14 w-14 items-center justify-center rounded-full bg-muted mb-4\">\n {kind === \"goal\" ? (\n <Target className=\"h-7 w-7 text-muted-foreground\" />\n ) : (\n <Rocket className=\"h-7 w-7 text-muted-foreground\" />\n )}\n </div>\n <h3 className=\"text-base font-medium text-foreground mb-1\">\n No {kind === \"goal\" ? \"goals\" : \"projects\"} yet\n </h3>\n <p className=\"text-sm text-muted-foreground max-w-sm\">\n {kind === \"goal\"\n ? \"Add goals to help Mercury understand what you're working towards.\"\n : \"Track active projects so Mercury can provide better context.\"}\n </p>\n <Button className=\"mt-4\" onClick={onAdd}>\n <Plus className=\"h-4 w-4\" />\n Add {kind === \"goal\" ? \"Goal\" : \"Project\"}\n </Button>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <motion.div\n className=\"space-y-3\"\n variants={stagger}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <AnimatePresence mode=\"popLayout\">\n {items.map((item, i) => (\n <ItemCard\n key={item.id}\n item={item}\n onDelete={onDelete}\n index={i}\n kind={kind}\n />\n ))}\n </AnimatePresence>\n </motion.div>\n );\n}\n\n/* ── Main Page ──────────────────────────────────────────────── */\n\nexport function GoalsPage() {\n const [goals, setGoals] = useState<Memory[]>([]);\n const [projects, setProjects] = useState<Memory[]>([]);\n const [goalsLoading, setGoalsLoading] = useState(true);\n const [projectsLoading, setProjectsLoading] = useState(true);\n const [goalsError, setGoalsError] = useState<string | null>(null);\n const [projectsError, setProjectsError] = useState<string | null>(null);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [dialogKind, setDialogKind] = useState<\"goal\" | \"project\">(\"goal\");\n const [submitting, setSubmitting] = useState(false);\n const [activeTab, setActiveTab] = useState(\"goals\");\n const [toasts, setToasts] = useState<Toast[]>([]);\n\n const toast = useCallback((type: \"success\" | \"error\", message: string) => {\n const id = Date.now();\n setToasts((prev) => [...prev, { id, type, message }]);\n setTimeout(() => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, 3500);\n }, []);\n\n const fetchGoals = useCallback(async () => {\n try {\n setGoalsLoading(true);\n setGoalsError(null);\n const res = await api.brain.memory.list({ type: \"goal\" });\n setGoals(res.memories);\n } catch (err: unknown) {\n setGoalsError(\n err instanceof Error ? err.message : \"Failed to load goals\"\n );\n } finally {\n setGoalsLoading(false);\n }\n }, []);\n\n const fetchProjects = useCallback(async () => {\n try {\n setProjectsLoading(true);\n setProjectsError(null);\n const res = await api.brain.memory.list({ type: \"project\" });\n setProjects(res.memories);\n } catch (err: unknown) {\n setProjectsError(\n err instanceof Error ? err.message : \"Failed to load projects\"\n );\n } finally {\n setProjectsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchGoals();\n fetchProjects();\n }, [fetchGoals, fetchProjects]);\n\n const openDialog = (kind: \"goal\" | \"project\") => {\n setDialogKind(kind);\n setDialogOpen(true);\n };\n\n const handleCreate = async (data: MemoryCreate) => {\n setSubmitting(true);\n try {\n await api.brain.memory.create(data);\n toast(\"success\", `${data.type === \"goal\" ? \"Goal\" : \"Project\"} created`);\n setDialogOpen(false);\n if (data.type === \"goal\") fetchGoals();\n else fetchProjects();\n } catch (err: unknown) {\n toast(\"error\", err instanceof Error ? err.message : \"Failed to create\");\n } finally {\n setSubmitting(false);\n }\n };\n\n const handleDeleteGoal = async (id: string) => {\n try {\n await api.brain.memory.delete(id);\n setGoals((prev) => prev.filter((g) => g.id !== id));\n toast(\"success\", \"Goal deleted\");\n } catch (err: unknown) {\n toast(\"error\", err instanceof Error ? err.message : \"Failed to delete\");\n }\n };\n\n const handleDeleteProject = async (id: string) => {\n try {\n await api.brain.memory.delete(id);\n setProjects((prev) => prev.filter((p) => p.id !== id));\n toast(\"success\", \"Project deleted\");\n } catch (err: unknown) {\n toast(\"error\", err instanceof Error ? err.message : \"Failed to delete\");\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n {/* Header */}\n <motion.div\n initial={{ opacity: 0, y: -8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3 }}\n className=\"flex items-start justify-between gap-4\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-[#00d4ff]/10\">\n <Target className=\"h-5 w-5 text-[#00d4ff]\" />\n </div>\n <div>\n <div className=\"flex items-center gap-2.5\">\n <h1 className=\"text-2xl font-semibold text-foreground\">\n Goals &amp; Projects\n </h1>\n <Badge variant=\"secondary\" className=\"tabular-nums\">\n {goals.length + projects.length}\n </Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n Track objectives and active initiatives\n </p>\n </div>\n </div>\n <Button\n onClick={() =>\n openDialog(activeTab === \"goals\" ? \"goal\" : \"project\")\n }\n >\n <Plus className=\"h-4 w-4\" />\n Add {activeTab === \"goals\" ? \"Goal\" : \"Project\"}\n </Button>\n </motion.div>\n\n {/* Tabs */}\n <motion.div\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.1, duration: 0.3 }}\n >\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n className=\"space-y-4\"\n >\n <TabsList className=\"w-full sm:w-auto\">\n <TabsTrigger value=\"goals\" className=\"gap-1.5\">\n <Target className=\"h-3.5 w-3.5\" />\n Goals\n {!goalsLoading && (\n <span className=\"ml-1 text-xs text-muted-foreground/60 tabular-nums\">\n ({goals.length})\n </span>\n )}\n </TabsTrigger>\n <TabsTrigger value=\"projects\" className=\"gap-1.5\">\n <FolderKanban className=\"h-3.5 w-3.5\" />\n Projects\n {!projectsLoading && (\n <span className=\"ml-1 text-xs text-muted-foreground/60 tabular-nums\">\n ({projects.length})\n </span>\n )}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"goals\">\n <TabSection\n items={goals}\n loading={goalsLoading}\n error={goalsError}\n kind=\"goal\"\n onDelete={handleDeleteGoal}\n onRetry={fetchGoals}\n onAdd={() => openDialog(\"goal\")}\n />\n </TabsContent>\n\n <TabsContent value=\"projects\">\n <TabSection\n items={projects}\n loading={projectsLoading}\n error={projectsError}\n kind=\"project\"\n onDelete={handleDeleteProject}\n onRetry={fetchProjects}\n onAdd={() => openDialog(\"project\")}\n />\n </TabsContent>\n </Tabs>\n </motion.div>\n\n {/* Add dialog */}\n <AddItemDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n onSubmit={handleCreate}\n submitting={submitting}\n kind={dialogKind}\n />\n\n <ToastBar toasts={toasts} />\n </div>\n );\n}\n"],"names":["__iconNode","FolderKanban","createLucideIcon","Rocket","Tabs","TabsPrimitive.Root","TabsList","React.forwardRef","className","props","ref","jsx","TabsPrimitive.List","cn","TabsTrigger","TabsPrimitive.Trigger","TabsContent","TabsPrimitive.Content","fadeUp","i","stagger","ToastBar","toasts","AnimatePresence","t","jsxs","motion","CheckCircle2","XCircle","Skeleton","ItemCardSkeleton","Card","CardContent","PriorityIndicator","importance","label","color","ItemCard","item","onDelete","index","kind","Target","formatDate","AlertDialog","AlertDialogTrigger","Button","Trash2","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","AddItemDialog","open","onOpenChange","onSubmit","submitting","summary","setSummary","useState","detail","setDetail","setImportance","handleSubmit","e","reset","Dialog","v","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","Textarea","DialogFooter","Fragment","Loader2","TabSection","items","loading","error","onRetry","onAdd","_","Plus","GoalsPage","goals","setGoals","projects","setProjects","goalsLoading","setGoalsLoading","projectsLoading","setProjectsLoading","goalsError","setGoalsError","projectsError","setProjectsError","dialogOpen","setDialogOpen","dialogKind","setDialogKind","setSubmitting","activeTab","setActiveTab","setToasts","toast","useCallback","type","message","id","prev","fetchGoals","res","api","err","fetchProjects","useEffect","openDialog","handleCreate","data","handleDeleteGoal","g","handleDeleteProject","p","Badge"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"Goals-CgSUAXLH.js","sources":["../../node_modules/lucide-react/dist/esm/icons/folder-kanban.js","../../node_modules/lucide-react/dist/esm/icons/rocket.js","../../src/components/ui/tabs.tsx","../../src/pages/brain/Goals.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.511.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 __iconNode = [\n [\n \"path\",\n {\n d: \"M4 20h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.93a2 2 0 0 1-1.66-.9l-.82-1.2A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13c0 1.1.9 2 2 2Z\",\n key: \"1fr9dc\"\n }\n ],\n [\"path\", { d: \"M8 10v4\", key: \"tgpxqk\" }],\n [\"path\", { d: \"M12 10v2\", key: \"hh53o1\" }],\n [\"path\", { d: \"M16 10v6\", key: \"1d6xys\" }]\n];\nconst FolderKanban = createLucideIcon(\"folder-kanban\", __iconNode);\n\nexport { __iconNode, FolderKanban as default };\n//# sourceMappingURL=folder-kanban.js.map\n","/**\n * @license lucide-react v0.511.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 __iconNode = [\n [\n \"path\",\n {\n d: \"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z\",\n key: \"m3kijz\"\n }\n ],\n [\n \"path\",\n {\n d: \"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z\",\n key: \"1fmvmk\"\n }\n ],\n [\"path\", { d: \"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0\", key: \"1f8sc4\" }],\n [\"path\", { d: \"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\", key: \"qeys4\" }]\n];\nconst Rocket = createLucideIcon(\"rocket\", __iconNode);\n\nexport { __iconNode, Rocket as default };\n//# sourceMappingURL=rocket.js.map\n","import * as React from \"react\";\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { cn } from \"@/lib/utils\";\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n \"inline-flex h-9 items-center justify-center gap-1 border-b border-border bg-transparent p-0 text-muted-foreground\",\n className\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n \"inline-flex items-center justify-center whitespace-nowrap px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border-b-2 border-transparent data-[state=active]:border-primary data-[state=active]:text-foreground data-[state=active]:shadow-none\",\n className\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n \"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { useEffect, useState, useCallback } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n Target,\n FolderKanban,\n Plus,\n Trash2,\n Loader2,\n CheckCircle2,\n XCircle,\n Rocket,\n} from \"lucide-react\";\nimport { Card, CardContent } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from \"@/components/ui/tabs\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n DialogDescription,\n} from \"@/components/ui/dialog\";\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n} from \"@/components/ui/alert-dialog\";\nimport { cn, formatDate } from \"@/lib/utils\";\nimport api, { type Memory, type MemoryCreate } from \"@/lib/api\";\n\n/* ── Animations ─────────────────────────────────────────────── */\n\nconst fadeUp = {\n hidden: { opacity: 0, y: 12 },\n visible: (i: number) => ({\n opacity: 1,\n y: 0,\n transition: { delay: i * 0.05, duration: 0.3, ease: \"easeOut\" as const },\n }),\n exit: { opacity: 0, y: -8, transition: { duration: 0.2 } },\n};\n\nconst stagger = {\n visible: { transition: { staggerChildren: 0.05 } },\n};\n\n/* ── Toast ──────────────────────────────────────────────────── */\n\ninterface Toast {\n id: number;\n type: \"success\" | \"error\";\n message: string;\n}\n\nfunction ToastBar({ toasts }: { toasts: Toast[] }) {\n return (\n <div className=\"fixed bottom-6 right-6 z-50 flex flex-col gap-2\">\n <AnimatePresence>\n {toasts.map((t) => (\n <motion.div\n key={t.id}\n initial={{ opacity: 0, x: 40 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: 40 }}\n className={cn(\n \"flex items-center gap-2 rounded-lg border px-4 py-3 text-sm shadow-lg backdrop-blur-sm\",\n t.type === \"success\"\n ? \"border-emerald-500/30 bg-emerald-500/10 text-emerald-400\"\n : \"border-destructive/30 bg-destructive/10 text-destructive\"\n )}\n >\n {t.type === \"success\" ? (\n <CheckCircle2 className=\"h-4 w-4\" />\n ) : (\n <XCircle className=\"h-4 w-4\" />\n )}\n {t.message}\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n );\n}\n\n/* ── Skeleton ───────────────────────────────────────────────── */\n\nfunction Skeleton({ className }: { className?: string }) {\n return (\n <div className={cn(\"animate-pulse rounded-lg bg-muted\", className)} />\n );\n}\n\nfunction ItemCardSkeleton() {\n return (\n <Card>\n <CardContent className=\"p-5 space-y-3\">\n <Skeleton className=\"h-5 w-3/4\" />\n <Skeleton className=\"h-3 w-full\" />\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-3 w-16\" />\n <Skeleton className=\"h-3 w-20\" />\n </div>\n </CardContent>\n </Card>\n );\n}\n\n/* ── Priority Indicator ─────────────────────────────────────── */\n\nfunction PriorityIndicator({ importance }: { importance: number }) {\n const label =\n importance >= 8\n ? \"Critical\"\n : importance >= 6\n ? \"High\"\n : importance >= 4\n ? \"Medium\"\n : \"Low\";\n const color =\n importance >= 8\n ? \"text-red-400 bg-red-500/15\"\n : importance >= 6\n ? \"text-amber-400 bg-amber-500/15\"\n : importance >= 4\n ? \"text-[#00d4ff] bg-[#00d4ff]/15\"\n : \"text-muted-foreground bg-muted\";\n\n return (\n <span\n className={cn(\n \"inline-flex items-center rounded-md px-2 py-0.5 text-xs font-medium\",\n color\n )}\n >\n {label}\n </span>\n );\n}\n\n/* ── Item Card ──────────────────────────────────────────────── */\n\nfunction ItemCard({\n item,\n onDelete,\n index,\n kind,\n}: {\n item: Memory;\n onDelete: (id: string) => void;\n index: number;\n kind: \"goal\" | \"project\";\n}) {\n return (\n <motion.div\n custom={index}\n variants={fadeUp}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n layout\n >\n <Card className=\"group transition-colors hover:border-[#00d4ff]/20\">\n <CardContent className=\"p-5\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex-1 min-w-0 space-y-2\">\n {/* Title row */}\n <div className=\"flex items-center gap-2.5\">\n {kind === \"goal\" ? (\n <Target className=\"h-4 w-4 text-amber-400 shrink-0\" />\n ) : (\n <FolderKanban className=\"h-4 w-4 text-cyan-400 shrink-0\" />\n )}\n <h3 className=\"text-sm font-semibold text-foreground leading-tight\">\n {item.summary}\n </h3>\n </div>\n\n {/* Detail */}\n {item.detail && (\n <p className=\"text-sm text-muted-foreground leading-relaxed line-clamp-3\">\n {item.detail}\n </p>\n )}\n\n {/* Meta */}\n <div className=\"flex flex-wrap items-center gap-3 pt-0.5\">\n {item.importance != null && (\n <PriorityIndicator importance={item.importance} />\n )}\n <span className=\"text-xs text-muted-foreground/50\">\n {formatDate(item.createdAt)}\n </span>\n </div>\n </div>\n\n {/* Delete */}\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"opacity-0 group-hover:opacity-100 transition-opacity text-muted-foreground hover:text-destructive shrink-0\"\n >\n <Trash2 className=\"h-3.5 w-3.5\" />\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>\n Delete {kind === \"goal\" ? \"Goal\" : \"Project\"}\n </AlertDialogTitle>\n <AlertDialogDescription>\n Are you sure you want to delete this{\" \"}\n {kind === \"goal\" ? \"goal\" : \"project\"}? This action cannot\n be undone.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => onDelete(item.id)}\n className=\"bg-destructive text-destructive-foreground hover:bg-destructive/90\"\n >\n Delete\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </CardContent>\n </Card>\n </motion.div>\n );\n}\n\n/* ── Add Dialog ─────────────────────────────────────────────── */\n\nfunction AddItemDialog({\n open,\n onOpenChange,\n onSubmit,\n submitting,\n kind,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSubmit: (data: MemoryCreate) => void;\n submitting: boolean;\n kind: \"goal\" | \"project\";\n}) {\n const [summary, setSummary] = useState(\"\");\n const [detail, setDetail] = useState(\"\");\n const [importance, setImportance] = useState(\"5\");\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!summary.trim()) return;\n onSubmit({\n type: kind,\n summary: summary.trim(),\n detail: detail.trim() || undefined,\n importance: parseInt(importance),\n });\n };\n\n const reset = () => {\n setSummary(\"\");\n setDetail(\"\");\n setImportance(\"5\");\n };\n\n return (\n <Dialog\n open={open}\n onOpenChange={(v) => {\n if (!v) reset();\n onOpenChange(v);\n }}\n >\n <DialogContent className=\"sm:max-w-md\">\n <DialogHeader>\n <DialogTitle>\n Add {kind === \"goal\" ? \"Goal\" : \"Project\"}\n </DialogTitle>\n <DialogDescription>\n Create a new {kind === \"goal\" ? \"goal\" : \"project\"} in the Second\n Brain.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <label className=\"text-sm font-medium text-foreground\">\n Summary <span className=\"text-destructive\">*</span>\n </label>\n <Input\n placeholder={\n kind === \"goal\"\n ? \"What do you want to achieve?\"\n : \"What are you working on?\"\n }\n value={summary}\n onChange={(e) => setSummary(e.target.value)}\n required\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <label className=\"text-sm font-medium text-foreground\">\n Detail\n </label>\n <Textarea\n placeholder=\"Additional context...\"\n value={detail}\n onChange={(e) => setDetail(e.target.value)}\n rows={3}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <label className=\"text-sm font-medium text-foreground\">\n Importance (1–10)\n </label>\n <Input\n type=\"number\"\n min=\"1\"\n max=\"10\"\n step=\"1\"\n value={importance}\n onChange={(e) => setImportance(e.target.value)}\n />\n </div>\n\n <DialogFooter>\n <Button type=\"submit\" disabled={submitting || !summary.trim()}>\n {submitting ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Saving...\n </>\n ) : (\n `Add ${kind === \"goal\" ? \"Goal\" : \"Project\"}`\n )}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n\n/* ── Tab Content ────────────────────────────────────────────── */\n\nfunction TabSection({\n items,\n loading,\n error,\n kind,\n onDelete,\n onRetry,\n onAdd,\n}: {\n items: Memory[];\n loading: boolean;\n error: string | null;\n kind: \"goal\" | \"project\";\n onDelete: (id: string) => void;\n onRetry: () => void;\n onAdd: () => void;\n}) {\n if (error) {\n return (\n <Card className=\"border-destructive/30\">\n <CardContent className=\"flex items-center gap-3 p-4 text-sm text-destructive\">\n <XCircle className=\"h-4 w-4 shrink-0\" />\n {error}\n <Button size=\"sm\" variant=\"outline\" className=\"ml-auto\" onClick={onRetry}>\n Retry\n </Button>\n </CardContent>\n </Card>\n );\n }\n\n if (loading) {\n return (\n <div className=\"space-y-3\">\n {Array.from({ length: 3 }).map((_, i) => (\n <ItemCardSkeleton key={i} />\n ))}\n </div>\n );\n }\n\n if (items.length === 0) {\n return (\n <Card>\n <CardContent className=\"flex flex-col items-center justify-center py-16 text-center\">\n <div className=\"flex h-14 w-14 items-center justify-center rounded-full bg-muted mb-4\">\n {kind === \"goal\" ? (\n <Target className=\"h-7 w-7 text-muted-foreground\" />\n ) : (\n <Rocket className=\"h-7 w-7 text-muted-foreground\" />\n )}\n </div>\n <h3 className=\"text-base font-medium text-foreground mb-1\">\n No {kind === \"goal\" ? \"goals\" : \"projects\"} yet\n </h3>\n <p className=\"text-sm text-muted-foreground max-w-sm\">\n {kind === \"goal\"\n ? \"Add goals to help Mercury understand what you're working towards.\"\n : \"Track active projects so Mercury can provide better context.\"}\n </p>\n <Button className=\"mt-4\" onClick={onAdd}>\n <Plus className=\"h-4 w-4\" />\n Add {kind === \"goal\" ? \"Goal\" : \"Project\"}\n </Button>\n </CardContent>\n </Card>\n );\n }\n\n return (\n <motion.div\n className=\"space-y-3\"\n variants={stagger}\n initial=\"hidden\"\n animate=\"visible\"\n >\n <AnimatePresence mode=\"popLayout\">\n {items.map((item, i) => (\n <ItemCard\n key={item.id}\n item={item}\n onDelete={onDelete}\n index={i}\n kind={kind}\n />\n ))}\n </AnimatePresence>\n </motion.div>\n );\n}\n\n/* ── Main Page ──────────────────────────────────────────────── */\n\nexport function GoalsPage() {\n const [goals, setGoals] = useState<Memory[]>([]);\n const [projects, setProjects] = useState<Memory[]>([]);\n const [goalsLoading, setGoalsLoading] = useState(true);\n const [projectsLoading, setProjectsLoading] = useState(true);\n const [goalsError, setGoalsError] = useState<string | null>(null);\n const [projectsError, setProjectsError] = useState<string | null>(null);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [dialogKind, setDialogKind] = useState<\"goal\" | \"project\">(\"goal\");\n const [submitting, setSubmitting] = useState(false);\n const [activeTab, setActiveTab] = useState(\"goals\");\n const [toasts, setToasts] = useState<Toast[]>([]);\n\n const toast = useCallback((type: \"success\" | \"error\", message: string) => {\n const id = Date.now();\n setToasts((prev) => [...prev, { id, type, message }]);\n setTimeout(() => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, 3500);\n }, []);\n\n const fetchGoals = useCallback(async () => {\n try {\n setGoalsLoading(true);\n setGoalsError(null);\n const res = await api.brain.memory.list({ type: \"goal\" });\n setGoals(res.memories);\n } catch (err: unknown) {\n setGoalsError(\n err instanceof Error ? err.message : \"Failed to load goals\"\n );\n } finally {\n setGoalsLoading(false);\n }\n }, []);\n\n const fetchProjects = useCallback(async () => {\n try {\n setProjectsLoading(true);\n setProjectsError(null);\n const res = await api.brain.memory.list({ type: \"project\" });\n setProjects(res.memories);\n } catch (err: unknown) {\n setProjectsError(\n err instanceof Error ? err.message : \"Failed to load projects\"\n );\n } finally {\n setProjectsLoading(false);\n }\n }, []);\n\n useEffect(() => {\n fetchGoals();\n fetchProjects();\n }, [fetchGoals, fetchProjects]);\n\n const openDialog = (kind: \"goal\" | \"project\") => {\n setDialogKind(kind);\n setDialogOpen(true);\n };\n\n const handleCreate = async (data: MemoryCreate) => {\n setSubmitting(true);\n try {\n await api.brain.memory.create(data);\n toast(\"success\", `${data.type === \"goal\" ? \"Goal\" : \"Project\"} created`);\n setDialogOpen(false);\n if (data.type === \"goal\") fetchGoals();\n else fetchProjects();\n } catch (err: unknown) {\n toast(\"error\", err instanceof Error ? err.message : \"Failed to create\");\n } finally {\n setSubmitting(false);\n }\n };\n\n const handleDeleteGoal = async (id: string) => {\n try {\n await api.brain.memory.delete(id);\n setGoals((prev) => prev.filter((g) => g.id !== id));\n toast(\"success\", \"Goal deleted\");\n } catch (err: unknown) {\n toast(\"error\", err instanceof Error ? err.message : \"Failed to delete\");\n }\n };\n\n const handleDeleteProject = async (id: string) => {\n try {\n await api.brain.memory.delete(id);\n setProjects((prev) => prev.filter((p) => p.id !== id));\n toast(\"success\", \"Project deleted\");\n } catch (err: unknown) {\n toast(\"error\", err instanceof Error ? err.message : \"Failed to delete\");\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n {/* Header */}\n <motion.div\n initial={{ opacity: 0, y: -8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.3 }}\n className=\"flex items-start justify-between gap-4\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-[#00d4ff]/10\">\n <Target className=\"h-5 w-5 text-[#00d4ff]\" />\n </div>\n <div>\n <div className=\"flex items-center gap-2.5\">\n <h1 className=\"text-2xl font-semibold text-foreground\">\n Goals &amp; Projects\n </h1>\n <Badge variant=\"secondary\" className=\"tabular-nums\">\n {goals.length + projects.length}\n </Badge>\n </div>\n <p className=\"text-sm text-muted-foreground\">\n Track objectives and active initiatives\n </p>\n </div>\n </div>\n <Button\n onClick={() =>\n openDialog(activeTab === \"goals\" ? \"goal\" : \"project\")\n }\n >\n <Plus className=\"h-4 w-4\" />\n Add {activeTab === \"goals\" ? \"Goal\" : \"Project\"}\n </Button>\n </motion.div>\n\n {/* Tabs */}\n <motion.div\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ delay: 0.1, duration: 0.3 }}\n >\n <Tabs\n value={activeTab}\n onValueChange={setActiveTab}\n className=\"space-y-4\"\n >\n <TabsList className=\"w-full sm:w-auto\">\n <TabsTrigger value=\"goals\" className=\"gap-1.5\">\n <Target className=\"h-3.5 w-3.5\" />\n Goals\n {!goalsLoading && (\n <span className=\"ml-1 text-xs text-muted-foreground/60 tabular-nums\">\n ({goals.length})\n </span>\n )}\n </TabsTrigger>\n <TabsTrigger value=\"projects\" className=\"gap-1.5\">\n <FolderKanban className=\"h-3.5 w-3.5\" />\n Projects\n {!projectsLoading && (\n <span className=\"ml-1 text-xs text-muted-foreground/60 tabular-nums\">\n ({projects.length})\n </span>\n )}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"goals\">\n <TabSection\n items={goals}\n loading={goalsLoading}\n error={goalsError}\n kind=\"goal\"\n onDelete={handleDeleteGoal}\n onRetry={fetchGoals}\n onAdd={() => openDialog(\"goal\")}\n />\n </TabsContent>\n\n <TabsContent value=\"projects\">\n <TabSection\n items={projects}\n loading={projectsLoading}\n error={projectsError}\n kind=\"project\"\n onDelete={handleDeleteProject}\n onRetry={fetchProjects}\n onAdd={() => openDialog(\"project\")}\n />\n </TabsContent>\n </Tabs>\n </motion.div>\n\n {/* Add dialog */}\n <AddItemDialog\n open={dialogOpen}\n onOpenChange={setDialogOpen}\n onSubmit={handleCreate}\n submitting={submitting}\n kind={dialogKind}\n />\n\n <ToastBar toasts={toasts} />\n </div>\n );\n}\n"],"names":["__iconNode","FolderKanban","createLucideIcon","Rocket","Tabs","TabsPrimitive.Root","TabsList","React.forwardRef","className","props","ref","jsx","TabsPrimitive.List","cn","TabsTrigger","TabsPrimitive.Trigger","TabsContent","TabsPrimitive.Content","fadeUp","i","stagger","ToastBar","toasts","AnimatePresence","t","jsxs","motion","CheckCircle2","XCircle","Skeleton","ItemCardSkeleton","Card","CardContent","PriorityIndicator","importance","label","color","ItemCard","item","onDelete","index","kind","Target","formatDate","AlertDialog","AlertDialogTrigger","Button","Trash2","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","AddItemDialog","open","onOpenChange","onSubmit","submitting","summary","setSummary","useState","detail","setDetail","setImportance","handleSubmit","e","reset","Dialog","v","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","Textarea","DialogFooter","Fragment","Loader2","TabSection","items","loading","error","onRetry","onAdd","_","Plus","GoalsPage","goals","setGoals","projects","setProjects","goalsLoading","setGoalsLoading","projectsLoading","setProjectsLoading","goalsError","setGoalsError","projectsError","setProjectsError","dialogOpen","setDialogOpen","dialogKind","setDialogKind","setSubmitting","activeTab","setActiveTab","setToasts","toast","useCallback","type","message","id","prev","fetchGoals","res","api","err","fetchProjects","useEffect","openDialog","handleCreate","data","handleDeleteGoal","g","handleDeleteProject","p","Badge"],"mappings":"m4BAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CACE,OACA,CACE,EAAG,6HACH,IAAK,QACX,CACA,EACE,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACMC,EAAeC,EAAiB,gBAAiBF,EAAU,ECrBjE;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CACE,OACA,CACE,EAAG,4FACH,IAAK,QACX,CACA,EACE,CACE,OACA,CACE,EAAG,kGACH,IAAK,QACX,CACA,EACE,CAAC,OAAQ,CAAE,EAAG,yCAA0C,IAAK,QAAQ,CAAE,EACvE,CAAC,OAAQ,CAAE,EAAG,0CAA2C,IAAK,OAAO,CAAE,CACzE,EACMG,GAASD,EAAiB,SAAUF,EAAU,ECvB9CI,GAAOC,GAEPC,EAAWC,EAAAA,WAGf,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,IAACC,EAAA,CACC,IAAAF,EACA,UAAWG,EACT,oHACAL,CAAA,EAED,GAAGC,CAAA,CACN,CACD,EACDH,EAAS,YAAcM,EAAmB,YAE1C,MAAME,EAAcP,EAAAA,WAGlB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,IAACI,EAAA,CACC,IAAAL,EACA,UAAWG,EACT,4ZACAL,CAAA,EAED,GAAGC,CAAA,CACN,CACD,EACDK,EAAY,YAAcC,EAAsB,YAEhD,MAAMC,EAAcT,EAAAA,WAGlB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,IAACM,EAAA,CACC,IAAAP,EACA,UAAWG,EACT,kIACAL,CAAA,EAED,GAAGC,CAAA,CACN,CACD,EACDO,EAAY,YAAcC,EAAsB,YCPhD,MAAMC,GAAS,CACb,OAAQ,CAAE,QAAS,EAAG,EAAG,EAAA,EACzB,QAAUC,IAAe,CACvB,QAAS,EACT,EAAG,EACH,WAAY,CAAE,MAAOA,EAAI,IAAM,SAAU,GAAK,KAAM,SAAA,CAAmB,GAEzE,KAAM,CAAE,QAAS,EAAG,EAAG,GAAI,WAAY,CAAE,SAAU,EAAA,CAAI,CACzD,EAEMC,GAAU,CACd,QAAS,CAAE,WAAY,CAAE,gBAAiB,IAAK,CACjD,EAUA,SAASC,GAAS,CAAE,OAAAC,GAA+B,CACjD,OACEX,EAAAA,IAAC,OAAI,UAAU,kDACb,eAACY,EAAA,CACE,SAAAD,EAAO,IAAKE,GACXC,EAAAA,KAACC,EAAO,IAAP,CAEC,QAAS,CAAE,QAAS,EAAG,EAAG,EAAA,EAC1B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAA,EAC1B,KAAM,CAAE,QAAS,EAAG,EAAG,EAAA,EACvB,UAAWb,EACT,yFACAW,EAAE,OAAS,UACP,2DACA,0DAAA,EAGL,SAAA,CAAAA,EAAE,OAAS,UACVb,EAAAA,IAACgB,GAAA,CAAa,UAAU,UAAU,EAElChB,EAAAA,IAACiB,EAAA,CAAQ,UAAU,SAAA,CAAU,EAE9BJ,EAAE,OAAA,CAAA,EAhBEA,EAAE,EAAA,CAkBV,EACH,CAAA,CACF,CAEJ,CAIA,SAASK,EAAS,CAAE,UAAArB,GAAqC,CACvD,aACG,MAAA,CAAI,UAAWK,EAAG,oCAAqCL,CAAS,EAAG,CAExE,CAEA,SAASsB,IAAmB,CAC1B,OACEnB,EAAAA,IAACoB,EAAA,CACC,SAAAN,EAAAA,KAACO,EAAA,CAAY,UAAU,gBACrB,SAAA,CAAArB,EAAAA,IAACkB,EAAA,CAAS,UAAU,WAAA,CAAY,EAChClB,EAAAA,IAACkB,EAAA,CAAS,UAAU,YAAA,CAAa,EACjCJ,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAd,EAAAA,IAACkB,EAAA,CAAS,UAAU,UAAA,CAAW,EAC/BlB,EAAAA,IAACkB,EAAA,CAAS,UAAU,UAAA,CAAW,CAAA,CAAA,CACjC,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAIA,SAASI,GAAkB,CAAE,WAAAC,GAAsC,CACjE,MAAMC,EACJD,GAAc,EACV,WACAA,GAAc,EACZ,OACAA,GAAc,EACZ,SACA,MACJE,EACJF,GAAc,EACV,6BACAA,GAAc,EACZ,iCACAA,GAAc,EACZ,iCACA,iCAEV,OACEvB,EAAAA,IAAC,OAAA,CACC,UAAWE,EACT,sEACAuB,CAAA,EAGD,SAAAD,CAAA,CAAA,CAGP,CAIA,SAASE,GAAS,CAChB,KAAAC,EACA,SAAAC,EACA,MAAAC,EACA,KAAAC,CACF,EAKG,CACD,OACE9B,EAAAA,IAACe,EAAO,IAAP,CACC,OAAQc,EACR,SAAUtB,GACV,QAAQ,SACR,QAAQ,UACR,KAAK,OACL,OAAM,GAEN,SAAAP,EAAAA,IAACoB,EAAA,CAAK,UAAU,oDACd,SAAApB,EAAAA,IAACqB,EAAA,CAAY,UAAU,MACrB,SAAAP,EAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,2BAEb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACZ,SAAA,CAAAgB,IAAS,aACPC,EAAA,CAAO,UAAU,kCAAkC,EAEpD/B,EAAAA,IAACV,EAAA,CAAa,UAAU,gCAAA,CAAiC,EAE3DU,EAAAA,IAAC,KAAA,CAAG,UAAU,sDACX,WAAK,OAAA,CACR,CAAA,EACF,EAGC2B,EAAK,QACJ3B,EAAAA,IAAC,KAAE,UAAU,6DACV,WAAK,OACR,EAIFc,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACZ,SAAA,CAAAa,EAAK,YAAc,MAClB3B,EAAAA,IAACsB,GAAA,CAAkB,WAAYK,EAAK,WAAY,QAEjD,OAAA,CAAK,UAAU,mCACb,SAAAK,GAAWL,EAAK,SAAS,CAAA,CAC5B,CAAA,CAAA,CACF,CAAA,EACF,SAGCM,GAAA,CACC,SAAA,CAAAjC,EAAAA,IAACkC,GAAA,CAAmB,QAAO,GACzB,SAAAlC,EAAAA,IAACmC,EAAA,CACC,KAAK,KACL,QAAQ,QACR,UAAU,6GAEV,SAAAnC,EAAAA,IAACoC,GAAA,CAAO,UAAU,aAAA,CAAc,CAAA,CAAA,EAEpC,SACCC,GAAA,CACC,SAAA,CAAAvB,OAACwB,GAAA,CACC,SAAA,CAAAxB,OAACyB,GAAA,CAAiB,SAAA,CAAA,UACRT,IAAS,OAAS,OAAS,SAAA,EACrC,SACCU,GAAA,CAAuB,SAAA,CAAA,uCACe,IACpCV,IAAS,OAAS,OAAS,UAAU,iCAAA,CAAA,CAExC,CAAA,EACF,SACCW,GAAA,CACC,SAAA,CAAAzC,EAAAA,IAAC0C,IAAkB,SAAA,QAAA,CAAM,EACzB1C,EAAAA,IAAC2C,GAAA,CACC,QAAS,IAAMf,EAASD,EAAK,EAAE,EAC/B,UAAU,qEACX,SAAA,QAAA,CAAA,CAED,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EACF,CAAA,CACF,CAAA,CAAA,CAGN,CAIA,SAASiB,GAAc,CACrB,KAAAC,EACA,aAAAC,EACA,SAAAC,EACA,WAAAC,EACA,KAAAlB,CACF,EAMG,CACD,KAAM,CAACmB,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAE,EACnC,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAAS,EAAE,EACjC,CAAC5B,EAAY+B,CAAa,EAAIH,EAAAA,SAAS,GAAG,EAE1CI,EAAgBC,GAAuB,CAC3CA,EAAE,eAAA,EACGP,EAAQ,QACbF,EAAS,CACP,KAAMjB,EACN,QAASmB,EAAQ,KAAA,EACjB,OAAQG,EAAO,KAAA,GAAU,OACzB,WAAY,SAAS7B,CAAU,CAAA,CAChC,CACH,EAEMkC,EAAQ,IAAM,CAClBP,EAAW,EAAE,EACbG,EAAU,EAAE,EACZC,EAAc,GAAG,CACnB,EAEA,OACEtD,EAAAA,IAAC0D,GAAA,CACC,KAAAb,EACA,aAAec,GAAM,CACdA,GAAGF,EAAA,EACRX,EAAaa,CAAC,CAChB,EAEA,SAAA7C,EAAAA,KAAC8C,GAAA,CAAc,UAAU,cACvB,SAAA,CAAA9C,OAAC+C,GAAA,CACC,SAAA,CAAA/C,OAACgD,GAAA,CAAY,SAAA,CAAA,OACNhC,IAAS,OAAS,OAAS,SAAA,EAClC,SACCiC,GAAA,CAAkB,SAAA,CAAA,gBACHjC,IAAS,OAAS,OAAS,UAAU,uBAAA,CAAA,CAErD,CAAA,EACF,EACAhB,EAAAA,KAAC,OAAA,CAAK,SAAUyC,EAAc,UAAU,YACtC,SAAA,CAAAzC,EAAAA,KAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAA,EAAAA,KAAC,QAAA,CAAM,UAAU,sCAAsC,SAAA,CAAA,WAC7Cd,EAAAA,IAAC,OAAA,CAAK,UAAU,mBAAmB,SAAA,GAAA,CAAC,CAAA,EAC9C,EACAA,EAAAA,IAACgE,EAAA,CACC,YACElC,IAAS,OACL,+BACA,2BAEN,MAAOmB,EACP,SAAWO,GAAMN,EAAWM,EAAE,OAAO,KAAK,EAC1C,SAAQ,EAAA,CAAA,CACV,EACF,EAEA1C,EAAAA,KAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAd,EAAAA,IAAC,QAAA,CAAM,UAAU,sCAAsC,SAAA,SAEvD,EACAA,EAAAA,IAACiE,GAAA,CACC,YAAY,wBACZ,MAAOb,EACP,SAAWI,GAAMH,EAAUG,EAAE,OAAO,KAAK,EACzC,KAAM,CAAA,CAAA,CACR,EACF,EAEA1C,EAAAA,KAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAd,EAAAA,IAAC,QAAA,CAAM,UAAU,sCAAsC,SAAA,oBAEvD,EACAA,EAAAA,IAACgE,EAAA,CACC,KAAK,SACL,IAAI,IACJ,IAAI,KACJ,KAAK,IACL,MAAOzC,EACP,SAAWiC,GAAMF,EAAcE,EAAE,OAAO,KAAK,CAAA,CAAA,CAC/C,EACF,EAEAxD,MAACkE,GAAA,CACC,SAAAlE,EAAAA,IAACmC,EAAA,CAAO,KAAK,SAAS,SAAUa,GAAc,CAACC,EAAQ,KAAA,EACpD,WACCnC,OAAAqD,EAAAA,SAAA,CACE,SAAA,CAAAnE,EAAAA,IAACoE,GAAA,CAAQ,UAAU,sBAAA,CAAuB,EAAE,WAAA,EAE9C,EAEA,OAAOtC,IAAS,OAAS,OAAS,SAAS,GAE/C,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAGN,CAIA,SAASuC,EAAW,CAClB,MAAAC,EACA,QAAAC,EACA,MAAAC,EACA,KAAA1C,EACA,SAAAF,EACA,QAAA6C,EACA,MAAAC,CACF,EAQG,CACD,OAAIF,QAECpD,EAAA,CAAK,UAAU,wBACd,SAAAN,EAAAA,KAACO,EAAA,CAAY,UAAU,uDACrB,SAAA,CAAArB,EAAAA,IAACiB,EAAA,CAAQ,UAAU,kBAAA,CAAmB,EACrCuD,EACDxE,EAAAA,IAACmC,EAAA,CAAO,KAAK,KAAK,QAAQ,UAAU,UAAU,UAAU,QAASsC,EAAS,SAAA,OAAA,CAE1E,CAAA,CAAA,CACF,CAAA,CACF,EAIAF,QAEC,MAAA,CAAI,UAAU,YACZ,SAAA,MAAM,KAAK,CAAE,OAAQ,CAAA,CAAG,EAAE,IAAI,CAACI,EAAGnE,UAChCW,GAAA,CAAA,EAAsBX,CAAG,CAC3B,EACH,EAIA8D,EAAM,SAAW,EAEjBtE,EAAAA,IAACoB,EAAA,CACC,SAAAN,EAAAA,KAACO,EAAA,CAAY,UAAU,8DACrB,SAAA,CAAArB,MAAC,MAAA,CAAI,UAAU,wEACZ,SAAA8B,IAAS,OACR9B,MAAC+B,EAAA,CAAO,UAAU,+BAAA,CAAgC,EAElD/B,EAAAA,IAACR,GAAA,CAAO,UAAU,gCAAgC,EAEtD,EACAsB,EAAAA,KAAC,KAAA,CAAG,UAAU,6CAA6C,SAAA,CAAA,MACrDgB,IAAS,OAAS,QAAU,WAAW,MAAA,EAC7C,QACC,IAAA,CAAE,UAAU,yCACV,SAAAA,IAAS,OACN,oEACA,+DACN,EACAhB,EAAAA,KAACqB,EAAA,CAAO,UAAU,OAAO,QAASuC,EAChC,SAAA,CAAA1E,EAAAA,IAAC4E,EAAA,CAAK,UAAU,SAAA,CAAU,EAAE,OACvB9C,IAAS,OAAS,OAAS,SAAA,CAAA,CAClC,CAAA,CAAA,CACF,CAAA,CACF,EAKF9B,EAAAA,IAACe,EAAO,IAAP,CACC,UAAU,YACV,SAAUN,GACV,QAAQ,SACR,QAAQ,UAER,SAAAT,EAAAA,IAACY,GAAgB,KAAK,YACnB,WAAM,IAAI,CAACe,EAAMnB,IAChBR,EAAAA,IAAC0B,GAAA,CAEC,KAAAC,EACA,SAAAC,EACA,MAAOpB,EACP,KAAAsB,CAAA,EAJKH,EAAK,EAAA,CAMb,CAAA,CACH,CAAA,CAAA,CAGN,CAIO,SAASkD,IAAY,CAC1B,KAAM,CAACC,EAAOC,CAAQ,EAAI5B,EAAAA,SAAmB,CAAA,CAAE,EACzC,CAAC6B,EAAUC,CAAW,EAAI9B,EAAAA,SAAmB,CAAA,CAAE,EAC/C,CAAC+B,EAAcC,CAAe,EAAIhC,EAAAA,SAAS,EAAI,EAC/C,CAACiC,EAAiBC,CAAkB,EAAIlC,EAAAA,SAAS,EAAI,EACrD,CAACmC,EAAYC,CAAa,EAAIpC,EAAAA,SAAwB,IAAI,EAC1D,CAACqC,EAAeC,CAAgB,EAAItC,EAAAA,SAAwB,IAAI,EAChE,CAACuC,EAAYC,CAAa,EAAIxC,EAAAA,SAAS,EAAK,EAC5C,CAACyC,EAAYC,CAAa,EAAI1C,EAAAA,SAA6B,MAAM,EACjE,CAACH,EAAY8C,CAAa,EAAI3C,EAAAA,SAAS,EAAK,EAC5C,CAAC4C,EAAWC,CAAY,EAAI7C,EAAAA,SAAS,OAAO,EAC5C,CAACxC,EAAQsF,CAAS,EAAI9C,EAAAA,SAAkB,CAAA,CAAE,EAE1C+C,EAAQC,EAAAA,YAAY,CAACC,EAA2BC,IAAoB,CACxE,MAAMC,EAAK,KAAK,IAAA,EAChBL,EAAWM,GAAS,CAAC,GAAGA,EAAM,CAAE,GAAAD,EAAI,KAAAF,EAAM,QAAAC,CAAA,CAAS,CAAC,EACpD,WAAW,IAAM,CACfJ,EAAWM,GAASA,EAAK,OAAQ1F,IAAMA,GAAE,KAAOyF,CAAE,CAAC,CACrD,EAAG,IAAI,CACT,EAAG,CAAA,CAAE,EAECE,EAAaL,EAAAA,YAAY,SAAY,CACzC,GAAI,CACFhB,EAAgB,EAAI,EACpBI,EAAc,IAAI,EAClB,MAAMkB,EAAM,MAAMC,EAAI,MAAM,OAAO,KAAK,CAAE,KAAM,OAAQ,EACxD3B,EAAS0B,EAAI,QAAQ,CACvB,OAASE,EAAc,CACrBpB,EACEoB,aAAe,MAAQA,EAAI,QAAU,sBAAA,CAEzC,QAAA,CACExB,EAAgB,EAAK,CACvB,CACF,EAAG,CAAA,CAAE,EAECyB,EAAgBT,EAAAA,YAAY,SAAY,CAC5C,GAAI,CACFd,EAAmB,EAAI,EACvBI,EAAiB,IAAI,EACrB,MAAMgB,EAAM,MAAMC,EAAI,MAAM,OAAO,KAAK,CAAE,KAAM,UAAW,EAC3DzB,EAAYwB,EAAI,QAAQ,CAC1B,OAASE,EAAc,CACrBlB,EACEkB,aAAe,MAAQA,EAAI,QAAU,yBAAA,CAEzC,QAAA,CACEtB,EAAmB,EAAK,CAC1B,CACF,EAAG,CAAA,CAAE,EAELwB,EAAAA,UAAU,IAAM,CACdL,EAAA,EACAI,EAAA,CACF,EAAG,CAACJ,EAAYI,CAAa,CAAC,EAE9B,MAAME,EAAchF,GAA6B,CAC/C+D,EAAc/D,CAAI,EAClB6D,EAAc,EAAI,CACpB,EAEMoB,EAAe,MAAOC,GAAuB,CACjDlB,EAAc,EAAI,EAClB,GAAI,CACF,MAAMY,EAAI,MAAM,OAAO,OAAOM,CAAI,EAClCd,EAAM,UAAW,GAAGc,EAAK,OAAS,OAAS,OAAS,SAAS,UAAU,EACvErB,EAAc,EAAK,EACfqB,EAAK,OAAS,OAAQR,EAAA,EACrBI,EAAA,CACP,OAASD,EAAc,CACrBT,EAAM,QAASS,aAAe,MAAQA,EAAI,QAAU,kBAAkB,CACxE,QAAA,CACEb,EAAc,EAAK,CACrB,CACF,EAEMmB,GAAmB,MAAOX,GAAe,CAC7C,GAAI,CACF,MAAMI,EAAI,MAAM,OAAO,OAAOJ,CAAE,EAChCvB,EAAUwB,GAASA,EAAK,OAAQW,GAAMA,EAAE,KAAOZ,CAAE,CAAC,EAClDJ,EAAM,UAAW,cAAc,CACjC,OAASS,EAAc,CACrBT,EAAM,QAASS,aAAe,MAAQA,EAAI,QAAU,kBAAkB,CACxE,CACF,EAEMQ,GAAsB,MAAOb,GAAe,CAChD,GAAI,CACF,MAAMI,EAAI,MAAM,OAAO,OAAOJ,CAAE,EAChCrB,EAAasB,GAASA,EAAK,OAAQa,GAAMA,EAAE,KAAOd,CAAE,CAAC,EACrDJ,EAAM,UAAW,iBAAiB,CACpC,OAASS,EAAc,CACrBT,EAAM,QAASS,aAAe,MAAQA,EAAI,QAAU,kBAAkB,CACxE,CACF,EAEA,OACE7F,EAAAA,KAAC,MAAA,CAAI,UAAU,gBAEb,SAAA,CAAAA,EAAAA,KAACC,EAAO,IAAP,CACC,QAAS,CAAE,QAAS,EAAG,EAAG,EAAA,EAC1B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAA,EAC1B,WAAY,CAAE,SAAU,EAAA,EACxB,UAAU,yCAEV,SAAA,CAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAd,EAAAA,IAAC,OAAI,UAAU,wEACb,eAAC+B,EAAA,CAAO,UAAU,yBAAyB,CAAA,CAC7C,SACC,MAAA,CACC,SAAA,CAAAjB,EAAAA,KAAC,MAAA,CAAI,UAAU,4BACb,SAAA,CAAAd,EAAAA,IAAC,KAAA,CAAG,UAAU,yCAAyC,SAAA,mBAEvD,EACAA,EAAAA,IAACqH,IAAM,QAAQ,YAAY,UAAU,eAClC,SAAAvC,EAAM,OAASE,EAAS,MAAA,CAC3B,CAAA,EACF,EACAhF,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,yCAAA,CAE7C,CAAA,CAAA,CACF,CAAA,EACF,EACAc,EAAAA,KAACqB,EAAA,CACC,QAAS,IACP2E,EAAWf,IAAc,QAAU,OAAS,SAAS,EAGvD,SAAA,CAAA/F,EAAAA,IAAC4E,EAAA,CAAK,UAAU,SAAA,CAAU,EAAE,OACvBmB,IAAc,QAAU,OAAS,SAAA,CAAA,CAAA,CACxC,CAAA,CAAA,EAIF/F,EAAAA,IAACe,EAAO,IAAP,CACC,QAAS,CAAE,QAAS,EAAG,EAAG,CAAA,EAC1B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAA,EAC1B,WAAY,CAAE,MAAO,GAAK,SAAU,EAAA,EAEpC,SAAAD,EAAAA,KAACrB,GAAA,CACC,MAAOsG,EACP,cAAeC,EACf,UAAU,YAEV,SAAA,CAAAlF,EAAAA,KAACnB,EAAA,CAAS,UAAU,mBAClB,SAAA,CAAAmB,EAAAA,KAACX,EAAA,CAAY,MAAM,QAAQ,UAAU,UACnC,SAAA,CAAAH,EAAAA,IAAC+B,EAAA,CAAO,UAAU,aAAA,CAAc,EAAE,QAEjC,CAACmD,GACApE,EAAAA,KAAC,OAAA,CAAK,UAAU,qDAAqD,SAAA,CAAA,IACjEgE,EAAM,OAAO,GAAA,CAAA,CACjB,CAAA,EAEJ,EACAhE,EAAAA,KAACX,EAAA,CAAY,MAAM,WAAW,UAAU,UACtC,SAAA,CAAAH,EAAAA,IAACV,EAAA,CAAa,UAAU,aAAA,CAAc,EAAE,WAEvC,CAAC8F,GACAtE,EAAAA,KAAC,OAAA,CAAK,UAAU,qDAAqD,SAAA,CAAA,IACjEkE,EAAS,OAAO,GAAA,CAAA,CACpB,CAAA,CAAA,CAEJ,CAAA,EACF,EAEAhF,EAAAA,IAACK,EAAA,CAAY,MAAM,QACjB,SAAAL,EAAAA,IAACqE,EAAA,CACC,MAAOS,EACP,QAASI,EACT,MAAOI,EACP,KAAK,OACL,SAAU2B,GACV,QAAST,EACT,MAAO,IAAMM,EAAW,MAAM,CAAA,CAAA,EAElC,EAEA9G,EAAAA,IAACK,EAAA,CAAY,MAAM,WACjB,SAAAL,EAAAA,IAACqE,EAAA,CACC,MAAOW,EACP,QAASI,EACT,MAAOI,EACP,KAAK,UACL,SAAU2B,GACV,QAASP,EACT,MAAO,IAAME,EAAW,SAAS,CAAA,CAAA,CACnC,CACF,CAAA,CAAA,CAAA,CACF,CAAA,EAIF9G,EAAAA,IAAC4C,GAAA,CACC,KAAM8C,EACN,aAAcC,EACd,SAAUoB,EACV,WAAA/D,EACA,KAAM4C,CAAA,CAAA,EAGR5F,MAACU,IAAS,OAAAC,CAAA,CAAgB,CAAA,EAC5B,CAEJ","x_google_ignoreList":[0,1]}
@@ -1,7 +1,7 @@
1
- import{j as s}from"./vendor-motion-Dwx3-JO5.js";import{r as d}from"./vendor-react-C7pctHW3.js";import{e as Se,a as pe}from"./index-BhxU0YlT.js";import{D as Ce,a as Ee,b as ze,c as De}from"./dialog-DovgkMhT.js";import{L as me}from"./loader-circle-BTFgt3hG.js";import{S as Fe}from"./search-D1OOxb1X.js";import"./vendor-syntax-xZUI6Op9.js";import"./vendor-radix-3UdfCgs_.js";/**
1
+ import{j as s}from"./vendor-motion-Dwx3-JO5.js";import{r as d}from"./vendor-react-C7pctHW3.js";import{e as Se,a as pe}from"./index-C3YiF4qv.js";import{D as Ce,a as Ee,b as ze,c as De}from"./dialog-Bd1rELXb.js";import{L as me}from"./loader-circle-DbYKk0_Q.js";import{S as Fe}from"./search-BZsbhO0B.js";import"./vendor-syntax-xZUI6Op9.js";import"./vendor-radix-3UdfCgs_.js";/**
2
2
  * @license lucide-react v0.511.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 Le=[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]],ge=Se("network",Le),he={fact:"#3b82f6",preference:"#a78bfa",experience:"#22c55e",goal:"#f59e0b",project:"#00d4ff",person:"#ec4899",skill:"#6366f1",belief:"#f97316",observation:"#14b8a6",default:"#6b7280"};function Q(p){return he[p]||he.default}function Re(){return document.documentElement.classList.contains("dark")||document.documentElement.getAttribute("data-theme")!=="light"}function Qe(){const p=d.useRef(null),S=d.useRef(null),[b,u]=d.useState(!0),[F,q]=d.useState([]),[$,B]=d.useState([]),[R,O]=d.useState(""),[v,H]=d.useState(null),[be,J]=d.useState(!1),[G,ve]=d.useState(null),[ye,ee]=d.useState(null),[Ne,te]=d.useState(!1),[je,se]=d.useState(null),m=d.useRef({nodes:[],edges:[],positions:new Map,anchors:new Map,velocities:new Map,pan:{x:0,y:0},zoom:1,dragging:!1,dragNode:null,hoveredNode:null,selectedNode:null,lastMouse:{x:0,y:0},pressNode:null,pressX:0,pressY:0,pressT:0,moved:!1,searchQuery:"",animFrame:0,dpr:1});d.useEffect(()=>{m.current.searchQuery=R},[R]);const K=d.useCallback((e,o)=>{let t=0;for(const n of o)(n.source===e||n.target===e)&&t++;return t},[]),ne=d.useCallback((e,o,t)=>{const n=m.current,a=o/2,c=t/2;n.positions.clear(),n.anchors.clear(),n.velocities.clear(),e.forEach((l,r)=>{const i=r/e.length*Math.PI*2,D=150+Math.random()*100,C=a+D*Math.cos(i),N=c+D*Math.sin(i);n.positions.set(l.id,{x:C,y:N}),n.anchors.set(l.id,{x:C,y:N}),n.velocities.set(l.id,{seed:Math.random(),freq:9e-5+Math.random()*7e-5,amp:.25+Math.random()*.25})})},[]),oe=d.useCallback((e,o,t,n)=>{const a=m.current,c=80;for(let l=0;l<c;l++){const r=t*n,i=Math.sqrt(r/Math.max(1,e.length)),D=i*i,C=.01,N=new Map;e.forEach(x=>N.set(x.id,{fx:0,fy:0}));for(let x=0;x<e.length;x++)for(let f=x+1;f<e.length;f++){const h=a.positions.get(e[x].id),L=a.positions.get(e[f].id);if(!h||!L)continue;const z=h.x-L.x,j=h.y-L.y,E=Math.max(Math.sqrt(z*z+j*j),1),P=D/(E*E),W=z/E*P,T=j/E*P;N.get(e[x].id).fx+=W,N.get(e[x].id).fy+=T,N.get(e[f].id).fx-=W,N.get(e[f].id).fy-=T}o.forEach(x=>{const f=a.positions.get(x.source),h=a.positions.get(x.target);if(!f||!h)return;const L=h.x-f.x,z=h.y-f.y,j=N.get(x.source),E=N.get(x.target);j&&(j.fx+=L*C,j.fy+=z*C),E&&(E.fx-=L*C,E.fy-=z*C)});const g=t/2,y=n/2,k=.001;e.forEach(x=>{const f=a.positions.get(x.id),h=N.get(x.id);!f||!h||(h.fx+=(g-f.x)*k,h.fy+=(y-f.y)*k)});const M=.1;e.forEach(x=>{const f=N.get(x.id),h=a.positions.get(x.id);!f||!h||(h.x+=f.fx*M,h.y+=f.fy*M)})}e.forEach(l=>{const r=a.positions.get(l.id),i=a.anchors.get(l.id);r&&i&&(i.x=r.x,i.y=r.y)})},[]),Y=d.useCallback(()=>{const e=p.current,o=S.current;if(!e||!o)return;const t=window.devicePixelRatio||1;m.current.dpr=t;const n=o.clientWidth,a=o.clientHeight;e.width=n*t,e.height=a*t,e.style.width=`${n}px`,e.style.height=`${a}px`},[]),X=d.useCallback((e,o)=>{const t=m.current,n=t.dpr;return{x:(e*n-t.pan.x)/t.zoom,y:(o*n-t.pan.y)/t.zoom}},[]),I=d.useCallback((e,o)=>{const t=m.current;for(let n=t.nodes.length-1;n>=0;n--){const a=t.nodes[n],c=t.positions.get(a.id);if(!c)continue;const l=(a.size||8)*1.5,r=e-c.x,i=o-c.y;if(r*r+i*i<l*l)return a}return null},[]),ae=d.useCallback(e=>{const o=p.current;if(!o)return;const t=o.getContext("2d");if(!t)return;const n=m.current,a=n.dpr,c=o.width,l=o.height,r=Re();t.clearRect(0,0,c,l),t.fillStyle=r?"#0a0e14":"#ffffff",t.fillRect(0,0,c,l),t.save(),t.translate(n.pan.x,n.pan.y),t.scale(n.zoom,n.zoom);const i=n.hoveredNode||n.selectedNode,D=new Set,C=new Set;i&&(n.edges.forEach((g,y)=>{g.source===i.id&&(D.add(g.target),C.add(y)),g.target===i.id&&(D.add(g.source),C.add(y))}),D.add(i.id)),n.edges.forEach((g,y)=>{const k=n.positions.get(g.source),M=n.positions.get(g.target);if(!k||!M)return;if(C.has(y))t.strokeStyle=r?"rgba(0,212,255,0.7)":"rgba(0,136,170,0.6)",t.lineWidth=2*a/n.zoom;else if(i)t.strokeStyle=r?"rgba(0,212,255,0.06)":"rgba(0,136,170,0.05)",t.lineWidth=.6*a/n.zoom;else{const f=(Math.sin(e*22e-5+y*1.3)+1)*.5,h=(r?.16:.13)+f*.06;t.strokeStyle=r?`rgba(0,212,255,${h.toFixed(3)})`:`rgba(0,136,170,${h.toFixed(3)})`,t.lineWidth=(.7+f*.3)*a/n.zoom}t.beginPath(),t.moveTo(k.x,k.y),t.lineTo(M.x,M.y),t.stroke()});const N=n.searchQuery.toLowerCase();n.nodes.forEach(g=>{var E,P,W;const y=n.positions.get(g.id);if(!y)return;const k=((E=n.hoveredNode)==null?void 0:E.id)===g.id,M=((P=n.selectedNode)==null?void 0:P.id)===g.id,x=D.has(g.id),f=n.velocities.get(g.id),h=1+Math.sin(e*35e-5+((f==null?void 0:f.seed)??0)*11.7)*.01,z=(g.size||8)*a*(k||M?1.4:h);let j=1;if(N?j=(g.fullLabel||g.label).toLowerCase().includes(N)?1:.12:i&&(j=k||M||x?1:.18),t.globalAlpha=j,(k||M)&&(t.beginPath(),t.arc(y.x,y.y,z+5*a/n.zoom,0,Math.PI*2),t.fillStyle=r?"rgba(0,212,255,0.14)":"rgba(0,136,170,0.12)",t.fill()),t.beginPath(),t.arc(y.x,y.y,z,0,Math.PI*2),t.fillStyle=Q(g.type),t.fill(),k||M?(t.strokeStyle=r?"#f0f0f0":"#1a1a1a",t.lineWidth=2*a/n.zoom,t.stroke()):x&&i&&(t.strokeStyle=r?"rgba(0,212,255,0.65)":"rgba(0,136,170,0.55)",t.lineWidth=1.8*a/n.zoom,t.stroke()),k||M){const T=Math.max(10*a,11*a/n.zoom);t.font=`${T}px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,t.textAlign="center",t.textBaseline="top";const ie=g.label,de=t.measureText(ie),ue=6*a,fe=3*a,we=y.x-de.width/2-ue,xe=y.y+z+4*a,ke=de.width+ue*2,Me=T+fe*2;t.fillStyle=r?"rgba(10,14,20,0.92)":"rgba(255,255,255,0.95)",t.beginPath(),(W=t.roundRect)==null||W.call(t,we,xe,ke,Me,4*a),t.fill(),t.fillStyle=r?`rgba(240,240,240,${j})`:`rgba(20,20,20,${j})`,t.fillText(ie,y.x,xe+fe)}t.globalAlpha=1}),t.restore()},[]),re=d.useCallback(e=>{const o=m.current;o.nodes.forEach(t=>{var l;if(((l=o.dragNode)==null?void 0:l.id)===t.id)return;const n=o.positions.get(t.id),a=o.anchors.get(t.id),c=o.velocities.get(t.id);!n||!a||!c||(n.x=a.x+Math.sin(e*c.freq+c.seed*11.1)*c.amp,n.y=a.y+Math.cos(e*c.freq*.87+c.seed*17.3)*c.amp)})},[]),ce=d.useCallback(async e=>{ve(e),ee(null),se(null),J(!0),te(!0),m.current.selectedNode=e;try{const o=await pe.brain.memory.get(e.id);ee(o)}catch(o){se(o instanceof Error?o.message:"Failed to load details")}finally{te(!1)}},[]),U=d.useCallback(e=>{const o=p.current;if(!o)return;const t=o.getBoundingClientRect(),n=e.clientX-t.left,a=e.clientY-t.top,c=X(n,a),l=I(c.x,c.y),r=m.current;r.pressNode=l,r.pressX=e.clientX,r.pressY=e.clientY,r.pressT=performance.now(),r.moved=!1,l?r.dragNode=l:r.dragging=!0,r.lastMouse={x:e.clientX,y:e.clientY}},[X,I]),_=d.useCallback(e=>{const o=p.current;if(!o)return;const t=o.getBoundingClientRect(),n=e.clientX-t.left,a=e.clientY-t.top,c=m.current;if(c.pressT&&!c.moved){const l=e.clientX-c.pressX,r=e.clientY-c.pressY;l*l+r*r>16&&(c.moved=!0)}if(c.dragNode){const l=X(n,a),r=c.positions.get(c.dragNode.id),i=c.anchors.get(c.dragNode.id);r&&(r.x=l.x,r.y=l.y),i&&(i.x=l.x,i.y=l.y)}else if(c.dragging){const l=c.dpr;c.pan.x+=(e.clientX-c.lastMouse.x)*l,c.pan.y+=(e.clientY-c.lastMouse.y)*l}else{const l=X(n,a),r=I(l.x,l.y);r!==c.hoveredNode?(c.hoveredNode=r,H(r?{x:e.clientX-t.left+14,y:e.clientY-t.top+14,node:r,connections:K(r.id,c.edges)}:null)):r&&v&&H(i=>i?{...i,x:e.clientX-t.left+14,y:e.clientY-t.top+14}:null)}c.lastMouse={x:e.clientX,y:e.clientY}},[X,I,K,v]),A=d.useCallback(()=>{const e=m.current,o=!e.moved&&e.pressNode!==null&&performance.now()-e.pressT<500,t=e.pressNode;e.dragNode=null,e.dragging=!1,e.pressNode=null,e.pressT=0,e.moved=!1,o&&t&&ce(t)},[ce]),V=d.useCallback(e=>{e.preventDefault();const o=m.current,t=e.deltaY>0?.92:1.08,n=Math.min(3,Math.max(.3,o.zoom*t)),a=n/o.zoom,c=p.current;if(!c)return;const l=c.getBoundingClientRect(),r=(e.clientX-l.left)*o.dpr,i=(e.clientY-l.top)*o.dpr;o.pan.x=r-(r-o.pan.x)*a,o.pan.y=i-(i-o.pan.y)*a,o.zoom=n},[]);d.useEffect(()=>{let e=!1;async function o(){u(!0);try{const t=await pe.brain.graph();if(e)return;const n=t.nodes||[],a=t.edges||[];q(n),B(a);const c=m.current;c.nodes=n,c.edges=a,Y();const l=p.current,r=l?l.width:800,i=l?l.height:600;ne(n,r,i),oe(n,a,r,i)}catch(t){console.error("Failed to load graph data:",t)}e||u(!1)}return o(),()=>{e=!0}},[ne,oe,Y]),d.useEffect(()=>{const e=p.current;if(!e||b)return;Y();let o=!0;const t=a=>{o&&(re(a),ae(a),m.current.animFrame=requestAnimationFrame(t))};m.current.animFrame=requestAnimationFrame(t),e.addEventListener("mousedown",U),e.addEventListener("mousemove",_),e.addEventListener("mouseup",A),e.addEventListener("mouseleave",A),e.addEventListener("wheel",V,{passive:!1});const n=()=>{Y()};return window.addEventListener("resize",n),()=>{o=!1,cancelAnimationFrame(m.current.animFrame),e.removeEventListener("mousedown",U),e.removeEventListener("mousemove",_),e.removeEventListener("mouseup",A),e.removeEventListener("mouseleave",A),e.removeEventListener("wheel",V),window.removeEventListener("resize",n)}},[b,Y,re,ae,U,_,A,V]);const le=F.length?[...new Set(F.map(e=>e.type))].sort():[];return s.jsxs("div",{className:"flex h-full flex-col",children:[s.jsx("div",{className:"flex items-center justify-between border-b border-border/50 bg-background/80 px-6 py-4 backdrop-blur-sm",children:s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-lg bg-[#00d4ff]/10",children:s.jsx(ge,{className:"h-5 w-5 text-[#00d4ff]"})}),s.jsxs("div",{children:[s.jsx("h1",{className:"text-xl font-semibold tracking-tight text-foreground",children:"Knowledge Graph"}),s.jsx("p",{className:"text-xs text-muted-foreground",children:"Visualize connections in Mercury's memory"})]})]})}),s.jsxs("div",{ref:S,className:"relative flex-1",style:{minHeight:500},children:[b&&s.jsx("div",{className:"absolute inset-0 z-20 flex items-center justify-center bg-background/60 backdrop-blur-sm",children:s.jsxs("div",{className:"flex flex-col items-center gap-3",children:[s.jsx(me,{className:"h-8 w-8 animate-spin text-[#00d4ff]"}),s.jsx("span",{className:"text-sm text-muted-foreground",children:"Loading knowledge graph..."})]})}),!b&&F.length===0&&s.jsx("div",{className:"absolute inset-0 z-20 flex items-center justify-center",children:s.jsxs("div",{className:"flex flex-col items-center gap-3 text-center",children:[s.jsx(ge,{className:"h-12 w-12 text-muted-foreground/40"}),s.jsx("p",{className:"text-sm text-muted-foreground",children:"No knowledge graph data available yet"})]})}),s.jsx("canvas",{ref:p,className:`absolute inset-0 h-full w-full ${v?"cursor-pointer":"cursor-grab"}`}),s.jsx("div",{className:"absolute right-4 top-4 z-10",children:s.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border/60 bg-background/90 px-3 py-1.5 shadow-lg backdrop-blur-sm",children:[s.jsx(Fe,{className:"h-4 w-4 text-muted-foreground"}),s.jsx("input",{type:"text",placeholder:"Search nodes...",value:R,onChange:e=>O(e.target.value),className:"w-48 border-none bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground/60"})]})}),le.length>0&&s.jsxs("div",{className:"absolute bottom-4 left-4 z-10 rounded-lg border border-border/60 bg-background/90 px-3 py-2.5 shadow-lg backdrop-blur-sm",children:[s.jsx("p",{className:"mb-1.5 text-[10px] font-medium uppercase tracking-wider text-muted-foreground",children:"Node Types"}),s.jsx("div",{className:"flex flex-col gap-1",children:le.map(e=>s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"inline-block h-2.5 w-2.5 rounded-full",style:{backgroundColor:Q(e)}}),s.jsx("span",{className:"text-[11px] capitalize text-foreground/80",children:e})]},e))})]}),v&&s.jsxs("div",{className:"pointer-events-none absolute z-30 rounded-lg border border-border/60 bg-popover/95 px-3 py-2 shadow-xl backdrop-blur-sm",style:{left:v.x,top:v.y,maxWidth:320,transform:S.current&&v.x+340>S.current.clientWidth?"translateX(calc(-100% - 28px))":void 0},children:[s.jsx("p",{className:"break-words text-sm font-medium leading-snug text-foreground",children:v.node.fullLabel||v.node.label}),s.jsxs("div",{className:"mt-1 flex items-center gap-2",children:[s.jsx("span",{className:"inline-block h-2 w-2 rounded-full",style:{backgroundColor:Q(v.node.type)}}),s.jsx("span",{className:"text-xs capitalize text-muted-foreground",children:v.node.type}),s.jsx("span",{className:"text-xs text-muted-foreground/60",children:"·"}),s.jsxs("span",{className:"text-xs text-muted-foreground",children:[v.connections," connection",v.connections!==1?"s":""]})]}),s.jsx("p",{className:"mt-1.5 text-[10px] uppercase tracking-wider text-muted-foreground/70",children:"Click for details"})]})]}),s.jsx(Te,{open:be,onOpenChange:e=>{J(e),e||(m.current.selectedNode=null)},node:G,memory:ye,loading:Ne,error:je,connections:G?K(G.id,$):0})]})}function Z(p){if(!p)return"—";const S=typeof p=="number"?new Date(p):new Date(p);return Number.isNaN(S.getTime())?String(p):S.toLocaleString()}function Te({open:p,onOpenChange:S,node:b,memory:u,loading:F,error:q,connections:$}){if(!b)return null;const B=Q(b.type),R=b.fullLabel||b.label,O=(u==null?void 0:u.summary)||R,v=u==null?void 0:u.detail;return s.jsx(Ce,{open:p,onOpenChange:S,children:s.jsxs(Ee,{className:"max-w-2xl",children:[s.jsxs(ze,{children:[s.jsxs("div",{className:"flex items-center gap-2",children:[s.jsx("span",{className:"inline-block h-3 w-3 rounded-full",style:{backgroundColor:B}}),s.jsx("span",{className:"text-xs font-medium uppercase tracking-wider text-muted-foreground",children:b.type})]}),s.jsx(De,{className:"mt-1 break-words text-lg leading-snug",children:O})]}),F&&s.jsxs("div",{className:"flex items-center gap-2 py-4 text-sm text-muted-foreground",children:[s.jsx(me,{className:"h-4 w-4 animate-spin"}),"Loading details…"]}),!F&&u&&s.jsxs("div",{className:"space-y-4",children:[v&&s.jsxs("div",{children:[s.jsx("p",{className:"mb-1 text-[10px] font-medium uppercase tracking-wider text-muted-foreground",children:"Detail"}),s.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-foreground/90",children:v})]}),s.jsxs("div",{className:"grid grid-cols-2 gap-3 text-xs sm:grid-cols-3",children:[u.scope&&s.jsx(w,{label:"Scope",value:u.scope}),typeof u.importance=="number"&&s.jsx(w,{label:"Importance",value:u.importance.toFixed(2)}),typeof u.confidence=="number"&&s.jsx(w,{label:"Confidence",value:u.confidence.toFixed(2)}),typeof u.evidenceCount=="number"&&s.jsx(w,{label:"Evidence",value:String(u.evidenceCount)}),s.jsx(w,{label:"Connections",value:String($)}),u.evidenceKind&&s.jsx(w,{label:"Source",value:u.evidenceKind}),s.jsx(w,{label:"Created",value:Z(u.createdAt)}),u.updatedAt&&s.jsx(w,{label:"Updated",value:Z(u.updatedAt)}),u.lastSeenAt&&s.jsx(w,{label:"Last seen",value:Z(u.lastSeenAt)})]}),s.jsx("div",{className:"border-t border-border/40 pt-2",children:s.jsx("p",{className:"font-mono text-[10px] text-muted-foreground/70",children:u.id})})]}),!F&&!u&&s.jsxs("div",{className:"space-y-3",children:[s.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-relaxed text-foreground/90",children:R}),s.jsxs("div",{className:"grid grid-cols-2 gap-3 text-xs",children:[s.jsx(w,{label:"Type",value:b.type}),s.jsx(w,{label:"Connections",value:String($)}),typeof b.importance=="number"&&s.jsx(w,{label:"Importance",value:b.importance.toFixed(2)}),typeof b.confidence=="number"&&s.jsx(w,{label:"Confidence",value:b.confidence.toFixed(2)})]}),q&&s.jsxs("p",{className:"text-xs text-muted-foreground/70",children:["Could not load full record: ",q]}),s.jsx("p",{className:"font-mono text-[10px] text-muted-foreground/70",children:b.id})]})]})})}function w({label:p,value:S}){return s.jsxs("div",{children:[s.jsx("p",{className:"text-[10px] font-medium uppercase tracking-wider text-muted-foreground",children:p}),s.jsx("p",{className:"mt-0.5 break-words text-foreground/90",children:S})]})}export{Qe as GraphPage};
7
- //# sourceMappingURL=Graph-C3eHp3_J.js.map
7
+ //# sourceMappingURL=Graph-DnlOWkay.js.map