@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.
- package/README.md +101 -1
- package/README.zh-CN.md +265 -140
- package/dist/index.js +4473 -1842
- package/dist/index.js.map +1 -1
- package/dist/web/ui/assets/{Chat-DCFkzIwn.js → Chat-DXSn2dY8.js} +2 -2
- package/dist/web/ui/assets/{Chat-DCFkzIwn.js.map → Chat-DXSn2dY8.js.map} +1 -1
- package/dist/web/ui/assets/{Dashboard-B81ollv8.js → Dashboard-1rlAqQ-Y.js} +2 -2
- package/dist/web/ui/assets/{Dashboard-B81ollv8.js.map → Dashboard-1rlAqQ-Y.js.map} +1 -1
- package/dist/web/ui/assets/{Goals-D0cR8yIP.js → Goals-CgSUAXLH.js} +2 -2
- package/dist/web/ui/assets/{Goals-D0cR8yIP.js.map → Goals-CgSUAXLH.js.map} +1 -1
- package/dist/web/ui/assets/{Graph-C3eHp3_J.js → Graph-DnlOWkay.js} +2 -2
- package/dist/web/ui/assets/{Graph-C3eHp3_J.js.map → Graph-DnlOWkay.js.map} +1 -1
- package/dist/web/ui/assets/{Kanban-DrkTRyni.js → Kanban-DRlNiNRF.js} +2 -2
- package/dist/web/ui/assets/{Kanban-DrkTRyni.js.map → Kanban-DRlNiNRF.js.map} +1 -1
- package/dist/web/ui/assets/{Login-GRQ-LjgN.js → Login-BP5524pC.js} +2 -2
- package/dist/web/ui/assets/{Login-GRQ-LjgN.js.map → Login-BP5524pC.js.map} +1 -1
- package/dist/web/ui/assets/{MarkdownRenderer-Dvh1jwyj.js → MarkdownRenderer-B9KGVD0X.js} +2 -2
- package/dist/web/ui/assets/{MarkdownRenderer-Dvh1jwyj.js.map → MarkdownRenderer-B9KGVD0X.js.map} +1 -1
- package/dist/web/ui/assets/{Memory-dAZsKmWz.js → Memory-BOQEY0H8.js} +2 -2
- package/dist/web/ui/assets/{Memory-dAZsKmWz.js.map → Memory-BOQEY0H8.js.map} +1 -1
- package/dist/web/ui/assets/{Permissions-DCiyUUfI.js → Permissions-jbFH-toa.js} +2 -2
- package/dist/web/ui/assets/{Permissions-DCiyUUfI.js.map → Permissions-jbFH-toa.js.map} +1 -1
- package/dist/web/ui/assets/{PersonDetail-iZgApJog.js → PersonDetail-Ca8B9io8.js} +2 -2
- package/dist/web/ui/assets/{PersonDetail-iZgApJog.js.map → PersonDetail-Ca8B9io8.js.map} +1 -1
- package/dist/web/ui/assets/{Persons-Bs_HhYjC.js → Persons-epdmUeBM.js} +2 -2
- package/dist/web/ui/assets/{Persons-Bs_HhYjC.js.map → Persons-epdmUeBM.js.map} +1 -1
- package/dist/web/ui/assets/{Providers-CL6wMWni.js → Providers-Bm8sZNZo.js} +2 -2
- package/dist/web/ui/assets/{Providers-CL6wMWni.js.map → Providers-Bm8sZNZo.js.map} +1 -1
- package/dist/web/ui/assets/{Schedules-BQwE1hP5.js → Schedules-BZKhm9R7.js} +2 -2
- package/dist/web/ui/assets/{Schedules-BQwE1hP5.js.map → Schedules-BZKhm9R7.js.map} +1 -1
- package/dist/web/ui/assets/{Settings-26SF-okR.js → Settings-Hii-5oku.js} +2 -2
- package/dist/web/ui/assets/{Settings-26SF-okR.js.map → Settings-Hii-5oku.js.map} +1 -1
- package/dist/web/ui/assets/Skills-BHJp2CgD.js +17 -0
- package/dist/web/ui/assets/Skills-BHJp2CgD.js.map +1 -0
- package/dist/web/ui/assets/{Tasks-DbwRozzx.js → Tasks-D36pqkro.js} +2 -2
- package/dist/web/ui/assets/{Tasks-DbwRozzx.js.map → Tasks-D36pqkro.js.map} +1 -1
- package/dist/web/ui/assets/{Usage-i_q6Ri4s.js → Usage-CmjaYrsT.js} +2 -2
- package/dist/web/ui/assets/{Usage-i_q6Ri4s.js.map → Usage-CmjaYrsT.js.map} +1 -1
- package/dist/web/ui/assets/{Workspace-ZR5syf-9.js → Workspace-BYLf-wTJ.js} +2 -2
- package/dist/web/ui/assets/{Workspace-ZR5syf-9.js.map → Workspace-BYLf-wTJ.js.map} +1 -1
- package/dist/web/ui/assets/{activity-CIP1IzSg.js → activity-MOTqH8zM.js} +2 -2
- package/dist/web/ui/assets/{activity-CIP1IzSg.js.map → activity-MOTqH8zM.js.map} +1 -1
- package/dist/web/ui/assets/{alert-dialog-CW-j2nG4.js → alert-dialog-MbYSbZx5.js} +2 -2
- package/dist/web/ui/assets/{alert-dialog-CW-j2nG4.js.map → alert-dialog-MbYSbZx5.js.map} +1 -1
- package/dist/web/ui/assets/{arrow-left-D2YO-iMS.js → arrow-left-CtqQsBC6.js} +2 -2
- package/dist/web/ui/assets/{arrow-left-D2YO-iMS.js.map → arrow-left-CtqQsBC6.js.map} +1 -1
- package/dist/web/ui/assets/{avatar-BLsf3GhK.js → avatar-BIYaY7pR.js} +2 -2
- package/dist/web/ui/assets/{avatar-BLsf3GhK.js.map → avatar-BIYaY7pR.js.map} +1 -1
- package/dist/web/ui/assets/{badge-DfDJNUtd.js → badge-CUJiWF1y.js} +2 -2
- package/dist/web/ui/assets/{badge-DfDJNUtd.js.map → badge-CUJiWF1y.js.map} +1 -1
- package/dist/web/ui/assets/{button-TaFPR-zy.js → button-CNasMlFE.js} +2 -2
- package/dist/web/ui/assets/{button-TaFPR-zy.js.map → button-CNasMlFE.js.map} +1 -1
- package/dist/web/ui/assets/{card-DAYo4Zl5.js → card-BdsEOP7t.js} +2 -2
- package/dist/web/ui/assets/{card-DAYo4Zl5.js.map → card-BdsEOP7t.js.map} +1 -1
- package/dist/web/ui/assets/{chevron-down-CQi0yuay.js → chevron-down-CB9J_vvZ.js} +2 -2
- package/dist/web/ui/assets/{chevron-down-CQi0yuay.js.map → chevron-down-CB9J_vvZ.js.map} +1 -1
- package/dist/web/ui/assets/{circle-check-DweDcOkA.js → circle-check-DvGSe1uZ.js} +2 -2
- package/dist/web/ui/assets/{circle-check-DweDcOkA.js.map → circle-check-DvGSe1uZ.js.map} +1 -1
- package/dist/web/ui/assets/{circle-x-BmL20etA.js → circle-x-CyaGJ_BM.js} +2 -2
- package/dist/web/ui/assets/{circle-x-BmL20etA.js.map → circle-x-CyaGJ_BM.js.map} +1 -1
- package/dist/web/ui/assets/{dialog-DovgkMhT.js → dialog-Bd1rELXb.js} +2 -2
- package/dist/web/ui/assets/{dialog-DovgkMhT.js.map → dialog-Bd1rELXb.js.map} +1 -1
- package/dist/web/ui/assets/{download-_QBatDio.js → download-C8RvlFqO.js} +2 -2
- package/dist/web/ui/assets/{download-_QBatDio.js.map → download-C8RvlFqO.js.map} +1 -1
- package/dist/web/ui/assets/{eye-Wpgtfmgw.js → eye-BJ0NucMz.js} +2 -2
- package/dist/web/ui/assets/{eye-Wpgtfmgw.js.map → eye-BJ0NucMz.js.map} +1 -1
- package/dist/web/ui/assets/{file-text-2EGFNyc1.js → file-text-BWWBuD_N.js} +2 -2
- package/dist/web/ui/assets/{file-text-2EGFNyc1.js.map → file-text-BWWBuD_N.js.map} +1 -1
- package/dist/web/ui/assets/{folder-open-C-OiZn9P.js → folder-open-BwjemFy7.js} +2 -2
- package/dist/web/ui/assets/{folder-open-C-OiZn9P.js.map → folder-open-BwjemFy7.js.map} +1 -1
- package/dist/web/ui/assets/{git-branch-BT9gCKgG.js → git-branch-D9JVASpC.js} +2 -2
- package/dist/web/ui/assets/{git-branch-BT9gCKgG.js.map → git-branch-D9JVASpC.js.map} +1 -1
- package/dist/web/ui/assets/{index-BhxU0YlT.js → index-C3YiF4qv.js} +6 -6
- package/dist/web/ui/assets/index-C3YiF4qv.js.map +1 -0
- package/dist/web/ui/assets/{index-CUT6Fr2C.js → index-CaqLZNof.js} +2 -2
- package/dist/web/ui/assets/{index-CUT6Fr2C.js.map → index-CaqLZNof.js.map} +1 -1
- package/dist/web/ui/assets/index-CuhiuVab.css +1 -0
- package/dist/web/ui/assets/{input-L1uz5xAQ.js → input-CH3dmo9r.js} +2 -2
- package/dist/web/ui/assets/{input-L1uz5xAQ.js.map → input-CH3dmo9r.js.map} +1 -1
- package/dist/web/ui/assets/{loader-circle-BTFgt3hG.js → loader-circle-DbYKk0_Q.js} +2 -2
- package/dist/web/ui/assets/{loader-circle-BTFgt3hG.js.map → loader-circle-DbYKk0_Q.js.map} +1 -1
- package/dist/web/ui/assets/{pencil-uxK07iYy.js → pencil-gNDEMhav.js} +2 -2
- package/dist/web/ui/assets/{pencil-uxK07iYy.js.map → pencil-gNDEMhav.js.map} +1 -1
- package/dist/web/ui/assets/{plus-DcWFYr4m.js → plus-7rbHkByr.js} +2 -2
- package/dist/web/ui/assets/{plus-DcWFYr4m.js.map → plus-7rbHkByr.js.map} +1 -1
- package/dist/web/ui/assets/{power-DVIqVIMj.js → power-BS7gCDWs.js} +2 -2
- package/dist/web/ui/assets/{power-DVIqVIMj.js.map → power-BS7gCDWs.js.map} +1 -1
- package/dist/web/ui/assets/{progress-DMwOdxli.js → progress-ZzhsBV2v.js} +2 -2
- package/dist/web/ui/assets/{progress-DMwOdxli.js.map → progress-ZzhsBV2v.js.map} +1 -1
- package/dist/web/ui/assets/{search-D1OOxb1X.js → search-BZsbhO0B.js} +2 -2
- package/dist/web/ui/assets/{search-D1OOxb1X.js.map → search-BZsbhO0B.js.map} +1 -1
- package/dist/web/ui/assets/{select-Dnx_bUgy.js → select-vRSgBrHz.js} +2 -2
- package/dist/web/ui/assets/{select-Dnx_bUgy.js.map → select-vRSgBrHz.js.map} +1 -1
- package/dist/web/ui/assets/{send-D4uxqmyH.js → send-BkyTIUtJ.js} +2 -2
- package/dist/web/ui/assets/{send-D4uxqmyH.js.map → send-BkyTIUtJ.js.map} +1 -1
- package/dist/web/ui/assets/{sparkles-DLSJA4xU.js → sparkles-DcP24GEL.js} +2 -2
- package/dist/web/ui/assets/{sparkles-DLSJA4xU.js.map → sparkles-DcP24GEL.js.map} +1 -1
- package/dist/web/ui/assets/{switch-CvDDbCUA.js → switch-LRN9wWy2.js} +2 -2
- package/dist/web/ui/assets/{switch-CvDDbCUA.js.map → switch-LRN9wWy2.js.map} +1 -1
- package/dist/web/ui/assets/{terminal-DI3J3W_z.js → terminal-CWG62zdD.js} +2 -2
- package/dist/web/ui/assets/{terminal-DI3J3W_z.js.map → terminal-CWG62zdD.js.map} +1 -1
- package/dist/web/ui/assets/{textarea-CXLsr8tf.js → textarea-CXh3tmJ1.js} +2 -2
- package/dist/web/ui/assets/{textarea-CXLsr8tf.js.map → textarea-CXh3tmJ1.js.map} +1 -1
- package/dist/web/ui/assets/{zap-C-0oH5gt.js → zap-BEfqVtvZ.js} +2 -2
- package/dist/web/ui/assets/{zap-C-0oH5gt.js.map → zap-BEfqVtvZ.js.map} +1 -1
- package/dist/web/ui/index.html +2 -2
- package/package.json +9 -4
- package/dist/web/ui/assets/Skills-DANyYK_d.js +0 -7
- package/dist/web/ui/assets/Skills-DANyYK_d.js.map +0 -1
- package/dist/web/ui/assets/index-BhxU0YlT.js.map +0 -1
- package/dist/web/ui/assets/index-DOw1nKre.css +0 -1
- package/dist/web/ui/sw.js.map +0 -1
- package/dist/web/ui/workbox-0bb07689.js +0 -3
- package/dist/web/ui/workbox-0bb07689.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Kanban-DrkTRyni.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-dot.js","../../node_modules/lucide-react/dist/esm/icons/columns-3.js","../../node_modules/lucide-react/dist/esm/icons/image.js","../../node_modules/lucide-react/dist/esm/icons/link-2.js","../../node_modules/lucide-react/dist/esm/icons/paperclip.js","../../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js","../../node_modules/lucide-react/dist/esm/icons/square.js","../../node_modules/lucide-react/dist/esm/icons/tag.js","../../src/components/ui/sheet.tsx","../../src/pages/Kanban.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 [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }]\n];\nconst CircleDot = createLucideIcon(\"circle-dot\", __iconNode);\n\nexport { __iconNode, CircleDot as default };\n//# sourceMappingURL=circle-dot.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 [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"M15 3v18\", key: \"14nvp0\" }]\n];\nconst Columns3 = createLucideIcon(\"columns-3\", __iconNode);\n\nexport { __iconNode, Columns3 as default };\n//# sourceMappingURL=columns-3.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 [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n];\nconst Image = createLucideIcon(\"image\", __iconNode);\n\nexport { __iconNode, Image as default };\n//# sourceMappingURL=image.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 [\"path\", { d: \"M9 17H7A5 5 0 0 1 7 7h2\", key: \"8i5ue5\" }],\n [\"path\", { d: \"M15 7h2a5 5 0 1 1 0 10h-2\", key: \"1b9ql8\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"12\", y2: \"12\", key: \"1jonct\" }]\n];\nconst Link2 = createLucideIcon(\"link-2\", __iconNode);\n\nexport { __iconNode, Link2 as default };\n//# sourceMappingURL=link-2.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 [\"path\", { d: \"M13.234 20.252 21 12.3\", key: \"1cbrk9\" }],\n [\n \"path\",\n {\n d: \"m16 6-8.414 8.586a2 2 0 0 0 0 2.828 2 2 0 0 0 2.828 0l8.414-8.586a4 4 0 0 0 0-5.656 4 4 0 0 0-5.656 0l-8.415 8.585a6 6 0 1 0 8.486 8.486\",\n key: \"1pkts6\"\n }\n ]\n];\nconst Paperclip = createLucideIcon(\"paperclip\", __iconNode);\n\nexport { __iconNode, Paperclip as default };\n//# sourceMappingURL=paperclip.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 [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.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 [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }]\n];\nconst Square = createLucideIcon(\"square\", __iconNode);\n\nexport { __iconNode, Square as default };\n//# sourceMappingURL=square.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: \"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\",\n key: \"vktsd0\"\n }\n ],\n [\"circle\", { cx: \"7.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"kqv944\" }]\n];\nconst Tag = createLucideIcon(\"tag\", __iconNode);\n\nexport { __iconNode, Tag as default };\n//# sourceMappingURL=tag.js.map\n","import * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\nconst Sheet = SheetPrimitive.Root;\nconst SheetTrigger = SheetPrimitive.Trigger;\nconst SheetClose = SheetPrimitive.Close;\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n \"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b border-border data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom:\n \"inset-x-0 bottom-0 border-t border-border data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r border-border sm:max-w-sm data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left\",\n right:\n \"inset-y-0 right-0 h-full w-3/4 border-l border-border sm:max-w-sm data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n);\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n {children}\n </SheetPrimitive.Content>\n </SheetPortal>\n));\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold text-foreground\", className)}\n {...props}\n />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","/* ═══════════════════════════════════════════════════════════════\n Mercury Kanban — Alive Board for AI Agent Task Management\n Smart Execute · Dependencies · Comments · Attachments · Labels\n ═══════════════════════════════════════════════════════════════ */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useParams, useNavigate } from \"react-router-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n DndContext,\n DragOverlay,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport {\n ArrowLeft,\n CheckCircle2,\n ChevronDown,\n ChevronRight,\n CircleDot,\n Clock,\n Columns3,\n Download,\n Eye,\n FileText,\n GitBranch,\n Image,\n Link2,\n Loader2,\n MessageSquare,\n Paperclip,\n Pause,\n Pencil,\n Play,\n Plus,\n Power,\n PowerOff,\n RefreshCw,\n RotateCcw,\n Send,\n Sparkles,\n Square,\n Tag,\n Trash2,\n X,\n XCircle,\n Zap,\n} from \"lucide-react\";\n\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Input } from \"@/components/ui/input\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n DialogClose,\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 {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"@/components/ui/sheet\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@/components/ui/collapsible\";\nimport { MarkdownRenderer } from \"@/components/chat/MarkdownRenderer\";\nimport { cn } from \"@/lib/utils\";\nimport { formatDate, formatTokens, truncate } from \"@/lib/utils\";\nimport api, {\n type Board,\n type BoardCard,\n type BoardResources,\n type CardComment,\n type CardAttachment,\n type CardLabel,\n type ExecutionPlan,\n} from \"@/lib/api\";\n\n// ── Constants ──────────────────────────────────────────────────\n\ntype CardStatus = BoardCard[\"status\"];\ntype CardPriority = NonNullable<BoardCard[\"priority\"]>;\n\nconst COLUMNS: { key: CardStatus; label: string }[] = [\n { key: \"pending\", label: \"To Do\" },\n { key: \"running\", label: \"In Progress\" },\n { key: \"done\", label: \"Done\" },\n { key: \"failed\", label: \"Blocked\" },\n];\n\nconst PRIORITY_CONFIG: Record<string, { label: string; color: string }> = {\n low: { label: \"Low\", color: \"text-muted-foreground border-muted-foreground/40\" },\n normal: { label: \"Med\", color: \"text-yellow-400 border-yellow-400/40\" },\n medium: { label: \"Med\", color: \"text-yellow-400 border-yellow-400/40\" },\n high: { label: \"High\", color: \"text-orange-400 border-orange-400/40\" },\n critical: { label: \"Crit\", color: \"text-red-400 border-red-400/40\" },\n};\n\nconst STATUS_BORDER: Record<string, string> = {\n pending: \"border-l-muted-foreground/40 border-dashed\",\n running: \"border-l-[#00d4ff]\",\n paused: \"border-l-yellow-400\",\n done: \"border-l-emerald-500\",\n failed: \"border-l-red-500\",\n question: \"border-l-purple-500\",\n};\n\nconst LABEL_PRESETS = [\n { name: \"Bug\", color: \"#ef4444\" },\n { name: \"Feature\", color: \"#3b82f6\" },\n { name: \"Refactor\", color: \"#a78bfa\" },\n { name: \"Docs\", color: \"#10b981\" },\n { name: \"Test\", color: \"#f59e0b\" },\n { name: \"Urgent\", color: \"#dc2626\" },\n { name: \"Backend\", color: \"#06b6d4\" },\n { name: \"Frontend\", color: \"#8b5cf6\" },\n { name: \"DevOps\", color: \"#64748b\" },\n];\n\nconst ATTACHMENT_ICONS: Record<string, typeof FileText> = {\n markdown: FileText,\n document: FileText,\n image: Image,\n presentation: FileText,\n other: Paperclip,\n};\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};\n\n// ── Helpers ────────────────────────────────────────────────────\n\nfunction useElapsed(startedAt?: string | number, active?: boolean) {\n const [elapsed, setElapsed] = useState(\"\");\n useEffect(() => {\n if (!startedAt || !active) { setElapsed(\"\"); return; }\n const update = () => {\n const start = typeof startedAt === \"number\" ? startedAt : new Date(startedAt).getTime();\n const diff = Math.max(0, Math.floor((Date.now() - start) / 1000));\n const m = Math.floor(diff / 60);\n const s = diff % 60;\n setElapsed(m > 0 ? `${m}m ${s}s` : `${s}s`);\n };\n update();\n const id = setInterval(update, 1000);\n return () => clearInterval(id);\n }, [startedAt, active]);\n return elapsed;\n}\n\nfunction Skeleton({ className }: { className?: string }) {\n return <div className={cn(\"animate-pulse rounded-lg bg-muted\", className)} />;\n}\n\nfunction PriorityBadge({ priority }: { priority?: string }) {\n if (!priority) return null;\n const cfg = PRIORITY_CONFIG[priority] ?? { label: priority, color: \"text-muted-foreground border-muted-foreground/40\" };\n return (\n <span className={cn(\"text-[10px] font-semibold uppercase border rounded px-1.5 py-0.5\", cfg.color)}>\n {cfg.label}\n </span>\n );\n}\n\nfunction formatCost(tokenUsage: { input: number; output: number; total: number } | null | undefined): string {\n if (!tokenUsage) return \"\";\n // Rough cost estimate: $3/1M input, $15/1M output (Claude-like pricing)\n const cost = (tokenUsage.input * 3 + tokenUsage.output * 15) / 1_000_000;\n return cost < 0.01 ? `<$0.01` : `$${cost.toFixed(2)}`;\n}\n\nfunction timeAgo(ts: number): string {\n const diff = Math.floor((Date.now() - ts) / 1000);\n if (diff < 60) return `${diff}s ago`;\n if (diff < 3600) return `${Math.floor(diff / 60)}m ago`;\n if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`;\n return `${Math.floor(diff / 86400)}d ago`;\n}\n\n// ═══════════════════════════════════════════════════════════════\n// KanbanPage — Root\n// ═══════════════════════════════════════════════════════════════\n\nexport function KanbanPage() {\n const { boardId } = useParams<{ boardId?: string }>();\n const navigate = useNavigate();\n\n return boardId ? (\n <BoardDetailView boardId={boardId} onBack={() => navigate(\"/board\")} />\n ) : (\n <BoardListView onSelect={(id) => navigate(`/board/${id}`)} />\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Board List View\n// ═══════════════════════════════════════════════════════════════\n\nfunction BoardListView({ onSelect }: { onSelect: (id: string) => void }) {\n const [boards, setBoards] = useState<Board[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(\"\");\n const [createOpen, setCreateOpen] = useState(false);\n const [createName, setCreateName] = useState(\"\");\n const [createDesc, setCreateDesc] = useState(\"\");\n const [creating, setCreating] = useState(false);\n\n const load = useCallback(() => {\n api.boards\n .list()\n .then((d) => { setBoards(d.boards); setError(\"\"); })\n .catch((e: Error) => setError(e.message))\n .finally(() => setLoading(false));\n }, []);\n\n useEffect(() => { load(); }, [load]);\n\n const handleCreate = async () => {\n if (!createName.trim()) return;\n setCreating(true);\n try {\n const { board } = await api.boards.create({ name: createName.trim(), description: createDesc.trim() || undefined });\n setCreateOpen(false);\n setCreateName(\"\");\n setCreateDesc(\"\");\n onSelect(board.id);\n } catch (e: unknown) {\n setError((e as Error).message);\n } finally {\n setCreating(false);\n }\n };\n\n const handleDelete = async (id: string) => {\n try { await api.boards.delete(id); load(); } catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleToggleActive = async (board: Board) => {\n try {\n if (board.active) await api.boards.deactivate(board.id);\n else await api.boards.activate(board.id);\n load();\n } catch (e: unknown) { setError((e as Error).message); }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Columns3 className=\"h-6 w-6 text-[#00d4ff]\" />\n <h1 className=\"text-2xl font-semibold text-foreground\">\n Kanban Boards <span className=\"text-sm font-normal text-muted-foreground\">(Beta mode)</span>\n </h1>\n </div>\n <Button onClick={() => setCreateOpen(true)} className=\"gap-2 bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">\n <Plus className=\"h-4 w-4\" /> Create Board\n </Button>\n </div>\n\n {error && <div className=\"rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-400\">{error}</div>}\n\n {loading && (\n <div className=\"grid gap-4 sm:grid-cols-1 lg:grid-cols-2\">\n {[0, 1, 2, 3].map((i) => <Skeleton key={i} className=\"h-36\" />)}\n </div>\n )}\n\n {!loading && boards.length === 0 && !error && (\n <Card>\n <CardContent className=\"py-16 text-center\">\n <Columns3 className=\"mx-auto mb-4 h-12 w-12 text-muted-foreground/40\" />\n <p className=\"text-muted-foreground\">No boards yet. Create one to get started.</p>\n </CardContent>\n </Card>\n )}\n\n {!loading && boards.length > 0 && (\n <div className=\"grid gap-4 sm:grid-cols-1 lg:grid-cols-2\">\n <AnimatePresence mode=\"popLayout\">\n {boards.map((board, i) => (\n <motion.div key={board.id} custom={i} variants={fadeUp} initial=\"hidden\" animate=\"visible\" exit={{ opacity: 0, scale: 0.95, transition: { duration: 0.2 } }} layout>\n <Card className=\"cursor-pointer transition-colors hover:border-[#00d4ff]/40\" onClick={() => onSelect(board.id)}>\n <CardHeader className=\"flex flex-row items-start justify-between gap-4 pb-2\">\n <div className=\"min-w-0 flex-1\">\n <CardTitle className=\"text-base font-semibold\">{board.name}</CardTitle>\n {board.description && <p className=\"mt-1 text-sm text-muted-foreground\">{truncate(board.description, 100)}</p>}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\" onClick={(e) => e.stopPropagation()}>\n <Badge\n variant={board.active ? \"default\" : \"secondary\"}\n className={cn(\"cursor-pointer text-[10px]\", board.active && \"bg-[#00d4ff]/20 text-[#00d4ff] hover:bg-[#00d4ff]/30\")}\n onClick={() => handleToggleActive(board)}\n >\n {board.active ? <><Power className=\"mr-1 h-3 w-3\" /> Active</> : <><PowerOff className=\"mr-1 h-3 w-3\" /> Inactive</>}\n </Badge>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-7 w-7 text-muted-foreground hover:text-red-400\"><Trash2 className=\"h-3.5 w-3.5\" /></Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete board?</AlertDialogTitle>\n <AlertDialogDescription>This will permanently delete \"{board.name}\" and all its cards.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction className=\"bg-red-600 hover:bg-red-700\" onClick={() => handleDelete(board.id)}>Delete</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center gap-4 text-xs text-muted-foreground\">\n <span>{board.cardCount ?? board.cards?.length ?? 0} cards</span>\n <span>{formatDate(board.createdAt)}</span>\n </div>\n </CardContent>\n </Card>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n )}\n\n {/* Create Dialog */}\n <Dialog open={createOpen} onOpenChange={setCreateOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Create Board</DialogTitle>\n <DialogDescription>Add a new Kanban board for organizing agent tasks.</DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Name</label>\n <Input placeholder=\"Board name\" value={createName} onChange={(e) => setCreateName(e.target.value)} onKeyDown={(e) => e.key === \"Enter\" && handleCreate()} />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Description</label>\n <Textarea placeholder=\"Describe the project — AI will use this to generate task cards with dependencies...\" value={createDesc} onChange={(e) => setCreateDesc(e.target.value)} rows={4} />\n </div>\n </div>\n <DialogFooter>\n <DialogClose asChild><Button variant=\"ghost\">Cancel</Button></DialogClose>\n <Button onClick={handleCreate} disabled={!createName.trim() || creating} className=\"bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">\n {creating && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />} Create\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Board Detail View (Kanban Columns)\n// ═══════════════════════════════════════════════════════════════\n\nfunction BoardDetailView({ boardId, onBack }: { boardId: string; onBack: () => void }) {\n const [board, setBoard] = useState<Board | null>(null);\n const [resources, setResources] = useState<BoardResources | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(\"\");\n const [addOpen, setAddOpen] = useState(false);\n const [generating, setGenerating] = useState(false);\n const [selectedCard, setSelectedCard] = useState<BoardCard | null>(null);\n const [activeId, setActiveId] = useState<string | null>(null);\n const [editingDesc, setEditingDesc] = useState(false);\n const [descDraft, setDescDraft] = useState(\"\");\n const [showFullDesc, setShowFullDesc] = useState(false);\n const [planOpen, setPlanOpen] = useState(false);\n const [plan, setPlan] = useState<ExecutionPlan | null>(null);\n const [planLoading, setPlanLoading] = useState(false);\n const pollRef = useRef<ReturnType<typeof setInterval>>();\n const sseRef = useRef<EventSource | null>(null);\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(KeyboardSensor)\n );\n\n const load = useCallback(async () => {\n try {\n const data = await api.boards.get(boardId);\n setBoard(data.board);\n setResources(data.resources);\n setError(\"\");\n // Refresh selected card if open\n if (selectedCard) {\n const updated = data.board.cards?.find((c: BoardCard) => c.id === selectedCard.id);\n if (updated) setSelectedCard(updated);\n }\n } catch (e: unknown) {\n setError((e as Error).message);\n } finally {\n setLoading(false);\n }\n }, [boardId, selectedCard?.id]);\n\n useEffect(() => {\n load();\n\n // Use SSE for real-time updates, fallback to polling\n const baseUrl = window.location.origin;\n const es = new EventSource(`${baseUrl}/api/boards/${boardId}/events`);\n sseRef.current = es;\n\n es.addEventListener('board-update', (e) => {\n try {\n const data = JSON.parse(e.data);\n setBoard(data);\n setError(\"\");\n // Refresh selected card if open\n setSelectedCard((prev) => {\n if (!prev) return null;\n const updated = data.cards?.find((c: BoardCard) => c.id === prev.id);\n return updated ?? prev;\n });\n } catch {}\n });\n\n es.onerror = () => {\n // Fallback to polling if SSE fails\n es.close();\n sseRef.current = null;\n pollRef.current = setInterval(load, 2500);\n };\n\n return () => {\n es.close();\n sseRef.current = null;\n if (pollRef.current) clearInterval(pollRef.current);\n };\n }, [boardId]);\n\n const cards = useMemo(() => board?.cards ?? [], [board]);\n\n const columnCards = useMemo(() => {\n const map: Record<string, BoardCard[]> = { pending: [], running: [], paused: [], done: [], failed: [], question: [] };\n for (const c of cards) {\n if (map[c.status]) map[c.status].push(c);\n else map.pending.push(c); // fallback\n }\n return map;\n }, [cards]);\n\n const displayColumns = useMemo(() => {\n return COLUMNS.map((col) => ({\n ...col,\n cards: col.key === \"pending\"\n ? [...columnCards.pending, ...columnCards.paused, ...columnCards.question]\n : columnCards[col.key] ?? [],\n }));\n }, [columnCards]);\n\n const activeCard = useMemo(() => (activeId ? cards.find((c) => c.id === activeId) : undefined), [activeId, cards]);\n\n // Total token cost\n const totalCost = useMemo(() => {\n let inp = 0, out = 0;\n for (const c of cards) {\n if (c.tokenUsage) { inp += c.tokenUsage.input; out += c.tokenUsage.output; }\n }\n if (inp === 0 && out === 0) return null;\n return { input: inp, output: out, total: inp + out };\n }, [cards]);\n\n // Build dependency tree for display\n const cardMap = useMemo(() => {\n const m = new Map<string, BoardCard>();\n for (const c of cards) m.set(c.id, c);\n return m;\n }, [cards]);\n\n // ── DnD ──\n const handleDragStart = (event: DragStartEvent) => setActiveId(event.active.id as string);\n\n const handleDragEnd = async (event: DragEndEvent) => {\n setActiveId(null);\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const overId = over.id as string;\n let targetStatus: CardStatus | undefined;\n const col = COLUMNS.find((c) => c.key === overId);\n if (col) targetStatus = col.key;\n else {\n const overCard = cards.find((c) => c.id === overId);\n if (overCard) targetStatus = overCard.status;\n }\n if (!targetStatus) return;\n const card = cards.find((c) => c.id === active.id);\n if (!card || card.status === targetStatus) return;\n try { await api.boards.cards.update(boardId, card.id, { status: targetStatus }); load(); } catch {}\n };\n\n // ── Actions ──\n const handleGenerate = async () => {\n setGenerating(true);\n try { await api.boards.generate(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n finally { setGenerating(false); }\n };\n\n const handleSmartExecute = async () => {\n try { await api.boards.smartExecute(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleRunAll = async () => {\n try { await api.boards.runAll(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleClearDone = async () => {\n try { await api.boards.cards.clearDone(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleHaltAll = async () => {\n try { await api.boards.haltAll(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleRunCard = async (cardId: string) => {\n const card = cards.find(c => c.id === cardId);\n const opts = card?.pausedForTokens ? { overrideBudget: true } : undefined;\n try { await api.boards.cards.run(boardId, cardId, opts); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleHaltCard = async (cardId: string) => {\n try { await api.boards.cards.halt(boardId, cardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleDeleteCard = async (cardId: string) => {\n try { await api.boards.cards.delete(boardId, cardId); if (selectedCard?.id === cardId) setSelectedCard(null); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleSaveDesc = async () => {\n try { await api.boards.update(boardId, { description: descDraft } as Partial<Board>); setEditingDesc(false); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleViewPlan = async () => {\n setPlanLoading(true);\n setPlanOpen(true);\n try {\n const data = await api.boards.executionPlan(boardId);\n setPlan(data);\n } catch (e: unknown) { setError((e as Error).message); }\n finally { setPlanLoading(false); }\n };\n\n if (loading && !board) {\n return (\n <div className=\"space-y-4 p-6\">\n <Skeleton className=\"h-10 w-64\" />\n <div className=\"flex gap-4\">{[0, 1, 2, 3].map((i) => <Skeleton key={i} className=\"h-96 flex-1\" />)}</div>\n </div>\n );\n }\n\n if (error && !board) {\n return (\n <div className=\"p-6\">\n <Button variant=\"ghost\" onClick={onBack} className=\"mb-4 gap-2\"><ArrowLeft className=\"h-4 w-4\" /> Back</Button>\n <div className=\"rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-400\">{error}</div>\n </div>\n );\n }\n\n return (\n <div className=\"flex h-full flex-col p-6\">\n {/* ── Header ── */}\n <div className=\"mb-4 space-y-3\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={onBack} className=\"h-8 w-8 shrink-0\"><ArrowLeft className=\"h-4 w-4\" /></Button>\n <h1 className=\"text-xl font-semibold text-foreground\">{board?.name}</h1>\n {board?.active && <Badge className=\"bg-[#00d4ff]/20 text-[#00d4ff] text-[10px]\">Active</Badge>}\n </div>\n\n {/* Board description (editable) */}\n <div className=\"group\">\n {editingDesc ? (\n <div className=\"flex gap-2\">\n <Textarea\n value={descDraft}\n onChange={(e) => setDescDraft(e.target.value)}\n rows={2}\n className=\"text-sm flex-1\"\n placeholder=\"Board description...\"\n autoFocus\n />\n <div className=\"flex flex-col gap-1\">\n <Button size=\"sm\" onClick={handleSaveDesc} className=\"h-7 text-xs bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">Save</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setEditingDesc(false)} className=\"h-7 text-xs\">Cancel</Button>\n </div>\n </div>\n ) : (\n <div className=\"flex items-start gap-2 rounded-md px-2 py-1 -mx-2 transition-colors hover:bg-muted/30\">\n <div className=\"flex-1 min-w-0 text-sm text-muted-foreground\">\n {board?.description ? (\n (() => {\n const DESC_PREVIEW_LIMIT = 280;\n const desc = board.description;\n const isLong = desc.length > DESC_PREVIEW_LIMIT;\n const preview = isLong\n ? desc.slice(0, DESC_PREVIEW_LIMIT).trimEnd() + \"\\u2026\"\n : desc;\n return (\n <>\n <div\n className={cn(isLong && \"cursor-pointer\")}\n onClick={() => {\n if (isLong) setShowFullDesc(true);\n }}\n >\n <MarkdownRenderer\n content={preview}\n className=\"prose-sm prose-invert max-w-none\"\n />\n </div>\n {isLong && (\n <div className=\"mt-2 flex justify-center\">\n <button\n type=\"button\"\n onClick={() => setShowFullDesc(true)}\n className=\"text-sm font-medium text-[#00d4ff] hover:underline\"\n >\n See more\n </button>\n </div>\n )}\n </>\n );\n })()\n ) : (\n <p\n className=\"cursor-pointer italic text-muted-foreground/60\"\n onClick={() => {\n setDescDraft(\"\");\n setEditingDesc(true);\n }}\n >\n Click to add a description...\n </p>\n )}\n </div>\n <button\n type=\"button\"\n onClick={() => {\n setDescDraft(board?.description ?? \"\");\n setEditingDesc(true);\n }}\n className=\"mt-0.5 shrink-0 rounded p-1 text-muted-foreground/50 opacity-0 transition-opacity hover:bg-muted hover:text-foreground group-hover:opacity-100\"\n title=\"Edit description\"\n aria-label=\"Edit description\"\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n </div>\n\n {/* Metrics bar with token cost */}\n {resources && (\n <div className=\"flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"text-[#00d4ff]\">{resources.runningCount} running</span>\n <span className=\"text-muted-foreground/40\">·</span>\n <span>{resources.pendingCount} pending</span>\n <span className=\"text-muted-foreground/40\">·</span>\n <span className=\"text-emerald-400\">{resources.doneCount} done</span>\n <span className=\"text-muted-foreground/40\">·</span>\n <span className=\"text-red-400\">{resources.failedCount} failed</span>\n <span className=\"text-muted-foreground/40\">|</span>\n <span>{formatTokens(resources.totalTokens)} tokens</span>\n {totalCost && (\n <>\n <span className=\"text-muted-foreground/40\">·</span>\n <span className=\"text-emerald-400 font-medium\">{formatCost(totalCost)}</span>\n <span className=\"text-muted-foreground/60\">\n ({formatTokens(totalCost.input)} in / {formatTokens(totalCost.output)} out)\n </span>\n </>\n )}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button size=\"sm\" variant=\"outline\" onClick={() => setAddOpen(true)} className=\"gap-1.5 text-xs\">\n <Plus className=\"h-3.5 w-3.5\" /> Add Card\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={handleGenerate} disabled={generating} className=\"gap-1.5 text-xs\">\n {generating ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : <Sparkles className=\"h-3.5 w-3.5\" />}\n Generate Cards\n </Button>\n\n {/* Smart Execute */}\n <Button\n size=\"sm\"\n onClick={handleSmartExecute}\n className=\"gap-1.5 text-xs bg-gradient-to-r from-[#00d4ff] to-[#a78bfa] text-black hover:opacity-90 font-semibold\"\n >\n <Zap className=\"h-3.5 w-3.5\" /> Smart Execute\n </Button>\n\n <Button size=\"sm\" variant=\"outline\" onClick={handleViewPlan} className=\"gap-1.5 text-xs\">\n <GitBranch className=\"h-3.5 w-3.5\" /> View Plan\n </Button>\n\n <Button size=\"sm\" onClick={handleRunAll} className=\"gap-1.5 text-xs bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">\n <Play className=\"h-3.5 w-3.5\" /> Run All\n </Button>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" className=\"gap-1.5 text-xs text-red-400 hover:text-red-300\">\n <Square className=\"h-3.5 w-3.5\" /> Halt All\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Halt all running agents?</AlertDialogTitle>\n <AlertDialogDescription>All currently running cards will be stopped immediately.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction className=\"bg-red-600 hover:bg-red-700\" onClick={handleHaltAll}>Halt All</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n <Button size=\"sm\" variant=\"ghost\" onClick={handleClearDone} className=\"gap-1.5 text-xs text-muted-foreground\">\n <CheckCircle2 className=\"h-3.5 w-3.5\" /> Clear Done\n </Button>\n </div>\n\n {error && <div className=\"rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-400\">{error}</div>}\n\n {/* Attention Banner — cards needing user input */}\n {columnCards.question && columnCards.question.length > 0 && (\n <motion.div\n initial={{ opacity: 0, y: -4 }}\n animate={{ opacity: 1, y: 0 }}\n className=\"rounded-lg border border-purple-500/40 bg-purple-500/10 px-4 py-3 flex items-center gap-3\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"w-2.5 h-2.5 rounded-full bg-purple-400 animate-pulse\" />\n <span className=\"text-sm font-medium text-purple-300\">\n {columnCards.question.length} card{columnCards.question.length > 1 ? 's' : ''} need{columnCards.question.length === 1 ? 's' : ''} your attention\n </span>\n </div>\n <div className=\"flex gap-2 ml-auto\">\n {columnCards.question.map(qCard => (\n <Button\n key={qCard.id}\n size=\"sm\"\n variant=\"outline\"\n className=\"text-xs border-purple-400/40 text-purple-300 hover:bg-purple-500/20 gap-1\"\n onClick={() => setSelectedCard(qCard)}\n >\n <CircleDot className=\"h-3 w-3\" />\n {truncate(qCard.task, 30)}\n </Button>\n ))}\n </div>\n </motion.div>\n )}\n </div>\n\n {/* Kanban Columns */}\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <div className=\"hidden md:flex flex-1 min-h-0 gap-4 overflow-x-auto pb-4\">\n {displayColumns.map((col) => (\n <KanbanColumn\n key={col.key}\n status={col.key}\n label={col.label}\n cards={col.cards}\n allCards={cards}\n boardId={boardId}\n onRun={handleRunCard}\n onHalt={handleHaltCard}\n onDelete={handleDeleteCard}\n onSelect={setSelectedCard}\n />\n ))}\n </div>\n <div className=\"flex flex-col gap-3 md:hidden\">\n {displayColumns.map((col) => (\n <MobileColumn\n key={col.key}\n status={col.key}\n label={col.label}\n cards={col.cards}\n allCards={cards}\n boardId={boardId}\n onRun={handleRunCard}\n onHalt={handleHaltCard}\n onDelete={handleDeleteCard}\n onSelect={setSelectedCard}\n />\n ))}\n </div>\n <DragOverlay>\n {activeCard && (\n <div className=\"w-72 scale-105 opacity-90\">\n <KanbanCardContent card={activeCard} allCards={cards} boardId={boardId} onRun={handleRunCard} onHalt={handleHaltCard} onDelete={handleDeleteCard} onSelect={setSelectedCard} overlay />\n </div>\n )}\n </DragOverlay>\n </DndContext>\n\n {cards.length === 0 && !loading && (\n <div className=\"flex flex-1 items-center justify-center\">\n <div className=\"text-center\">\n <CircleDot className=\"mx-auto mb-3 h-10 w-10 text-muted-foreground/30\" />\n <p className=\"text-sm text-muted-foreground\">No cards yet. Add tasks or use AI to generate them.</p>\n </div>\n </div>\n )}\n\n <AddCardDialog boardId={boardId} open={addOpen} onOpenChange={setAddOpen} onCreated={load} allCards={cards} />\n\n <CardDetailSheet\n card={selectedCard}\n boardId={boardId}\n allCards={cards}\n open={!!selectedCard}\n onOpenChange={(open) => { if (!open) setSelectedCard(null); }}\n onRun={handleRunCard}\n onHalt={handleHaltCard}\n onDelete={handleDeleteCard}\n onRefresh={load}\n />\n\n {/* Execution Plan Dialog */}\n <Dialog open={planOpen} onOpenChange={setPlanOpen}>\n <DialogContent className=\"max-w-lg\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\"><GitBranch className=\"h-5 w-5 text-[#00d4ff]\" /> Execution Plan</DialogTitle>\n <DialogDescription>Dependency-aware execution order. Cards in each wave run concurrently.</DialogDescription>\n </DialogHeader>\n {planLoading && <div className=\"flex justify-center py-8\"><Loader2 className=\"h-6 w-6 animate-spin text-[#00d4ff]\" /></div>}\n {plan && !planLoading && (\n <div className=\"space-y-3 max-h-96 overflow-y-auto\">\n {plan.batches.length === 0 && <p className=\"text-sm text-muted-foreground py-4 text-center\">No pending cards to execute.</p>}\n {plan.batches.map((batch) => (\n <div key={batch.wave} className=\"space-y-1.5\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className=\"text-[10px] bg-[#00d4ff]/10 text-[#00d4ff] border-[#00d4ff]/30\">\n Wave {batch.wave}\n </Badge>\n <span className=\"text-[10px] text-muted-foreground\">{batch.cards.length} card{batch.cards.length > 1 ? \"s\" : \"\"}</span>\n </div>\n {batch.cards.map((card) => (\n <div key={card.id} className=\"flex items-center gap-2 rounded-md border border-border/50 bg-muted/30 px-3 py-1.5 text-xs\">\n <PriorityBadge priority={card.priority} />\n <span className=\"flex-1 truncate text-foreground/80\">{card.task}</span>\n {card.dependsOn && card.dependsOn.length > 0 && (\n <span className=\"text-[10px] text-muted-foreground shrink-0\">\n <Link2 className=\"h-3 w-3 inline mr-0.5\" />{card.dependsOn.length} dep{card.dependsOn.length > 1 ? \"s\" : \"\"}\n </span>\n )}\n </div>\n ))}\n </div>\n ))}\n <div className=\"flex items-center justify-between pt-2 border-t border-border/50 text-xs text-muted-foreground\">\n <span>{plan.totalBatches} wave{plan.totalBatches > 1 ? \"s\" : \"\"}, {plan.totalCards} card{plan.totalCards > 1 ? \"s\" : \"\"}</span>\n <Button size=\"sm\" onClick={() => { setPlanOpen(false); handleSmartExecute(); }} className=\"gap-1.5 text-xs bg-gradient-to-r from-[#00d4ff] to-[#a78bfa] text-black\">\n <Zap className=\"h-3 w-3\" /> Execute Plan\n </Button>\n </div>\n </div>\n )}\n </DialogContent>\n </Dialog>\n\n {/* Full Board Description Dialog */}\n <Dialog open={showFullDesc} onOpenChange={setShowFullDesc}>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>{board?.name ?? \"Board\"} — Description</DialogTitle>\n </DialogHeader>\n <div className=\"max-h-[60vh] overflow-y-auto pr-2\">\n {board?.description ? (\n <MarkdownRenderer\n content={board.description}\n className=\"prose-sm prose-invert max-w-none\"\n />\n ) : (\n <p className=\"text-sm text-muted-foreground italic\">\n No description.\n </p>\n )}\n </div>\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"ghost\" size=\"sm\">Close</Button>\n </DialogClose>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// KanbanColumn\n// ═══════════════════════════════════════════════════════════════\n\ninterface ColumnProps {\n status: CardStatus;\n label: string;\n cards: BoardCard[];\n allCards: BoardCard[];\n boardId: string;\n onRun: (id: string) => void;\n onHalt: (id: string) => void;\n onDelete: (id: string) => void;\n onSelect: (c: BoardCard) => void;\n}\n\nfunction KanbanColumn({ status, label, cards, allCards, boardId, onRun, onHalt, onDelete, onSelect }: ColumnProps) {\n const statusColor = status === \"running\" ? \"text-[#00d4ff]\" : status === \"done\" ? \"text-emerald-400\" : status === \"failed\" ? \"text-red-400\" : \"text-muted-foreground\";\n\n return (\n <div className=\"flex min-w-[260px] flex-1 flex-col min-h-0 rounded-lg border border-border/50 bg-muted/20\">\n <div className=\"flex items-center justify-between px-3 py-2.5 border-b border-border/30\">\n <div className=\"flex items-center gap-2\">\n <span className={cn(\"text-sm font-medium\", statusColor)}>{label}</span>\n <Badge variant=\"secondary\" className=\"text-[10px] px-1.5 py-0 h-5 min-w-[20px] justify-center\">{cards.length}</Badge>\n </div>\n </div>\n <SortableContext items={cards.map((c) => c.id)} strategy={verticalListSortingStrategy} id={status}>\n <ScrollArea className=\"flex-1 min-h-0 p-2\">\n <div className=\"space-y-2 min-h-[60px]\">\n <AnimatePresence mode=\"popLayout\">\n {cards.map((card, i) => (\n <SortableCard key={card.id} card={card} index={i} allCards={allCards} boardId={boardId} onRun={onRun} onHalt={onHalt} onDelete={onDelete} onSelect={onSelect} />\n ))}\n </AnimatePresence>\n </div>\n </ScrollArea>\n </SortableContext>\n </div>\n );\n}\n\nfunction MobileColumn({ status, label, cards, allCards, boardId, onRun, onHalt, onDelete, onSelect }: ColumnProps) {\n const [open, setOpen] = useState(status === \"running\" || status === \"pending\");\n const statusColor = status === \"running\" ? \"text-[#00d4ff]\" : status === \"done\" ? \"text-emerald-400\" : status === \"failed\" ? \"text-red-400\" : \"text-muted-foreground\";\n\n return (\n <Collapsible open={open} onOpenChange={setOpen}>\n <CollapsibleTrigger asChild>\n <button className=\"flex w-full items-center justify-between rounded-lg border border-border/50 bg-muted/20 px-3 py-2.5\">\n <div className=\"flex items-center gap-2\">\n {open ? <ChevronDown className=\"h-4 w-4 text-muted-foreground\" /> : <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />}\n <span className={cn(\"text-sm font-medium\", statusColor)}>{label}</span>\n <Badge variant=\"secondary\" className=\"text-[10px] px-1.5 py-0 h-5\">{cards.length}</Badge>\n </div>\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <SortableContext items={cards.map((c) => c.id)} strategy={verticalListSortingStrategy}>\n <div className=\"space-y-2 pt-2\">\n <AnimatePresence mode=\"popLayout\">\n {cards.map((card, i) => (\n <SortableCard key={card.id} card={card} index={i} allCards={allCards} boardId={boardId} onRun={onRun} onHalt={onHalt} onDelete={onDelete} onSelect={onSelect} />\n ))}\n </AnimatePresence>\n </div>\n </SortableContext>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// SortableCard\n// ═══════════════════════════════════════════════════════════════\n\ninterface SortableCardProps {\n card: BoardCard;\n index: number;\n allCards: BoardCard[];\n boardId: string;\n onRun: (id: string) => void;\n onHalt: (id: string) => void;\n onDelete: (id: string) => void;\n onSelect: (c: BoardCard) => void;\n}\n\nfunction SortableCard({ card, index, allCards, boardId, onRun, onHalt, onDelete, onSelect }: SortableCardProps) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: card.id });\n const style = { transform: CSS.Transform.toString(transform), transition };\n\n return (\n <motion.div\n ref={setNodeRef}\n style={style}\n layout\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: isDragging ? 0.4 : 1, y: 0, transition: { delay: index * 0.03 } }}\n exit={{ opacity: 0, scale: 0.95, transition: { duration: 0.15 } }}\n {...attributes}\n {...listeners}\n >\n <KanbanCardContent card={card} allCards={allCards} boardId={boardId} onRun={onRun} onHalt={onHalt} onDelete={onDelete} onSelect={onSelect} />\n </motion.div>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// KanbanCardContent\n// ═══════════════════════════════════════════════════════════════\n\ninterface CardContentProps {\n card: BoardCard;\n allCards: BoardCard[];\n boardId: string;\n onRun: (id: string) => void;\n onHalt: (id: string) => void;\n onDelete: (id: string) => void;\n onSelect: (c: BoardCard) => void;\n overlay?: boolean;\n}\n\nfunction KanbanCardContent({ card, allCards, boardId, onRun, onHalt, onDelete, onSelect, overlay }: CardContentProps) {\n const elapsed = useElapsed(card.startedAt, card.status === \"running\");\n const [expanded, setExpanded] = useState(false);\n const parentCard = card.parentId ? allCards.find(c => c.id === card.parentId) : null;\n const childCount = allCards.filter(c => c.parentId === card.id).length;\n const depCount = card.dependsOn?.length ?? 0;\n\n return (\n <div\n className={cn(\n \"group relative rounded-md border border-border/50 bg-card p-3 text-sm transition-all border-l-[3px] cursor-pointer\",\n STATUS_BORDER[card.status] ?? STATUS_BORDER.pending,\n card.status === \"running\" && \"animate-pulse border-l-[3px]\",\n card.status === \"question\" && \"ring-1 ring-purple-500/30\",\n card.status === \"done\" && \"opacity-80\",\n overlay && \"shadow-lg shadow-[#00d4ff]/10 ring-1 ring-[#00d4ff]/20\"\n )}\n onClick={(e) => { if ((e.target as HTMLElement).closest(\"button\")) return; onSelect(card); }}\n >\n {/* Top: priority + labels + dependency indicators + delete */}\n <div className=\"flex items-start justify-between gap-2 mb-1\">\n <div className=\"flex items-center gap-1.5 flex-wrap min-w-0\">\n <PriorityBadge priority={card.priority} />\n {card.labels?.map((label) => (\n <span\n key={label.id}\n className=\"text-[9px] font-medium rounded px-1.5 py-0.5 text-white\"\n style={{ backgroundColor: label.color }}\n >\n {label.name}\n </span>\n ))}\n {card.status === \"question\" && (\n <span className=\"text-[9px] font-semibold uppercase border border-purple-400/40 text-purple-400 rounded px-1.5 py-0.5\">\n Needs Input\n </span>\n )}\n </div>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <button className=\"opacity-0 group-hover:opacity-100 transition-opacity text-muted-foreground hover:text-red-400 p-0.5\" onClick={(e) => e.stopPropagation()}>\n <Trash2 className=\"h-3 w-3\" />\n </button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete card?</AlertDialogTitle>\n <AlertDialogDescription>This card will be permanently removed.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction className=\"bg-red-600 hover:bg-red-700\" onClick={() => onDelete(card.id)}>Delete</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n\n {/* Parent indicator */}\n {parentCard && (\n <div className=\"flex items-center gap-1 text-[9px] text-muted-foreground/70 mb-1\">\n <GitBranch className=\"h-2.5 w-2.5\" />\n <span className=\"truncate\">{truncate(parentCard.task, 40)}</span>\n </div>\n )}\n\n {/* Task text */}\n <p className=\"text-xs leading-relaxed text-foreground/90\">{truncate(card.task, 120)}</p>\n\n {/* Activity indicators */}\n <div className=\"flex items-center gap-2 mt-1.5 flex-wrap\">\n {depCount > 0 && (\n <span className=\"text-[9px] text-muted-foreground/70 flex items-center gap-0.5\">\n <Link2 className=\"h-2.5 w-2.5\" /> {depCount}\n </span>\n )}\n {childCount > 0 && (\n <span className=\"text-[9px] text-muted-foreground/70 flex items-center gap-0.5\">\n <GitBranch className=\"h-2.5 w-2.5\" /> {childCount}\n </span>\n )}\n {(card.comments?.length ?? 0) > 0 && (\n <span className=\"text-[9px] text-muted-foreground/70 flex items-center gap-0.5\">\n <MessageSquare className=\"h-2.5 w-2.5\" /> {card.comments!.length}\n </span>\n )}\n {(card.attachments?.length ?? 0) > 0 && (\n <span className=\"text-[9px] text-muted-foreground/70 flex items-center gap-0.5\">\n <Paperclip className=\"h-2.5 w-2.5\" /> {card.attachments!.length}\n </span>\n )}\n </div>\n\n {/* Running state with live token usage */}\n {card.status === \"running\" && (\n <div className=\"mt-2 space-y-1.5\">\n {card.progress && (\n <p className=\"text-[10px] text-[#00d4ff]/70 truncate\">{card.progress}</p>\n )}\n {card.filesLocked && card.filesLocked.length > 0 && (\n <div className=\"text-[9px] text-muted-foreground/60\">\n Editing: {card.filesLocked.slice(0, 2).map(f => f.split('/').pop()).join(', ')}\n {card.filesLocked.length > 2 && ` +${card.filesLocked.length - 2}`}\n </div>\n )}\n <div className=\"flex items-center justify-between text-[10px] text-muted-foreground\">\n <span>\n {card.tokenUsage ? (\n <>{formatTokens(card.tokenUsage.total)} tokens · {formatCost(card.tokenUsage)}</>\n ) : card.tokensUsed != null ? (\n <>{formatTokens(card.tokensUsed)} tokens</>\n ) : null}\n </span>\n {elapsed && <span className=\"text-[#00d4ff]\">{elapsed}</span>}\n </div>\n {card.tokenUsage && (\n <div className=\"flex gap-2 text-[9px] text-muted-foreground/60\">\n <span>{formatTokens(card.tokenUsage.input)} in</span>\n <span>{formatTokens(card.tokenUsage.output)} out</span>\n </div>\n )}\n <Button\n size=\"sm\" variant=\"destructive\" className=\"h-6 w-full text-[10px] gap-1\"\n onClick={(e) => { e.stopPropagation(); onHalt(card.id); }}\n >\n <Square className=\"h-3 w-3\" /> Halt\n </Button>\n </div>\n )}\n\n {/* Pending state */}\n {card.status === \"paused\" && card.pausedForTokens && (\n <div className=\"mt-2 space-y-1.5\">\n <div className=\"rounded border border-yellow-500/40 bg-yellow-500/10 px-2 py-1.5\">\n <p className=\"text-[10px] font-medium text-yellow-400\">Token budget exhausted</p>\n <p className=\"text-[9px] text-yellow-300/70 mt-0.5\">\n {card.tokenUsage ? formatTokens(card.tokenUsage.total) : '?'} / {card.tokenBudget ? formatTokens(card.tokenBudget) : '?'} tokens\n </p>\n </div>\n <Button\n size=\"sm\" variant=\"outline\" className=\"h-6 w-full text-[10px] gap-1 border-yellow-500/40 text-yellow-300 hover:bg-yellow-500/10\"\n onClick={(e) => { e.stopPropagation(); onRun(card.id); }}\n >\n <RotateCcw className=\"h-3 w-3\" /> Resume (override)\n </Button>\n </div>\n )}\n {(card.status === \"pending\" || (card.status === \"paused\" && !card.pausedForTokens)) && (\n <div className=\"mt-2\">\n <Button\n size=\"sm\" variant=\"outline\" className=\"h-6 w-full text-[10px] gap-1 border-[#00d4ff]/30 text-[#00d4ff] hover:bg-[#00d4ff]/10\"\n onClick={(e) => { e.stopPropagation(); onRun(card.id); }}\n >\n <Play className=\"h-3 w-3\" /> Run\n </Button>\n </div>\n )}\n\n {/* Done state with cost */}\n {card.status === \"done\" && (\n <div className=\"mt-2 space-y-1\">\n <div className=\"flex items-center gap-2 text-[10px] text-muted-foreground flex-wrap\">\n {card.tokenUsage ? (\n <>\n <span>{formatTokens(card.tokenUsage.total)} tokens</span>\n <span className=\"text-emerald-400 font-medium\">{formatCost(card.tokenUsage)}</span>\n <span className=\"text-muted-foreground/50\">({formatTokens(card.tokenUsage.input)} in / {formatTokens(card.tokenUsage.output)} out)</span>\n </>\n ) : card.tokensUsed != null ? (\n <span>{formatTokens(card.tokensUsed)} tokens</span>\n ) : null}\n {card.completedAt && <span>{formatDate(card.completedAt)}</span>}\n </div>\n {card.result && (\n <button className=\"text-[10px] text-[#00d4ff] hover:underline\" onClick={(e) => { e.stopPropagation(); setExpanded(!expanded); }}>\n {expanded ? \"Hide result\" : \"Show result\"}\n </button>\n )}\n {expanded && card.result && (\n <div className=\"mt-1 text-[10px] rounded bg-muted/50 p-2\">\n <MarkdownRenderer content={card.result} className=\"prose-xs prose-invert max-w-none\" />\n </div>\n )}\n </div>\n )}\n\n {/* Failed state */}\n {card.status === \"failed\" && (\n <div className=\"mt-2 space-y-1.5\">\n {card.error && <p className=\"text-[10px] text-red-400 line-clamp-2\">{card.error}</p>}\n {card.tokenUsage && (\n <div className=\"text-[10px] text-muted-foreground\">\n {formatTokens(card.tokenUsage.total)} tokens · {formatCost(card.tokenUsage)}\n </div>\n )}\n <Button\n size=\"sm\" variant=\"outline\" className=\"h-6 w-full text-[10px] gap-1 border-orange-400/30 text-orange-400 hover:bg-orange-400/10\"\n onClick={(e) => { e.stopPropagation(); onRun(card.id); }}\n >\n <RotateCcw className=\"h-3 w-3\" /> Retry\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Add Card Dialog (with parent selection)\n// ═══════════════════════════════════════════════════════════════\n\nfunction AddCardDialog({\n boardId, open, onOpenChange, onCreated, allCards,\n}: {\n boardId: string; open: boolean; onOpenChange: (o: boolean) => void; onCreated: () => void; allCards: BoardCard[];\n}) {\n const [task, setTask] = useState(\"\");\n const [priority, setPriority] = useState<string>(\"normal\");\n const [parentId, setParentId] = useState<string>(\"none\");\n const [tokenBudget, setTokenBudget] = useState<string>(\"\");\n const [submitting, setSubmitting] = useState(false);\n\n const handleSubmit = async () => {\n if (!task.trim()) return;\n setSubmitting(true);\n try {\n const cardData: any = { task: task.trim(), priority: priority || undefined };\n if (tokenBudget && parseInt(tokenBudget) > 0) {\n cardData.tokenBudget = parseInt(tokenBudget);\n }\n const result = await api.boards.cards.add(boardId, cardData);\n // Set parent if selected\n if (parentId !== \"none\" && result.card) {\n await api.boards.cards.setParent(boardId, result.card.id, parentId);\n }\n setTask(\"\");\n setPriority(\"normal\");\n setParentId(\"none\");\n setTokenBudget(\"\");\n onOpenChange(false);\n onCreated();\n } catch {} finally { setSubmitting(false); }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Add Card</DialogTitle>\n <DialogDescription>Create a new task card for this board.</DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Task</label>\n <Textarea placeholder=\"Describe the task...\" value={task} onChange={(e) => setTask(e.target.value)} rows={4} />\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Priority</label>\n <Select value={priority} onValueChange={setPriority}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"low\">Low</SelectItem>\n <SelectItem value=\"normal\">Normal</SelectItem>\n <SelectItem value=\"high\">High</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Token Budget</label>\n <Input\n type=\"number\"\n placeholder=\"No limit\"\n value={tokenBudget}\n onChange={(e) => setTokenBudget(e.target.value)}\n min={0}\n step={1000}\n />\n <p className=\"text-[10px] text-muted-foreground\">Max tokens before auto-pause</p>\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Parent Card</label>\n <Select value={parentId} onValueChange={setParentId}>\n <SelectTrigger><SelectValue placeholder=\"None\" /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">None</SelectItem>\n {allCards.map((c) => (\n <SelectItem key={c.id} value={c.id}>\n {truncate(c.task, 50)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n <DialogFooter>\n <DialogClose asChild><Button variant=\"ghost\">Cancel</Button></DialogClose>\n <Button onClick={handleSubmit} disabled={!task.trim() || submitting} className=\"bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">\n {submitting && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />} Add Card\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Card Detail Sheet (with tabs: Details, Comments, Attachments)\n// ═══════════════════════════════════════════════════════════════\n\nfunction FeedbackResponsePanel({ boardId, cardId, progress, onRefresh }: { boardId: string; cardId: string; progress?: string; onRefresh: () => void }) {\n const [feedback, setFeedback] = useState<Array<{ id: string; question: string; options?: string[] }>>([]);\n const [customText, setCustomText] = useState(\"\");\n const [sending, setSending] = useState(false);\n\n useEffect(() => {\n api.boards.feedback.list(boardId).then(d => {\n const forCard = d.feedback.filter(f => f.cardId === cardId);\n setFeedback(forCard);\n }).catch(() => {});\n }, [boardId, cardId, progress]);\n\n const handleRespond = async (feedbackId: string, response: string) => {\n setSending(true);\n try {\n await api.boards.feedback.respond(boardId, feedbackId, response);\n setFeedback(prev => prev.filter(f => f.id !== feedbackId));\n setCustomText(\"\");\n onRefresh();\n } catch {} finally { setSending(false); }\n };\n\n if (feedback.length === 0) {\n return (\n <div className=\"rounded-lg border border-purple-500/30 bg-purple-500/5 p-3\">\n <p className=\"text-xs text-purple-300 font-medium uppercase tracking-wider mb-1\">Awaiting Input</p>\n <p className=\"text-sm text-purple-200/80\">{progress?.replace('Awaiting feedback: ', '') || 'Agent is waiting for a decision...'}</p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-3\">\n {feedback.map(fb => (\n <div key={fb.id} className=\"rounded-lg border border-purple-500/30 bg-purple-500/5 p-3 space-y-2\">\n <p className=\"text-xs text-purple-300 font-medium uppercase tracking-wider\">Decision Required</p>\n <p className=\"text-sm text-foreground\">{fb.question}</p>\n {fb.options && fb.options.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {fb.options.map(opt => (\n <Button key={opt} size=\"sm\" variant=\"outline\" disabled={sending}\n className=\"text-xs border-purple-400/40 text-purple-300 hover:bg-purple-500/20\"\n onClick={() => handleRespond(fb.id, opt)}\n >\n {opt}\n </Button>\n ))}\n </div>\n )}\n <div className=\"flex gap-2\">\n <Input\n value={customText}\n onChange={(e) => setCustomText(e.target.value)}\n placeholder=\"Type a custom response...\"\n className=\"text-sm h-8\"\n onKeyDown={(e) => { if (e.key === 'Enter' && customText.trim()) handleRespond(fb.id, customText.trim()); }}\n />\n <Button size=\"sm\" disabled={!customText.trim() || sending}\n className=\"h-8 bg-purple-500 hover:bg-purple-600 text-white\"\n onClick={() => handleRespond(fb.id, customText.trim())}\n >\n <Send className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction CardDetailSheet({\n card, boardId, allCards, open, onOpenChange, onRun, onHalt, onDelete, onRefresh,\n}: {\n card: BoardCard | null;\n boardId: string;\n allCards: BoardCard[];\n open: boolean;\n onOpenChange: (o: boolean) => void;\n onRun: (id: string) => void;\n onHalt: (id: string) => void;\n onDelete: (id: string) => void;\n onRefresh: () => void;\n}) {\n const [tab, setTab] = useState<\"details\" | \"activity\" | \"comments\" | \"attachments\">(\"details\");\n const [editingTask, setEditingTask] = useState(false);\n const [taskDraft, setTaskDraft] = useState(\"\");\n const [commentText, setCommentText] = useState(\"\");\n const [submittingComment, setSubmittingComment] = useState(false);\n const [labelName, setLabelName] = useState(\"\");\n const [labelColor, setLabelColor] = useState(\"#3b82f6\");\n const [showLabelInput, setShowLabelInput] = useState(false);\n\n const elapsed = useElapsed(card?.startedAt, card?.status === \"running\");\n\n if (!card) return null;\n\n const parentCard = card.parentId ? allCards.find(c => c.id === card.parentId) : null;\n const children = allCards.filter(c => c.parentId === card.id);\n const deps = (card.dependsOn ?? []).map(id => allCards.find(c => c.id === id)).filter(Boolean) as BoardCard[];\n\n const statusLabel =\n card.status === \"running\" ? \"Running\" :\n card.status === \"pending\" ? \"Pending\" :\n card.status === \"paused\" && card.pausedForTokens ? \"Budget Exhausted\" :\n card.status === \"paused\" ? \"Paused\" :\n card.status === \"done\" ? \"Done\" :\n card.status === \"question\" ? \"Needs Input\" : \"Failed\";\n\n const statusColor =\n card.status === \"running\" ? \"text-[#00d4ff]\" :\n card.status === \"done\" ? \"text-emerald-400\" :\n card.status === \"failed\" ? \"text-red-400\" :\n card.status === \"question\" ? \"text-purple-400\" :\n card.pausedForTokens ? \"text-yellow-400\" :\n \"text-muted-foreground\";\n\n const handleSaveTask = async () => {\n try {\n await api.boards.cards.update(boardId, card.id, { task: taskDraft } as Partial<BoardCard>);\n setEditingTask(false);\n onRefresh();\n } catch {}\n };\n\n const handleAddComment = async () => {\n if (!commentText.trim()) return;\n setSubmittingComment(true);\n try {\n await api.boards.cards.comments.add(boardId, card.id, commentText.trim(), \"user\", \"Admin\");\n setCommentText(\"\");\n onRefresh();\n } catch {} finally { setSubmittingComment(false); }\n };\n\n const handleDeleteComment = async (commentId: string) => {\n try { await api.boards.cards.comments.delete(boardId, card.id, commentId); onRefresh(); } catch {}\n };\n\n const handleAddLabel = async () => {\n if (!labelName.trim()) return;\n try {\n await api.boards.cards.labels.add(boardId, card.id, labelName.trim(), labelColor);\n setLabelName(\"\");\n setShowLabelInput(false);\n onRefresh();\n } catch {}\n };\n\n const handleRemoveLabel = async (labelId: string) => {\n try { await api.boards.cards.labels.remove(boardId, card.id, labelId); onRefresh(); } catch {}\n };\n\n const handleDeleteAttachment = async (attId: string) => {\n try { await api.boards.cards.attachments.delete(boardId, card.id, attId); onRefresh(); } catch {}\n };\n\n const handleUpdatePriority = async (priority: string) => {\n try { await api.boards.cards.update(boardId, card.id, { priority } as Partial<BoardCard>); onRefresh(); } catch {}\n };\n\n const tabClass = (t: string) => cn(\n \"px-3 py-1.5 text-xs font-medium rounded-md transition-colors\",\n tab === t ? \"bg-[#00d4ff]/15 text-[#00d4ff]\" : \"text-muted-foreground hover:text-foreground hover:bg-muted/50\"\n );\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-lg overflow-y-auto\">\n <SheetHeader>\n <SheetTitle className=\"text-base\">Card Details</SheetTitle>\n <SheetDescription className=\"sr-only\">Detailed view of the selected task card.</SheetDescription>\n </SheetHeader>\n\n <div className=\"mt-4 space-y-4\">\n {/* Status + Priority (editable) */}\n <div className=\"flex items-center gap-3 flex-wrap\">\n <span className={cn(\"text-sm font-semibold\", statusColor)}>{statusLabel}</span>\n <Select value={card.priority ?? \"normal\"} onValueChange={handleUpdatePriority}>\n <SelectTrigger className=\"h-7 w-24 text-xs\"><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"low\">Low</SelectItem>\n <SelectItem value=\"normal\">Normal</SelectItem>\n <SelectItem value=\"high\">High</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Token budget exhausted banner */}\n {card.pausedForTokens && (\n <div className=\"rounded-md border border-yellow-500/40 bg-yellow-500/10 px-3 py-2 space-y-1\">\n <p className=\"text-xs font-medium text-yellow-400\">Token budget exhausted</p>\n <p className=\"text-[10px] text-yellow-300/70\">\n Used {card.tokenUsage ? formatTokens(card.tokenUsage.total) : '?'} of {card.tokenBudget ? formatTokens(card.tokenBudget) : '?'} token budget.\n Click Run to resume with override.\n </p>\n </div>\n )}\n\n {/* Token budget display */}\n {card.tokenBudget && !card.pausedForTokens && (\n <p className=\"text-[10px] text-muted-foreground\">\n Budget: {formatTokens(card.tokenBudget)} tokens\n {card.tokenUsage ? ` (${formatTokens(card.tokenUsage.total)} used)` : ''}\n </p>\n )}\n\n {/* Labels */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n {card.labels?.map((label) => (\n <span key={label.id} className=\"inline-flex items-center gap-1 text-[10px] font-medium rounded px-2 py-0.5 text-white\" style={{ backgroundColor: label.color }}>\n {label.name}\n <button onClick={() => handleRemoveLabel(label.id)} className=\"hover:opacity-70\"><X className=\"h-2.5 w-2.5\" /></button>\n </span>\n ))}\n <button onClick={() => setShowLabelInput(!showLabelInput)} className=\"text-[10px] text-muted-foreground hover:text-foreground flex items-center gap-0.5\">\n <Tag className=\"h-3 w-3\" /> Add Label\n </button>\n </div>\n {showLabelInput && (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-wrap gap-1\">\n {LABEL_PRESETS.map((p) => (\n <button\n key={p.name}\n onClick={() => { setLabelName(p.name); setLabelColor(p.color); }}\n className={cn(\"text-[9px] font-medium rounded px-1.5 py-0.5 text-white transition-all\", labelName === p.name && \"ring-2 ring-white/50\")}\n style={{ backgroundColor: p.color }}\n >\n {p.name}\n </button>\n ))}\n </div>\n <Input value={labelName} onChange={(e) => setLabelName(e.target.value)} placeholder=\"Custom...\" className=\"h-6 text-xs w-20\" />\n <input type=\"color\" value={labelColor} onChange={(e) => setLabelColor(e.target.value)} className=\"h-6 w-6 rounded cursor-pointer\" />\n <Button size=\"sm\" onClick={handleAddLabel} disabled={!labelName.trim()} className=\"h-6 text-[10px] px-2 bg-[#00d4ff] text-black\">Add</Button>\n </div>\n )}\n </div>\n\n {/* Tabs */}\n <div className=\"flex gap-1 border-b border-border/50 pb-2\">\n <button className={tabClass(\"details\")} onClick={() => setTab(\"details\")}>Details</button>\n <button className={tabClass(\"activity\")} onClick={() => setTab(\"activity\")}>\n Activity {(card.activityLog?.length ?? 0) > 0 && <Badge variant=\"secondary\" className=\"ml-1 text-[9px] px-1 h-4\">{card.activityLog!.length}</Badge>}\n </button>\n <button className={tabClass(\"comments\")} onClick={() => setTab(\"comments\")}>\n Comments {(card.comments?.length ?? 0) > 0 && <Badge variant=\"secondary\" className=\"ml-1 text-[9px] px-1 h-4\">{card.comments!.length}</Badge>}\n </button>\n <button className={tabClass(\"attachments\")} onClick={() => setTab(\"attachments\")}>\n Attachments {(card.attachments?.length ?? 0) > 0 && <Badge variant=\"secondary\" className=\"ml-1 text-[9px] px-1 h-4\">{card.attachments!.length}</Badge>}\n </button>\n </div>\n\n {/* ── Details Tab ── */}\n {tab === \"details\" && (\n <div className=\"space-y-4\">\n {/* Task (editable) */}\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Task</label>\n {!editingTask && (\n <button onClick={() => { setTaskDraft(card.task); setEditingTask(true); }} className=\"text-[10px] text-muted-foreground hover:text-foreground flex items-center gap-0.5\">\n <Pencil className=\"h-2.5 w-2.5\" /> Edit\n </button>\n )}\n </div>\n {editingTask ? (\n <div className=\"space-y-2\">\n <Textarea value={taskDraft} onChange={(e) => setTaskDraft(e.target.value)} rows={3} className=\"text-sm\" />\n <div className=\"flex gap-2\">\n <Button size=\"sm\" onClick={handleSaveTask} className=\"h-6 text-xs bg-[#00d4ff] text-black\">Save</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setEditingTask(false)} className=\"h-6 text-xs\">Cancel</Button>\n </div>\n </div>\n ) : (\n <p className=\"text-sm leading-relaxed text-foreground whitespace-pre-wrap\">{card.task}</p>\n )}\n </div>\n\n {/* Progress */}\n {card.progress && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Progress</label>\n <p className=\"text-sm text-[#00d4ff]/80 mt-0.5\">{card.progress}</p>\n </div>\n )}\n\n {/* Feedback Response UI */}\n {card.status === \"question\" && (\n <FeedbackResponsePanel boardId={boardId} cardId={card.id} progress={card.progress} onRefresh={onRefresh} />\n )}\n\n {/* Files being edited */}\n {card.filesLocked && card.filesLocked.length > 0 && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Files Locked</label>\n <div className=\"mt-1 space-y-0.5\">\n {card.filesLocked.map((f, i) => (\n <p key={i} className=\"text-[11px] font-mono text-foreground/70 truncate\">{f}</p>\n ))}\n </div>\n </div>\n )}\n\n {/* Token Usage (detailed breakdown) */}\n {card.tokenUsage && (\n <div className=\"rounded-md border border-border/50 bg-muted/30 p-3 space-y-2\">\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Token Usage & Cost</label>\n <div className=\"grid grid-cols-3 gap-3 text-center\">\n <div>\n <p className=\"text-lg font-semibold text-foreground\">{formatTokens(card.tokenUsage.total)}</p>\n <p className=\"text-[10px] text-muted-foreground\">Total</p>\n </div>\n <div>\n <p className=\"text-lg font-semibold text-[#00d4ff]\">{formatTokens(card.tokenUsage.input)}</p>\n <p className=\"text-[10px] text-muted-foreground\">Input</p>\n </div>\n <div>\n <p className=\"text-lg font-semibold text-[#a78bfa]\">{formatTokens(card.tokenUsage.output)}</p>\n <p className=\"text-[10px] text-muted-foreground\">Output</p>\n </div>\n </div>\n <div className=\"text-center pt-1 border-t border-border/30\">\n <p className=\"text-sm font-semibold text-emerald-400\">{formatCost(card.tokenUsage)}</p>\n <p className=\"text-[10px] text-muted-foreground\">Estimated Cost</p>\n </div>\n </div>\n )}\n\n {/* Timestamps */}\n <div className=\"grid grid-cols-2 gap-3 text-xs\">\n <div>\n <span className=\"text-muted-foreground\">Created</span>\n <p className=\"text-foreground\">{formatDate(card.createdAt)}</p>\n </div>\n {card.startedAt && <div><span className=\"text-muted-foreground\">Started</span><p className=\"text-foreground\">{formatDate(card.startedAt)}</p></div>}\n {card.completedAt && <div><span className=\"text-muted-foreground\">Completed</span><p className=\"text-foreground\">{formatDate(card.completedAt)}</p></div>}\n {card.status === \"running\" && elapsed && <div><span className=\"text-muted-foreground\">Elapsed</span><p className=\"text-[#00d4ff]\">{elapsed}</p></div>}\n </div>\n\n {/* Dependencies */}\n {(parentCard || children.length > 0 || deps.length > 0) && (\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Dependencies</label>\n {parentCard && (\n <div className=\"flex items-center gap-2 text-xs\">\n <GitBranch className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Parent:</span>\n <span className=\"text-foreground truncate\">{truncate(parentCard.task, 60)}</span>\n </div>\n )}\n {deps.length > 0 && (\n <div className=\"space-y-1\">\n <span className=\"text-[10px] text-muted-foreground\">Depends on:</span>\n {deps.map(d => (\n <div key={d.id} className=\"flex items-center gap-2 text-xs pl-2\">\n <Link2 className=\"h-2.5 w-2.5 text-muted-foreground/60\" />\n <span className={cn(\"truncate\", d.status === \"done\" ? \"text-emerald-400 line-through\" : \"text-foreground/70\")}>{truncate(d.task, 50)}</span>\n <Badge variant=\"secondary\" className=\"text-[8px] px-1 h-3.5\">{d.status}</Badge>\n </div>\n ))}\n </div>\n )}\n {children.length > 0 && (\n <div className=\"space-y-1\">\n <span className=\"text-[10px] text-muted-foreground\">Children ({children.length}):</span>\n {children.map(ch => (\n <div key={ch.id} className=\"flex items-center gap-2 text-xs pl-2\">\n <ChevronRight className=\"h-2.5 w-2.5 text-muted-foreground/60\" />\n <span className=\"truncate text-foreground/70\">{truncate(ch.task, 50)}</span>\n <Badge variant=\"secondary\" className=\"text-[8px] px-1 h-3.5\">{ch.status}</Badge>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Result */}\n {card.result && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Result</label>\n <div className=\"mt-1 max-h-60 overflow-y-auto rounded-md bg-muted/50 p-3\">\n <MarkdownRenderer content={card.result} className=\"prose-sm prose-invert max-w-none\" />\n </div>\n </div>\n )}\n\n {/* Error */}\n {card.error && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Error</label>\n <div className=\"mt-1 rounded-md border border-red-500/20 bg-red-500/5 p-3 text-xs text-red-400 whitespace-pre-wrap\">{card.error}</div>\n </div>\n )}\n </div>\n )}\n\n {/* ── Activity Tab ── */}\n {tab === \"activity\" && (\n <div className=\"space-y-1\">\n {(!card.activityLog || card.activityLog.length === 0) ? (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">No activity recorded yet. Run this card to see live steps.</p>\n ) : (\n <div className=\"relative pl-4 border-l-2 border-border/40 space-y-2 max-h-[400px] overflow-y-auto\">\n {[...card.activityLog].reverse().map((entry, i) => {\n const icon =\n entry.type === 'started' ? '🚀' :\n entry.type === 'tool-use' ? '🔧' :\n entry.type === 'thinking' ? '💭' :\n entry.type === 'file-lock' ? '📁' :\n entry.type === 'completed' ? '✅' :\n entry.type === 'failed' ? '❌' :\n entry.type === 'feedback' ? '❓' : '▸';\n const color =\n entry.type === 'completed' ? 'text-emerald-400' :\n entry.type === 'failed' ? 'text-red-400' :\n entry.type === 'tool-use' ? 'text-[#00d4ff]' :\n entry.type === 'thinking' ? 'text-yellow-300' :\n entry.type === 'feedback' ? 'text-purple-400' :\n 'text-muted-foreground';\n return (\n <div key={i} className=\"relative\">\n <div className=\"absolute -left-[21px] top-1 w-2.5 h-2.5 rounded-full bg-border border-2 border-background\" />\n <div className=\"flex items-start gap-2\">\n <span className=\"text-xs shrink-0\">{icon}</span>\n <div className=\"flex-1 min-w-0\">\n <p className={cn(\"text-xs leading-relaxed\", color)}>{entry.message}</p>\n {entry.data?.files && (\n <div className=\"mt-0.5\">\n {(entry.data.files as string[]).slice(0, 3).map((f, fi) => (\n <p key={fi} className=\"text-[10px] font-mono text-muted-foreground/60 truncate\">{f.split('/').pop()}</p>\n ))}\n </div>\n )}\n </div>\n <span className=\"text-[9px] text-muted-foreground/50 shrink-0 tabular-nums\">{timeAgo(entry.timestamp)}</span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n {card.status === \"running\" && (\n <div className=\"flex items-center gap-2 pt-2 border-t border-border/30\">\n <div className=\"w-2 h-2 rounded-full bg-[#00d4ff] animate-pulse\" />\n <span className=\"text-xs text-[#00d4ff]/80\">Agent is working...</span>\n {card.progress && <span className=\"text-[10px] text-muted-foreground ml-auto truncate max-w-[150px]\">{card.progress}</span>}\n </div>\n )}\n </div>\n )}\n\n {/* ── Comments Tab ── */}\n {tab === \"comments\" && (\n <div className=\"space-y-3\">\n {(card.comments?.length ?? 0) === 0 && (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">No comments yet. Start a conversation.</p>\n )}\n {card.comments?.map((comment) => (\n <div key={comment.id} className={cn(\n \"rounded-md p-3 text-sm space-y-1\",\n comment.author === \"agent\" ? \"bg-[#00d4ff]/5 border border-[#00d4ff]/20\" : \"bg-muted/50 border border-border/30\"\n )}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className={cn(\"text-xs font-medium\", comment.author === \"agent\" ? \"text-[#00d4ff]\" : \"text-foreground\")}>\n {comment.authorName}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">{timeAgo(comment.timestamp)}</span>\n </div>\n <button onClick={() => handleDeleteComment(comment.id)} className=\"text-muted-foreground/50 hover:text-red-400\">\n <X className=\"h-3 w-3\" />\n </button>\n </div>\n <p className=\"text-xs text-foreground/80 whitespace-pre-wrap\">{comment.content}</p>\n </div>\n ))}\n\n {/* Add comment */}\n <div className=\"flex gap-2 pt-2 border-t border-border/30\">\n <Textarea\n value={commentText}\n onChange={(e) => setCommentText(e.target.value)}\n placeholder=\"Write a comment...\"\n rows={2}\n className=\"text-xs flex-1\"\n onKeyDown={(e) => { if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) handleAddComment(); }}\n />\n <Button\n size=\"sm\" onClick={handleAddComment} disabled={!commentText.trim() || submittingComment}\n className=\"h-8 w-8 p-0 bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80 self-end\"\n >\n {submittingComment ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : <Send className=\"h-3.5 w-3.5\" />}\n </Button>\n </div>\n </div>\n )}\n\n {/* ── Attachments Tab ── */}\n {tab === \"attachments\" && (\n <AttachmentsTab card={card} boardId={boardId} onDelete={handleDeleteAttachment} />\n )}\n\n {/* Actions */}\n <div className=\"flex flex-wrap gap-2 pt-2 border-t border-border/50\">\n {(card.status === \"pending\" || card.status === \"paused\" || card.status === \"failed\") && (\n <Button size=\"sm\" className=\"gap-1.5 bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\" onClick={() => { onRun(card.id); onOpenChange(false); }}>\n <Play className=\"h-3.5 w-3.5\" /> {card.status === \"failed\" ? \"Retry\" : \"Run\"}\n </Button>\n )}\n {card.status === \"running\" && (\n <Button size=\"sm\" variant=\"destructive\" className=\"gap-1.5\" onClick={() => { onHalt(card.id); onOpenChange(false); }}>\n <Square className=\"h-3.5 w-3.5\" /> Halt\n </Button>\n )}\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button size=\"sm\" variant=\"ghost\" className=\"gap-1.5 text-red-400 hover:text-red-300\"><Trash2 className=\"h-3.5 w-3.5\" /> Delete</Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete card?</AlertDialogTitle>\n <AlertDialogDescription>This card will be permanently removed.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction className=\"bg-red-600 hover:bg-red-700\" onClick={() => { onDelete(card.id); onOpenChange(false); }}>Delete</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// AttachmentsTab — with markdown preview + download\n// ═══════════════════════════════════════════════════════════════\n\nfunction AttachmentsTab({ card, boardId, onDelete }: { card: BoardCard; boardId: string; onDelete: (id: string) => void }) {\n const [previewId, setPreviewId] = useState<string | null>(null);\n const [previewContent, setPreviewContent] = useState<string>(\"\");\n const [previewLoading, setPreviewLoading] = useState(false);\n\n const handlePreview = async (att: CardAttachment) => {\n if (previewId === att.id) { setPreviewId(null); return; }\n setPreviewId(att.id);\n setPreviewLoading(true);\n try {\n const data = await api.boards.cards.attachments.content(boardId, card.id, att.id);\n setPreviewContent(data.content);\n } catch { setPreviewContent(\"Failed to load file content.\"); }\n finally { setPreviewLoading(false); }\n };\n\n const handleDownload = (att: CardAttachment) => {\n const url = api.boards.cards.attachments.downloadUrl(boardId, card.id, att.id);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = att.name;\n a.click();\n };\n\n return (\n <div className=\"space-y-3\">\n {(card.attachments?.length ?? 0) === 0 && (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">No attachments. Documents generated by the agent will appear here.</p>\n )}\n {card.attachments?.map((att) => {\n const Icon = ATTACHMENT_ICONS[att.type] ?? Paperclip;\n const isPreviewable = att.type === \"markdown\" || att.type === \"document\";\n const isImage = att.type === \"image\";\n const isOpen = previewId === att.id;\n\n return (\n <div key={att.id} className=\"rounded-md border border-border/50 bg-muted/30 overflow-hidden\">\n <div className=\"flex items-center gap-3 p-3\">\n <div className={cn(\n \"h-9 w-9 rounded-md flex items-center justify-center shrink-0\",\n att.type === \"markdown\" ? \"bg-emerald-500/15 text-emerald-400\" :\n att.type === \"image\" ? \"bg-purple-500/15 text-purple-400\" :\n \"bg-muted text-muted-foreground\"\n )}>\n <Icon className=\"h-4 w-4\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground truncate\">{att.name}</p>\n <div className=\"flex items-center gap-2 text-[10px] text-muted-foreground\">\n <span className=\"capitalize\">{att.type}</span>\n {att.size != null && <span>{(att.size / 1024).toFixed(1)} KB</span>}\n <span>{timeAgo(att.addedAt)}</span>\n <span>by {att.addedBy}</span>\n </div>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n {(isPreviewable || isImage) && (\n <button\n onClick={() => handlePreview(att)}\n className={cn(\"p-1.5 rounded-md transition-colors\", isOpen ? \"bg-[#00d4ff]/15 text-[#00d4ff]\" : \"text-muted-foreground/50 hover:text-foreground\")}\n title=\"Preview\"\n >\n <Eye className=\"h-3.5 w-3.5\" />\n </button>\n )}\n <button onClick={() => handleDownload(att)} className=\"p-1.5 text-muted-foreground/50 hover:text-foreground\" title=\"Download\">\n <Download className=\"h-3.5 w-3.5\" />\n </button>\n <button onClick={() => onDelete(att.id)} className=\"p-1.5 text-muted-foreground/50 hover:text-red-400\" title=\"Delete\">\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n\n {/* Preview panel */}\n {isOpen && (\n <div className=\"border-t border-border/30 bg-background/50\">\n {previewLoading ? (\n <div className=\"flex justify-center py-6\"><Loader2 className=\"h-5 w-5 animate-spin text-[#00d4ff]\" /></div>\n ) : isImage ? (\n <div className=\"p-3\">\n <img\n src={api.boards.cards.attachments.downloadUrl(boardId, card.id, att.id)}\n alt={att.name}\n className=\"max-w-full max-h-96 rounded-md mx-auto\"\n />\n </div>\n ) : (\n <div className=\"p-3 max-h-96 overflow-y-auto\">\n <div className=\"prose prose-sm dark:prose-invert max-w-none text-xs\">\n <MarkdownRenderer content={previewContent} />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\n// Simple markdown renderer (handles headers, bold, code blocks, lists)\nfunction MarkdownRenderer({ content }: { content: string }) {\n const lines = content.split('\\n');\n const elements: JSX.Element[] = [];\n let inCodeBlock = false;\n let codeLines: string[] = [];\n let codeLang = '';\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.startsWith('```')) {\n if (inCodeBlock) {\n elements.push(\n <pre key={i} className=\"rounded-md bg-muted p-3 text-[11px] font-mono overflow-x-auto my-2\">\n <code>{codeLines.join('\\n')}</code>\n </pre>\n );\n codeLines = [];\n inCodeBlock = false;\n } else {\n inCodeBlock = true;\n codeLang = line.slice(3).trim();\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeLines.push(line);\n continue;\n }\n\n if (line.startsWith('# ')) {\n elements.push(<h1 key={i} className=\"text-lg font-bold mt-3 mb-1\">{renderInline(line.slice(2))}</h1>);\n } else if (line.startsWith('## ')) {\n elements.push(<h2 key={i} className=\"text-base font-semibold mt-2 mb-1\">{renderInline(line.slice(3))}</h2>);\n } else if (line.startsWith('### ')) {\n elements.push(<h3 key={i} className=\"text-sm font-semibold mt-2 mb-0.5\">{renderInline(line.slice(4))}</h3>);\n } else if (line.startsWith('- ') || line.startsWith('* ')) {\n elements.push(<li key={i} className=\"ml-4 list-disc text-foreground/80\">{renderInline(line.slice(2))}</li>);\n } else if (/^\\d+\\.\\s/.test(line)) {\n elements.push(<li key={i} className=\"ml-4 list-decimal text-foreground/80\">{renderInline(line.replace(/^\\d+\\.\\s/, ''))}</li>);\n } else if (line.startsWith('> ')) {\n elements.push(<blockquote key={i} className=\"border-l-2 border-[#00d4ff]/40 pl-3 text-muted-foreground italic my-1\">{renderInline(line.slice(2))}</blockquote>);\n } else if (line.trim() === '') {\n elements.push(<div key={i} className=\"h-2\" />);\n } else {\n elements.push(<p key={i} className=\"text-foreground/80 my-0.5\">{renderInline(line)}</p>);\n }\n }\n\n // Handle unclosed code block\n if (inCodeBlock && codeLines.length > 0) {\n elements.push(\n <pre key=\"unclosed\" className=\"rounded-md bg-muted p-3 text-[11px] font-mono overflow-x-auto my-2\">\n <code>{codeLines.join('\\n')}</code>\n </pre>\n );\n }\n\n return <>{elements}</>;\n}\n\nfunction renderInline(text: string): React.ReactNode {\n // Handle bold, italic, inline code\n const parts: React.ReactNode[] = [];\n let remaining = text;\n let key = 0;\n\n while (remaining.length > 0) {\n // Inline code\n const codeMatch = remaining.match(/^(.*?)`([^`]+)`/);\n if (codeMatch) {\n if (codeMatch[1]) parts.push(<span key={key++}>{codeMatch[1]}</span>);\n parts.push(<code key={key++} className=\"bg-muted px-1 py-0.5 rounded text-[10px] font-mono text-[#00d4ff]\">{codeMatch[2]}</code>);\n remaining = remaining.slice(codeMatch[0].length);\n continue;\n }\n\n // Bold\n const boldMatch = remaining.match(/^(.*?)\\*\\*([^*]+)\\*\\*/);\n if (boldMatch) {\n if (boldMatch[1]) parts.push(<span key={key++}>{boldMatch[1]}</span>);\n parts.push(<strong key={key++}>{boldMatch[2]}</strong>);\n remaining = remaining.slice(boldMatch[0].length);\n continue;\n }\n\n // No more special formatting\n parts.push(<span key={key++}>{remaining}</span>);\n break;\n }\n\n return <>{parts}</>;\n}\n"],"names":["__iconNode","CircleDot","createLucideIcon","Columns3","Image","Link2","Paperclip","RotateCcw","Square","Tag","Sheet","SheetPrimitive.Root","SheetPortal","SheetPrimitive.Portal","SheetOverlay","React.forwardRef","className","props","ref","jsx","SheetPrimitive.Overlay","cn","sheetVariants","cva","SheetContent","side","children","jsxs","SheetPrimitive.Content","SheetPrimitive.Close","X","SheetHeader","SheetTitle","SheetPrimitive.Title","SheetDescription","SheetPrimitive.Description","COLUMNS","PRIORITY_CONFIG","STATUS_BORDER","LABEL_PRESETS","ATTACHMENT_ICONS","FileText","fadeUp","i","useElapsed","startedAt","active","elapsed","setElapsed","useState","useEffect","update","start","diff","m","s","id","Skeleton","PriorityBadge","priority","cfg","formatCost","tokenUsage","cost","timeAgo","ts","KanbanPage","boardId","useParams","navigate","useNavigate","BoardDetailView","BoardListView","onSelect","boards","setBoards","loading","setLoading","error","setError","createOpen","setCreateOpen","createName","setCreateName","createDesc","setCreateDesc","creating","setCreating","load","useCallback","api","d","e","handleCreate","board","handleDelete","handleToggleActive","Button","Plus","Card","CardContent","AnimatePresence","motion","CardHeader","CardTitle","truncate","Badge","Fragment","Power","PowerOff","AlertDialog","AlertDialogTrigger","Trash2","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","_a","formatDate","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","Textarea","DialogFooter","DialogClose","Loader2","onBack","setBoard","resources","setResources","addOpen","setAddOpen","generating","setGenerating","selectedCard","setSelectedCard","activeId","setActiveId","editingDesc","setEditingDesc","descDraft","setDescDraft","showFullDesc","setShowFullDesc","planOpen","setPlanOpen","plan","setPlan","planLoading","setPlanLoading","pollRef","useRef","sseRef","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","data","updated","c","baseUrl","es","prev","cards","useMemo","columnCards","map","displayColumns","col","activeCard","totalCost","inp","out","handleDragStart","event","handleDragEnd","over","overId","targetStatus","overCard","card","handleGenerate","handleSmartExecute","handleRunAll","handleClearDone","handleHaltAll","handleRunCard","cardId","opts","handleHaltCard","handleDeleteCard","handleSaveDesc","handleViewPlan","ArrowLeft","desc","isLong","preview","MarkdownRenderer","Pencil","formatTokens","Sparkles","Zap","GitBranch","Play","CheckCircle2","qCard","DndContext","closestCenter","KanbanColumn","MobileColumn","DragOverlay","KanbanCardContent","AddCardDialog","CardDetailSheet","open","batch","status","label","allCards","onRun","onHalt","onDelete","statusColor","SortableContext","verticalListSortingStrategy","ScrollArea","SortableCard","setOpen","Collapsible","CollapsibleTrigger","ChevronDown","ChevronRight","CollapsibleContent","index","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","style","CSS","overlay","expanded","setExpanded","parentCard","childCount","depCount","_b","_c","MessageSquare","_d","f","onOpenChange","onCreated","task","setTask","setPriority","parentId","setParentId","tokenBudget","setTokenBudget","submitting","setSubmitting","handleSubmit","cardData","result","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","FeedbackResponsePanel","progress","onRefresh","feedback","setFeedback","customText","setCustomText","sending","setSending","forCard","handleRespond","feedbackId","response","fb","opt","Send","tab","setTab","editingTask","setEditingTask","taskDraft","setTaskDraft","commentText","setCommentText","submittingComment","setSubmittingComment","labelName","setLabelName","labelColor","setLabelColor","showLabelInput","setShowLabelInput","deps","statusLabel","handleSaveTask","handleAddComment","handleDeleteComment","commentId","handleAddLabel","handleRemoveLabel","labelId","handleDeleteAttachment","attId","handleUpdatePriority","tabClass","t","p","ch","entry","icon","color","fi","_e","_f","comment","AttachmentsTab","previewId","setPreviewId","previewContent","setPreviewContent","previewLoading","setPreviewLoading","handlePreview","att","handleDownload","url","a","Icon","isPreviewable","isImage","isOpen","Eye","Download","content","lines","elements","inCodeBlock","codeLines","line","renderInline","text","parts","remaining","key","codeMatch","boldMatch"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
|
|
1
|
+
{"version":3,"file":"Kanban-DRlNiNRF.js","sources":["../../node_modules/lucide-react/dist/esm/icons/circle-dot.js","../../node_modules/lucide-react/dist/esm/icons/columns-3.js","../../node_modules/lucide-react/dist/esm/icons/image.js","../../node_modules/lucide-react/dist/esm/icons/link-2.js","../../node_modules/lucide-react/dist/esm/icons/paperclip.js","../../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js","../../node_modules/lucide-react/dist/esm/icons/square.js","../../node_modules/lucide-react/dist/esm/icons/tag.js","../../src/components/ui/sheet.tsx","../../src/pages/Kanban.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 [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }]\n];\nconst CircleDot = createLucideIcon(\"circle-dot\", __iconNode);\n\nexport { __iconNode, CircleDot as default };\n//# sourceMappingURL=circle-dot.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 [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"M15 3v18\", key: \"14nvp0\" }]\n];\nconst Columns3 = createLucideIcon(\"columns-3\", __iconNode);\n\nexport { __iconNode, Columns3 as default };\n//# sourceMappingURL=columns-3.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 [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", ry: \"2\", key: \"1m3agn\" }],\n [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n];\nconst Image = createLucideIcon(\"image\", __iconNode);\n\nexport { __iconNode, Image as default };\n//# sourceMappingURL=image.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 [\"path\", { d: \"M9 17H7A5 5 0 0 1 7 7h2\", key: \"8i5ue5\" }],\n [\"path\", { d: \"M15 7h2a5 5 0 1 1 0 10h-2\", key: \"1b9ql8\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"12\", y2: \"12\", key: \"1jonct\" }]\n];\nconst Link2 = createLucideIcon(\"link-2\", __iconNode);\n\nexport { __iconNode, Link2 as default };\n//# sourceMappingURL=link-2.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 [\"path\", { d: \"M13.234 20.252 21 12.3\", key: \"1cbrk9\" }],\n [\n \"path\",\n {\n d: \"m16 6-8.414 8.586a2 2 0 0 0 0 2.828 2 2 0 0 0 2.828 0l8.414-8.586a4 4 0 0 0 0-5.656 4 4 0 0 0-5.656 0l-8.415 8.585a6 6 0 1 0 8.486 8.486\",\n key: \"1pkts6\"\n }\n ]\n];\nconst Paperclip = createLucideIcon(\"paperclip\", __iconNode);\n\nexport { __iconNode, Paperclip as default };\n//# sourceMappingURL=paperclip.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 [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.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 [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }]\n];\nconst Square = createLucideIcon(\"square\", __iconNode);\n\nexport { __iconNode, Square as default };\n//# sourceMappingURL=square.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: \"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\",\n key: \"vktsd0\"\n }\n ],\n [\"circle\", { cx: \"7.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"kqv944\" }]\n];\nconst Tag = createLucideIcon(\"tag\", __iconNode);\n\nexport { __iconNode, Tag as default };\n//# sourceMappingURL=tag.js.map\n","import * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\nconst Sheet = SheetPrimitive.Root;\nconst SheetTrigger = SheetPrimitive.Trigger;\nconst SheetClose = SheetPrimitive.Close;\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n \"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out\",\n {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b border-border data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom:\n \"inset-x-0 bottom-0 border-t border-border data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r border-border sm:max-w-sm data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left\",\n right:\n \"inset-y-0 right-0 h-full w-3/4 border-l border-border sm:max-w-sm data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n }\n);\n\ninterface SheetContentProps\n extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n {children}\n </SheetPrimitive.Content>\n </SheetPortal>\n));\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nconst SheetHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-2 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n);\nSheetHeader.displayName = \"SheetHeader\";\n\nconst SheetFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n);\nSheetFooter.displayName = \"SheetFooter\";\n\nconst SheetTitle = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn(\"text-lg font-semibold text-foreground\", className)}\n {...props}\n />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n React.ElementRef<typeof SheetPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","/* ═══════════════════════════════════════════════════════════════\n Mercury Kanban — Alive Board for AI Agent Task Management\n Smart Execute · Dependencies · Comments · Attachments · Labels\n ═══════════════════════════════════════════════════════════════ */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useParams, useNavigate } from \"react-router-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n DndContext,\n DragOverlay,\n closestCenter,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type DragEndEvent,\n type DragStartEvent,\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport {\n ArrowLeft,\n CheckCircle2,\n ChevronDown,\n ChevronRight,\n CircleDot,\n Clock,\n Columns3,\n Download,\n Eye,\n FileText,\n GitBranch,\n Image,\n Link2,\n Loader2,\n MessageSquare,\n Paperclip,\n Pause,\n Pencil,\n Play,\n Plus,\n Power,\n PowerOff,\n RefreshCw,\n RotateCcw,\n Send,\n Sparkles,\n Square,\n Tag,\n Trash2,\n X,\n XCircle,\n Zap,\n} from \"lucide-react\";\n\nimport { Card, CardContent, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Button } from \"@/components/ui/button\";\nimport { Badge } from \"@/components/ui/badge\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Input } from \"@/components/ui/input\";\nimport { Textarea } from \"@/components/ui/textarea\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n DialogClose,\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 {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"@/components/ui/select\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetDescription,\n} from \"@/components/ui/sheet\";\nimport { ScrollArea } from \"@/components/ui/scroll-area\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"@/components/ui/collapsible\";\nimport { MarkdownRenderer } from \"@/components/chat/MarkdownRenderer\";\nimport { cn } from \"@/lib/utils\";\nimport { formatDate, formatTokens, truncate } from \"@/lib/utils\";\nimport api, {\n type Board,\n type BoardCard,\n type BoardResources,\n type CardComment,\n type CardAttachment,\n type CardLabel,\n type ExecutionPlan,\n} from \"@/lib/api\";\n\n// ── Constants ──────────────────────────────────────────────────\n\ntype CardStatus = BoardCard[\"status\"];\ntype CardPriority = NonNullable<BoardCard[\"priority\"]>;\n\nconst COLUMNS: { key: CardStatus; label: string }[] = [\n { key: \"pending\", label: \"To Do\" },\n { key: \"running\", label: \"In Progress\" },\n { key: \"done\", label: \"Done\" },\n { key: \"failed\", label: \"Blocked\" },\n];\n\nconst PRIORITY_CONFIG: Record<string, { label: string; color: string }> = {\n low: { label: \"Low\", color: \"text-muted-foreground border-muted-foreground/40\" },\n normal: { label: \"Med\", color: \"text-yellow-400 border-yellow-400/40\" },\n medium: { label: \"Med\", color: \"text-yellow-400 border-yellow-400/40\" },\n high: { label: \"High\", color: \"text-orange-400 border-orange-400/40\" },\n critical: { label: \"Crit\", color: \"text-red-400 border-red-400/40\" },\n};\n\nconst STATUS_BORDER: Record<string, string> = {\n pending: \"border-l-muted-foreground/40 border-dashed\",\n running: \"border-l-[#00d4ff]\",\n paused: \"border-l-yellow-400\",\n done: \"border-l-emerald-500\",\n failed: \"border-l-red-500\",\n question: \"border-l-purple-500\",\n};\n\nconst LABEL_PRESETS = [\n { name: \"Bug\", color: \"#ef4444\" },\n { name: \"Feature\", color: \"#3b82f6\" },\n { name: \"Refactor\", color: \"#a78bfa\" },\n { name: \"Docs\", color: \"#10b981\" },\n { name: \"Test\", color: \"#f59e0b\" },\n { name: \"Urgent\", color: \"#dc2626\" },\n { name: \"Backend\", color: \"#06b6d4\" },\n { name: \"Frontend\", color: \"#8b5cf6\" },\n { name: \"DevOps\", color: \"#64748b\" },\n];\n\nconst ATTACHMENT_ICONS: Record<string, typeof FileText> = {\n markdown: FileText,\n document: FileText,\n image: Image,\n presentation: FileText,\n other: Paperclip,\n};\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};\n\n// ── Helpers ────────────────────────────────────────────────────\n\nfunction useElapsed(startedAt?: string | number, active?: boolean) {\n const [elapsed, setElapsed] = useState(\"\");\n useEffect(() => {\n if (!startedAt || !active) { setElapsed(\"\"); return; }\n const update = () => {\n const start = typeof startedAt === \"number\" ? startedAt : new Date(startedAt).getTime();\n const diff = Math.max(0, Math.floor((Date.now() - start) / 1000));\n const m = Math.floor(diff / 60);\n const s = diff % 60;\n setElapsed(m > 0 ? `${m}m ${s}s` : `${s}s`);\n };\n update();\n const id = setInterval(update, 1000);\n return () => clearInterval(id);\n }, [startedAt, active]);\n return elapsed;\n}\n\nfunction Skeleton({ className }: { className?: string }) {\n return <div className={cn(\"animate-pulse rounded-lg bg-muted\", className)} />;\n}\n\nfunction PriorityBadge({ priority }: { priority?: string }) {\n if (!priority) return null;\n const cfg = PRIORITY_CONFIG[priority] ?? { label: priority, color: \"text-muted-foreground border-muted-foreground/40\" };\n return (\n <span className={cn(\"text-[10px] font-semibold uppercase border rounded px-1.5 py-0.5\", cfg.color)}>\n {cfg.label}\n </span>\n );\n}\n\nfunction formatCost(tokenUsage: { input: number; output: number; total: number } | null | undefined): string {\n if (!tokenUsage) return \"\";\n // Rough cost estimate: $3/1M input, $15/1M output (Claude-like pricing)\n const cost = (tokenUsage.input * 3 + tokenUsage.output * 15) / 1_000_000;\n return cost < 0.01 ? `<$0.01` : `$${cost.toFixed(2)}`;\n}\n\nfunction timeAgo(ts: number): string {\n const diff = Math.floor((Date.now() - ts) / 1000);\n if (diff < 60) return `${diff}s ago`;\n if (diff < 3600) return `${Math.floor(diff / 60)}m ago`;\n if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`;\n return `${Math.floor(diff / 86400)}d ago`;\n}\n\n// ═══════════════════════════════════════════════════════════════\n// KanbanPage — Root\n// ═══════════════════════════════════════════════════════════════\n\nexport function KanbanPage() {\n const { boardId } = useParams<{ boardId?: string }>();\n const navigate = useNavigate();\n\n return boardId ? (\n <BoardDetailView boardId={boardId} onBack={() => navigate(\"/board\")} />\n ) : (\n <BoardListView onSelect={(id) => navigate(`/board/${id}`)} />\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Board List View\n// ═══════════════════════════════════════════════════════════════\n\nfunction BoardListView({ onSelect }: { onSelect: (id: string) => void }) {\n const [boards, setBoards] = useState<Board[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(\"\");\n const [createOpen, setCreateOpen] = useState(false);\n const [createName, setCreateName] = useState(\"\");\n const [createDesc, setCreateDesc] = useState(\"\");\n const [creating, setCreating] = useState(false);\n\n const load = useCallback(() => {\n api.boards\n .list()\n .then((d) => { setBoards(d.boards); setError(\"\"); })\n .catch((e: Error) => setError(e.message))\n .finally(() => setLoading(false));\n }, []);\n\n useEffect(() => { load(); }, [load]);\n\n const handleCreate = async () => {\n if (!createName.trim()) return;\n setCreating(true);\n try {\n const { board } = await api.boards.create({ name: createName.trim(), description: createDesc.trim() || undefined });\n setCreateOpen(false);\n setCreateName(\"\");\n setCreateDesc(\"\");\n onSelect(board.id);\n } catch (e: unknown) {\n setError((e as Error).message);\n } finally {\n setCreating(false);\n }\n };\n\n const handleDelete = async (id: string) => {\n try { await api.boards.delete(id); load(); } catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleToggleActive = async (board: Board) => {\n try {\n if (board.active) await api.boards.deactivate(board.id);\n else await api.boards.activate(board.id);\n load();\n } catch (e: unknown) { setError((e as Error).message); }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Columns3 className=\"h-6 w-6 text-[#00d4ff]\" />\n <h1 className=\"text-2xl font-semibold text-foreground\">\n Kanban Boards <span className=\"text-sm font-normal text-muted-foreground\">(Beta mode)</span>\n </h1>\n </div>\n <Button onClick={() => setCreateOpen(true)} className=\"gap-2 bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">\n <Plus className=\"h-4 w-4\" /> Create Board\n </Button>\n </div>\n\n {error && <div className=\"rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-400\">{error}</div>}\n\n {loading && (\n <div className=\"grid gap-4 sm:grid-cols-1 lg:grid-cols-2\">\n {[0, 1, 2, 3].map((i) => <Skeleton key={i} className=\"h-36\" />)}\n </div>\n )}\n\n {!loading && boards.length === 0 && !error && (\n <Card>\n <CardContent className=\"py-16 text-center\">\n <Columns3 className=\"mx-auto mb-4 h-12 w-12 text-muted-foreground/40\" />\n <p className=\"text-muted-foreground\">No boards yet. Create one to get started.</p>\n </CardContent>\n </Card>\n )}\n\n {!loading && boards.length > 0 && (\n <div className=\"grid gap-4 sm:grid-cols-1 lg:grid-cols-2\">\n <AnimatePresence mode=\"popLayout\">\n {boards.map((board, i) => (\n <motion.div key={board.id} custom={i} variants={fadeUp} initial=\"hidden\" animate=\"visible\" exit={{ opacity: 0, scale: 0.95, transition: { duration: 0.2 } }} layout>\n <Card className=\"cursor-pointer transition-colors hover:border-[#00d4ff]/40\" onClick={() => onSelect(board.id)}>\n <CardHeader className=\"flex flex-row items-start justify-between gap-4 pb-2\">\n <div className=\"min-w-0 flex-1\">\n <CardTitle className=\"text-base font-semibold\">{board.name}</CardTitle>\n {board.description && <p className=\"mt-1 text-sm text-muted-foreground\">{truncate(board.description, 100)}</p>}\n </div>\n <div className=\"flex items-center gap-2 shrink-0\" onClick={(e) => e.stopPropagation()}>\n <Badge\n variant={board.active ? \"default\" : \"secondary\"}\n className={cn(\"cursor-pointer text-[10px]\", board.active && \"bg-[#00d4ff]/20 text-[#00d4ff] hover:bg-[#00d4ff]/30\")}\n onClick={() => handleToggleActive(board)}\n >\n {board.active ? <><Power className=\"mr-1 h-3 w-3\" /> Active</> : <><PowerOff className=\"mr-1 h-3 w-3\" /> Inactive</>}\n </Badge>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button variant=\"ghost\" size=\"icon\" className=\"h-7 w-7 text-muted-foreground hover:text-red-400\"><Trash2 className=\"h-3.5 w-3.5\" /></Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete board?</AlertDialogTitle>\n <AlertDialogDescription>This will permanently delete \"{board.name}\" and all its cards.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction className=\"bg-red-600 hover:bg-red-700\" onClick={() => handleDelete(board.id)}>Delete</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"flex items-center gap-4 text-xs text-muted-foreground\">\n <span>{board.cardCount ?? board.cards?.length ?? 0} cards</span>\n <span>{formatDate(board.createdAt)}</span>\n </div>\n </CardContent>\n </Card>\n </motion.div>\n ))}\n </AnimatePresence>\n </div>\n )}\n\n {/* Create Dialog */}\n <Dialog open={createOpen} onOpenChange={setCreateOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Create Board</DialogTitle>\n <DialogDescription>Add a new Kanban board for organizing agent tasks.</DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Name</label>\n <Input placeholder=\"Board name\" value={createName} onChange={(e) => setCreateName(e.target.value)} onKeyDown={(e) => e.key === \"Enter\" && handleCreate()} />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Description</label>\n <Textarea placeholder=\"Describe the project — AI will use this to generate task cards with dependencies...\" value={createDesc} onChange={(e) => setCreateDesc(e.target.value)} rows={4} />\n </div>\n </div>\n <DialogFooter>\n <DialogClose asChild><Button variant=\"ghost\">Cancel</Button></DialogClose>\n <Button onClick={handleCreate} disabled={!createName.trim() || creating} className=\"bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">\n {creating && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />} Create\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Board Detail View (Kanban Columns)\n// ═══════════════════════════════════════════════════════════════\n\nfunction BoardDetailView({ boardId, onBack }: { boardId: string; onBack: () => void }) {\n const [board, setBoard] = useState<Board | null>(null);\n const [resources, setResources] = useState<BoardResources | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(\"\");\n const [addOpen, setAddOpen] = useState(false);\n const [generating, setGenerating] = useState(false);\n const [selectedCard, setSelectedCard] = useState<BoardCard | null>(null);\n const [activeId, setActiveId] = useState<string | null>(null);\n const [editingDesc, setEditingDesc] = useState(false);\n const [descDraft, setDescDraft] = useState(\"\");\n const [showFullDesc, setShowFullDesc] = useState(false);\n const [planOpen, setPlanOpen] = useState(false);\n const [plan, setPlan] = useState<ExecutionPlan | null>(null);\n const [planLoading, setPlanLoading] = useState(false);\n const pollRef = useRef<ReturnType<typeof setInterval>>();\n const sseRef = useRef<EventSource | null>(null);\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(KeyboardSensor)\n );\n\n const load = useCallback(async () => {\n try {\n const data = await api.boards.get(boardId);\n setBoard(data.board);\n setResources(data.resources);\n setError(\"\");\n // Refresh selected card if open\n if (selectedCard) {\n const updated = data.board.cards?.find((c: BoardCard) => c.id === selectedCard.id);\n if (updated) setSelectedCard(updated);\n }\n } catch (e: unknown) {\n setError((e as Error).message);\n } finally {\n setLoading(false);\n }\n }, [boardId, selectedCard?.id]);\n\n useEffect(() => {\n load();\n\n // Use SSE for real-time updates, fallback to polling\n const baseUrl = window.location.origin;\n const es = new EventSource(`${baseUrl}/api/boards/${boardId}/events`);\n sseRef.current = es;\n\n es.addEventListener('board-update', (e) => {\n try {\n const data = JSON.parse(e.data);\n setBoard(data);\n setError(\"\");\n // Refresh selected card if open\n setSelectedCard((prev) => {\n if (!prev) return null;\n const updated = data.cards?.find((c: BoardCard) => c.id === prev.id);\n return updated ?? prev;\n });\n } catch {}\n });\n\n es.onerror = () => {\n // Fallback to polling if SSE fails\n es.close();\n sseRef.current = null;\n pollRef.current = setInterval(load, 2500);\n };\n\n return () => {\n es.close();\n sseRef.current = null;\n if (pollRef.current) clearInterval(pollRef.current);\n };\n }, [boardId]);\n\n const cards = useMemo(() => board?.cards ?? [], [board]);\n\n const columnCards = useMemo(() => {\n const map: Record<string, BoardCard[]> = { pending: [], running: [], paused: [], done: [], failed: [], question: [] };\n for (const c of cards) {\n if (map[c.status]) map[c.status].push(c);\n else map.pending.push(c); // fallback\n }\n return map;\n }, [cards]);\n\n const displayColumns = useMemo(() => {\n return COLUMNS.map((col) => ({\n ...col,\n cards: col.key === \"pending\"\n ? [...columnCards.pending, ...columnCards.paused, ...columnCards.question]\n : columnCards[col.key] ?? [],\n }));\n }, [columnCards]);\n\n const activeCard = useMemo(() => (activeId ? cards.find((c) => c.id === activeId) : undefined), [activeId, cards]);\n\n // Total token cost\n const totalCost = useMemo(() => {\n let inp = 0, out = 0;\n for (const c of cards) {\n if (c.tokenUsage) { inp += c.tokenUsage.input; out += c.tokenUsage.output; }\n }\n if (inp === 0 && out === 0) return null;\n return { input: inp, output: out, total: inp + out };\n }, [cards]);\n\n // Build dependency tree for display\n const cardMap = useMemo(() => {\n const m = new Map<string, BoardCard>();\n for (const c of cards) m.set(c.id, c);\n return m;\n }, [cards]);\n\n // ── DnD ──\n const handleDragStart = (event: DragStartEvent) => setActiveId(event.active.id as string);\n\n const handleDragEnd = async (event: DragEndEvent) => {\n setActiveId(null);\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const overId = over.id as string;\n let targetStatus: CardStatus | undefined;\n const col = COLUMNS.find((c) => c.key === overId);\n if (col) targetStatus = col.key;\n else {\n const overCard = cards.find((c) => c.id === overId);\n if (overCard) targetStatus = overCard.status;\n }\n if (!targetStatus) return;\n const card = cards.find((c) => c.id === active.id);\n if (!card || card.status === targetStatus) return;\n try { await api.boards.cards.update(boardId, card.id, { status: targetStatus }); load(); } catch {}\n };\n\n // ── Actions ──\n const handleGenerate = async () => {\n setGenerating(true);\n try { await api.boards.generate(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n finally { setGenerating(false); }\n };\n\n const handleSmartExecute = async () => {\n try { await api.boards.smartExecute(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleRunAll = async () => {\n try { await api.boards.runAll(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleClearDone = async () => {\n try { await api.boards.cards.clearDone(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleHaltAll = async () => {\n try { await api.boards.haltAll(boardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleRunCard = async (cardId: string) => {\n const card = cards.find(c => c.id === cardId);\n const opts = card?.pausedForTokens ? { overrideBudget: true } : undefined;\n try { await api.boards.cards.run(boardId, cardId, opts); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleHaltCard = async (cardId: string) => {\n try { await api.boards.cards.halt(boardId, cardId); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleDeleteCard = async (cardId: string) => {\n try { await api.boards.cards.delete(boardId, cardId); if (selectedCard?.id === cardId) setSelectedCard(null); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleSaveDesc = async () => {\n try { await api.boards.update(boardId, { description: descDraft } as Partial<Board>); setEditingDesc(false); load(); }\n catch (e: unknown) { setError((e as Error).message); }\n };\n\n const handleViewPlan = async () => {\n setPlanLoading(true);\n setPlanOpen(true);\n try {\n const data = await api.boards.executionPlan(boardId);\n setPlan(data);\n } catch (e: unknown) { setError((e as Error).message); }\n finally { setPlanLoading(false); }\n };\n\n if (loading && !board) {\n return (\n <div className=\"space-y-4 p-6\">\n <Skeleton className=\"h-10 w-64\" />\n <div className=\"flex gap-4\">{[0, 1, 2, 3].map((i) => <Skeleton key={i} className=\"h-96 flex-1\" />)}</div>\n </div>\n );\n }\n\n if (error && !board) {\n return (\n <div className=\"p-6\">\n <Button variant=\"ghost\" onClick={onBack} className=\"mb-4 gap-2\"><ArrowLeft className=\"h-4 w-4\" /> Back</Button>\n <div className=\"rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-400\">{error}</div>\n </div>\n );\n }\n\n return (\n <div className=\"flex h-full flex-col p-6\">\n {/* ── Header ── */}\n <div className=\"mb-4 space-y-3\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <Button variant=\"ghost\" size=\"icon\" onClick={onBack} className=\"h-8 w-8 shrink-0\"><ArrowLeft className=\"h-4 w-4\" /></Button>\n <h1 className=\"text-xl font-semibold text-foreground\">{board?.name}</h1>\n {board?.active && <Badge className=\"bg-[#00d4ff]/20 text-[#00d4ff] text-[10px]\">Active</Badge>}\n </div>\n\n {/* Board description (editable) */}\n <div className=\"group\">\n {editingDesc ? (\n <div className=\"flex gap-2\">\n <Textarea\n value={descDraft}\n onChange={(e) => setDescDraft(e.target.value)}\n rows={2}\n className=\"text-sm flex-1\"\n placeholder=\"Board description...\"\n autoFocus\n />\n <div className=\"flex flex-col gap-1\">\n <Button size=\"sm\" onClick={handleSaveDesc} className=\"h-7 text-xs bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">Save</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setEditingDesc(false)} className=\"h-7 text-xs\">Cancel</Button>\n </div>\n </div>\n ) : (\n <div className=\"flex items-start gap-2 rounded-md px-2 py-1 -mx-2 transition-colors hover:bg-muted/30\">\n <div className=\"flex-1 min-w-0 text-sm text-muted-foreground\">\n {board?.description ? (\n (() => {\n const DESC_PREVIEW_LIMIT = 280;\n const desc = board.description;\n const isLong = desc.length > DESC_PREVIEW_LIMIT;\n const preview = isLong\n ? desc.slice(0, DESC_PREVIEW_LIMIT).trimEnd() + \"\\u2026\"\n : desc;\n return (\n <>\n <div\n className={cn(isLong && \"cursor-pointer\")}\n onClick={() => {\n if (isLong) setShowFullDesc(true);\n }}\n >\n <MarkdownRenderer\n content={preview}\n className=\"prose-sm prose-invert max-w-none\"\n />\n </div>\n {isLong && (\n <div className=\"mt-2 flex justify-center\">\n <button\n type=\"button\"\n onClick={() => setShowFullDesc(true)}\n className=\"text-sm font-medium text-[#00d4ff] hover:underline\"\n >\n See more\n </button>\n </div>\n )}\n </>\n );\n })()\n ) : (\n <p\n className=\"cursor-pointer italic text-muted-foreground/60\"\n onClick={() => {\n setDescDraft(\"\");\n setEditingDesc(true);\n }}\n >\n Click to add a description...\n </p>\n )}\n </div>\n <button\n type=\"button\"\n onClick={() => {\n setDescDraft(board?.description ?? \"\");\n setEditingDesc(true);\n }}\n className=\"mt-0.5 shrink-0 rounded p-1 text-muted-foreground/50 opacity-0 transition-opacity hover:bg-muted hover:text-foreground group-hover:opacity-100\"\n title=\"Edit description\"\n aria-label=\"Edit description\"\n >\n <Pencil className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n </div>\n\n {/* Metrics bar with token cost */}\n {resources && (\n <div className=\"flex flex-wrap items-center gap-2 text-xs text-muted-foreground\">\n <span className=\"text-[#00d4ff]\">{resources.runningCount} running</span>\n <span className=\"text-muted-foreground/40\">·</span>\n <span>{resources.pendingCount} pending</span>\n <span className=\"text-muted-foreground/40\">·</span>\n <span className=\"text-emerald-400\">{resources.doneCount} done</span>\n <span className=\"text-muted-foreground/40\">·</span>\n <span className=\"text-red-400\">{resources.failedCount} failed</span>\n <span className=\"text-muted-foreground/40\">|</span>\n <span>{formatTokens(resources.totalTokens)} tokens</span>\n {totalCost && (\n <>\n <span className=\"text-muted-foreground/40\">·</span>\n <span className=\"text-emerald-400 font-medium\">{formatCost(totalCost)}</span>\n <span className=\"text-muted-foreground/60\">\n ({formatTokens(totalCost.input)} in / {formatTokens(totalCost.output)} out)\n </span>\n </>\n )}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button size=\"sm\" variant=\"outline\" onClick={() => setAddOpen(true)} className=\"gap-1.5 text-xs\">\n <Plus className=\"h-3.5 w-3.5\" /> Add Card\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={handleGenerate} disabled={generating} className=\"gap-1.5 text-xs\">\n {generating ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : <Sparkles className=\"h-3.5 w-3.5\" />}\n Generate Cards\n </Button>\n\n {/* Smart Execute */}\n <Button\n size=\"sm\"\n onClick={handleSmartExecute}\n className=\"gap-1.5 text-xs bg-gradient-to-r from-[#00d4ff] to-[#a78bfa] text-black hover:opacity-90 font-semibold\"\n >\n <Zap className=\"h-3.5 w-3.5\" /> Smart Execute\n </Button>\n\n <Button size=\"sm\" variant=\"outline\" onClick={handleViewPlan} className=\"gap-1.5 text-xs\">\n <GitBranch className=\"h-3.5 w-3.5\" /> View Plan\n </Button>\n\n <Button size=\"sm\" onClick={handleRunAll} className=\"gap-1.5 text-xs bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">\n <Play className=\"h-3.5 w-3.5\" /> Run All\n </Button>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" className=\"gap-1.5 text-xs text-red-400 hover:text-red-300\">\n <Square className=\"h-3.5 w-3.5\" /> Halt All\n </Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Halt all running agents?</AlertDialogTitle>\n <AlertDialogDescription>All currently running cards will be stopped immediately.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction className=\"bg-red-600 hover:bg-red-700\" onClick={handleHaltAll}>Halt All</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n <Button size=\"sm\" variant=\"ghost\" onClick={handleClearDone} className=\"gap-1.5 text-xs text-muted-foreground\">\n <CheckCircle2 className=\"h-3.5 w-3.5\" /> Clear Done\n </Button>\n </div>\n\n {error && <div className=\"rounded-lg border border-red-500/30 bg-red-500/10 px-4 py-3 text-sm text-red-400\">{error}</div>}\n\n {/* Attention Banner — cards needing user input */}\n {columnCards.question && columnCards.question.length > 0 && (\n <motion.div\n initial={{ opacity: 0, y: -4 }}\n animate={{ opacity: 1, y: 0 }}\n className=\"rounded-lg border border-purple-500/40 bg-purple-500/10 px-4 py-3 flex items-center gap-3\"\n >\n <div className=\"flex items-center gap-2\">\n <div className=\"w-2.5 h-2.5 rounded-full bg-purple-400 animate-pulse\" />\n <span className=\"text-sm font-medium text-purple-300\">\n {columnCards.question.length} card{columnCards.question.length > 1 ? 's' : ''} need{columnCards.question.length === 1 ? 's' : ''} your attention\n </span>\n </div>\n <div className=\"flex gap-2 ml-auto\">\n {columnCards.question.map(qCard => (\n <Button\n key={qCard.id}\n size=\"sm\"\n variant=\"outline\"\n className=\"text-xs border-purple-400/40 text-purple-300 hover:bg-purple-500/20 gap-1\"\n onClick={() => setSelectedCard(qCard)}\n >\n <CircleDot className=\"h-3 w-3\" />\n {truncate(qCard.task, 30)}\n </Button>\n ))}\n </div>\n </motion.div>\n )}\n </div>\n\n {/* Kanban Columns */}\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <div className=\"hidden md:flex flex-1 min-h-0 gap-4 overflow-x-auto pb-4\">\n {displayColumns.map((col) => (\n <KanbanColumn\n key={col.key}\n status={col.key}\n label={col.label}\n cards={col.cards}\n allCards={cards}\n boardId={boardId}\n onRun={handleRunCard}\n onHalt={handleHaltCard}\n onDelete={handleDeleteCard}\n onSelect={setSelectedCard}\n />\n ))}\n </div>\n <div className=\"flex flex-col gap-3 md:hidden\">\n {displayColumns.map((col) => (\n <MobileColumn\n key={col.key}\n status={col.key}\n label={col.label}\n cards={col.cards}\n allCards={cards}\n boardId={boardId}\n onRun={handleRunCard}\n onHalt={handleHaltCard}\n onDelete={handleDeleteCard}\n onSelect={setSelectedCard}\n />\n ))}\n </div>\n <DragOverlay>\n {activeCard && (\n <div className=\"w-72 scale-105 opacity-90\">\n <KanbanCardContent card={activeCard} allCards={cards} boardId={boardId} onRun={handleRunCard} onHalt={handleHaltCard} onDelete={handleDeleteCard} onSelect={setSelectedCard} overlay />\n </div>\n )}\n </DragOverlay>\n </DndContext>\n\n {cards.length === 0 && !loading && (\n <div className=\"flex flex-1 items-center justify-center\">\n <div className=\"text-center\">\n <CircleDot className=\"mx-auto mb-3 h-10 w-10 text-muted-foreground/30\" />\n <p className=\"text-sm text-muted-foreground\">No cards yet. Add tasks or use AI to generate them.</p>\n </div>\n </div>\n )}\n\n <AddCardDialog boardId={boardId} open={addOpen} onOpenChange={setAddOpen} onCreated={load} allCards={cards} />\n\n <CardDetailSheet\n card={selectedCard}\n boardId={boardId}\n allCards={cards}\n open={!!selectedCard}\n onOpenChange={(open) => { if (!open) setSelectedCard(null); }}\n onRun={handleRunCard}\n onHalt={handleHaltCard}\n onDelete={handleDeleteCard}\n onRefresh={load}\n />\n\n {/* Execution Plan Dialog */}\n <Dialog open={planOpen} onOpenChange={setPlanOpen}>\n <DialogContent className=\"max-w-lg\">\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\"><GitBranch className=\"h-5 w-5 text-[#00d4ff]\" /> Execution Plan</DialogTitle>\n <DialogDescription>Dependency-aware execution order. Cards in each wave run concurrently.</DialogDescription>\n </DialogHeader>\n {planLoading && <div className=\"flex justify-center py-8\"><Loader2 className=\"h-6 w-6 animate-spin text-[#00d4ff]\" /></div>}\n {plan && !planLoading && (\n <div className=\"space-y-3 max-h-96 overflow-y-auto\">\n {plan.batches.length === 0 && <p className=\"text-sm text-muted-foreground py-4 text-center\">No pending cards to execute.</p>}\n {plan.batches.map((batch) => (\n <div key={batch.wave} className=\"space-y-1.5\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"outline\" className=\"text-[10px] bg-[#00d4ff]/10 text-[#00d4ff] border-[#00d4ff]/30\">\n Wave {batch.wave}\n </Badge>\n <span className=\"text-[10px] text-muted-foreground\">{batch.cards.length} card{batch.cards.length > 1 ? \"s\" : \"\"}</span>\n </div>\n {batch.cards.map((card) => (\n <div key={card.id} className=\"flex items-center gap-2 rounded-md border border-border/50 bg-muted/30 px-3 py-1.5 text-xs\">\n <PriorityBadge priority={card.priority} />\n <span className=\"flex-1 truncate text-foreground/80\">{card.task}</span>\n {card.dependsOn && card.dependsOn.length > 0 && (\n <span className=\"text-[10px] text-muted-foreground shrink-0\">\n <Link2 className=\"h-3 w-3 inline mr-0.5\" />{card.dependsOn.length} dep{card.dependsOn.length > 1 ? \"s\" : \"\"}\n </span>\n )}\n </div>\n ))}\n </div>\n ))}\n <div className=\"flex items-center justify-between pt-2 border-t border-border/50 text-xs text-muted-foreground\">\n <span>{plan.totalBatches} wave{plan.totalBatches > 1 ? \"s\" : \"\"}, {plan.totalCards} card{plan.totalCards > 1 ? \"s\" : \"\"}</span>\n <Button size=\"sm\" onClick={() => { setPlanOpen(false); handleSmartExecute(); }} className=\"gap-1.5 text-xs bg-gradient-to-r from-[#00d4ff] to-[#a78bfa] text-black\">\n <Zap className=\"h-3 w-3\" /> Execute Plan\n </Button>\n </div>\n </div>\n )}\n </DialogContent>\n </Dialog>\n\n {/* Full Board Description Dialog */}\n <Dialog open={showFullDesc} onOpenChange={setShowFullDesc}>\n <DialogContent className=\"max-w-2xl\">\n <DialogHeader>\n <DialogTitle>{board?.name ?? \"Board\"} — Description</DialogTitle>\n </DialogHeader>\n <div className=\"max-h-[60vh] overflow-y-auto pr-2\">\n {board?.description ? (\n <MarkdownRenderer\n content={board.description}\n className=\"prose-sm prose-invert max-w-none\"\n />\n ) : (\n <p className=\"text-sm text-muted-foreground italic\">\n No description.\n </p>\n )}\n </div>\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"ghost\" size=\"sm\">Close</Button>\n </DialogClose>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// KanbanColumn\n// ═══════════════════════════════════════════════════════════════\n\ninterface ColumnProps {\n status: CardStatus;\n label: string;\n cards: BoardCard[];\n allCards: BoardCard[];\n boardId: string;\n onRun: (id: string) => void;\n onHalt: (id: string) => void;\n onDelete: (id: string) => void;\n onSelect: (c: BoardCard) => void;\n}\n\nfunction KanbanColumn({ status, label, cards, allCards, boardId, onRun, onHalt, onDelete, onSelect }: ColumnProps) {\n const statusColor = status === \"running\" ? \"text-[#00d4ff]\" : status === \"done\" ? \"text-emerald-400\" : status === \"failed\" ? \"text-red-400\" : \"text-muted-foreground\";\n\n return (\n <div className=\"flex min-w-[260px] flex-1 flex-col min-h-0 rounded-lg border border-border/50 bg-muted/20\">\n <div className=\"flex items-center justify-between px-3 py-2.5 border-b border-border/30\">\n <div className=\"flex items-center gap-2\">\n <span className={cn(\"text-sm font-medium\", statusColor)}>{label}</span>\n <Badge variant=\"secondary\" className=\"text-[10px] px-1.5 py-0 h-5 min-w-[20px] justify-center\">{cards.length}</Badge>\n </div>\n </div>\n <SortableContext items={cards.map((c) => c.id)} strategy={verticalListSortingStrategy} id={status}>\n <ScrollArea className=\"flex-1 min-h-0 p-2\">\n <div className=\"space-y-2 min-h-[60px]\">\n <AnimatePresence mode=\"popLayout\">\n {cards.map((card, i) => (\n <SortableCard key={card.id} card={card} index={i} allCards={allCards} boardId={boardId} onRun={onRun} onHalt={onHalt} onDelete={onDelete} onSelect={onSelect} />\n ))}\n </AnimatePresence>\n </div>\n </ScrollArea>\n </SortableContext>\n </div>\n );\n}\n\nfunction MobileColumn({ status, label, cards, allCards, boardId, onRun, onHalt, onDelete, onSelect }: ColumnProps) {\n const [open, setOpen] = useState(status === \"running\" || status === \"pending\");\n const statusColor = status === \"running\" ? \"text-[#00d4ff]\" : status === \"done\" ? \"text-emerald-400\" : status === \"failed\" ? \"text-red-400\" : \"text-muted-foreground\";\n\n return (\n <Collapsible open={open} onOpenChange={setOpen}>\n <CollapsibleTrigger asChild>\n <button className=\"flex w-full items-center justify-between rounded-lg border border-border/50 bg-muted/20 px-3 py-2.5\">\n <div className=\"flex items-center gap-2\">\n {open ? <ChevronDown className=\"h-4 w-4 text-muted-foreground\" /> : <ChevronRight className=\"h-4 w-4 text-muted-foreground\" />}\n <span className={cn(\"text-sm font-medium\", statusColor)}>{label}</span>\n <Badge variant=\"secondary\" className=\"text-[10px] px-1.5 py-0 h-5\">{cards.length}</Badge>\n </div>\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <SortableContext items={cards.map((c) => c.id)} strategy={verticalListSortingStrategy}>\n <div className=\"space-y-2 pt-2\">\n <AnimatePresence mode=\"popLayout\">\n {cards.map((card, i) => (\n <SortableCard key={card.id} card={card} index={i} allCards={allCards} boardId={boardId} onRun={onRun} onHalt={onHalt} onDelete={onDelete} onSelect={onSelect} />\n ))}\n </AnimatePresence>\n </div>\n </SortableContext>\n </CollapsibleContent>\n </Collapsible>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// SortableCard\n// ═══════════════════════════════════════════════════════════════\n\ninterface SortableCardProps {\n card: BoardCard;\n index: number;\n allCards: BoardCard[];\n boardId: string;\n onRun: (id: string) => void;\n onHalt: (id: string) => void;\n onDelete: (id: string) => void;\n onSelect: (c: BoardCard) => void;\n}\n\nfunction SortableCard({ card, index, allCards, boardId, onRun, onHalt, onDelete, onSelect }: SortableCardProps) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({ id: card.id });\n const style = { transform: CSS.Transform.toString(transform), transition };\n\n return (\n <motion.div\n ref={setNodeRef}\n style={style}\n layout\n initial={{ opacity: 0, y: 8 }}\n animate={{ opacity: isDragging ? 0.4 : 1, y: 0, transition: { delay: index * 0.03 } }}\n exit={{ opacity: 0, scale: 0.95, transition: { duration: 0.15 } }}\n {...attributes}\n {...listeners}\n >\n <KanbanCardContent card={card} allCards={allCards} boardId={boardId} onRun={onRun} onHalt={onHalt} onDelete={onDelete} onSelect={onSelect} />\n </motion.div>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// KanbanCardContent\n// ═══════════════════════════════════════════════════════════════\n\ninterface CardContentProps {\n card: BoardCard;\n allCards: BoardCard[];\n boardId: string;\n onRun: (id: string) => void;\n onHalt: (id: string) => void;\n onDelete: (id: string) => void;\n onSelect: (c: BoardCard) => void;\n overlay?: boolean;\n}\n\nfunction KanbanCardContent({ card, allCards, boardId, onRun, onHalt, onDelete, onSelect, overlay }: CardContentProps) {\n const elapsed = useElapsed(card.startedAt, card.status === \"running\");\n const [expanded, setExpanded] = useState(false);\n const parentCard = card.parentId ? allCards.find(c => c.id === card.parentId) : null;\n const childCount = allCards.filter(c => c.parentId === card.id).length;\n const depCount = card.dependsOn?.length ?? 0;\n\n return (\n <div\n className={cn(\n \"group relative rounded-md border border-border/50 bg-card p-3 text-sm transition-all border-l-[3px] cursor-pointer\",\n STATUS_BORDER[card.status] ?? STATUS_BORDER.pending,\n card.status === \"running\" && \"animate-pulse border-l-[3px]\",\n card.status === \"question\" && \"ring-1 ring-purple-500/30\",\n card.status === \"done\" && \"opacity-80\",\n overlay && \"shadow-lg shadow-[#00d4ff]/10 ring-1 ring-[#00d4ff]/20\"\n )}\n onClick={(e) => { if ((e.target as HTMLElement).closest(\"button\")) return; onSelect(card); }}\n >\n {/* Top: priority + labels + dependency indicators + delete */}\n <div className=\"flex items-start justify-between gap-2 mb-1\">\n <div className=\"flex items-center gap-1.5 flex-wrap min-w-0\">\n <PriorityBadge priority={card.priority} />\n {card.labels?.map((label) => (\n <span\n key={label.id}\n className=\"text-[9px] font-medium rounded px-1.5 py-0.5 text-white\"\n style={{ backgroundColor: label.color }}\n >\n {label.name}\n </span>\n ))}\n {card.status === \"question\" && (\n <span className=\"text-[9px] font-semibold uppercase border border-purple-400/40 text-purple-400 rounded px-1.5 py-0.5\">\n Needs Input\n </span>\n )}\n </div>\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <button className=\"opacity-0 group-hover:opacity-100 transition-opacity text-muted-foreground hover:text-red-400 p-0.5\" onClick={(e) => e.stopPropagation()}>\n <Trash2 className=\"h-3 w-3\" />\n </button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete card?</AlertDialogTitle>\n <AlertDialogDescription>This card will be permanently removed.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction className=\"bg-red-600 hover:bg-red-700\" onClick={() => onDelete(card.id)}>Delete</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n\n {/* Parent indicator */}\n {parentCard && (\n <div className=\"flex items-center gap-1 text-[9px] text-muted-foreground/70 mb-1\">\n <GitBranch className=\"h-2.5 w-2.5\" />\n <span className=\"truncate\">{truncate(parentCard.task, 40)}</span>\n </div>\n )}\n\n {/* Task text */}\n <p className=\"text-xs leading-relaxed text-foreground/90\">{truncate(card.task, 120)}</p>\n\n {/* Activity indicators */}\n <div className=\"flex items-center gap-2 mt-1.5 flex-wrap\">\n {depCount > 0 && (\n <span className=\"text-[9px] text-muted-foreground/70 flex items-center gap-0.5\">\n <Link2 className=\"h-2.5 w-2.5\" /> {depCount}\n </span>\n )}\n {childCount > 0 && (\n <span className=\"text-[9px] text-muted-foreground/70 flex items-center gap-0.5\">\n <GitBranch className=\"h-2.5 w-2.5\" /> {childCount}\n </span>\n )}\n {(card.comments?.length ?? 0) > 0 && (\n <span className=\"text-[9px] text-muted-foreground/70 flex items-center gap-0.5\">\n <MessageSquare className=\"h-2.5 w-2.5\" /> {card.comments!.length}\n </span>\n )}\n {(card.attachments?.length ?? 0) > 0 && (\n <span className=\"text-[9px] text-muted-foreground/70 flex items-center gap-0.5\">\n <Paperclip className=\"h-2.5 w-2.5\" /> {card.attachments!.length}\n </span>\n )}\n </div>\n\n {/* Running state with live token usage */}\n {card.status === \"running\" && (\n <div className=\"mt-2 space-y-1.5\">\n {card.progress && (\n <p className=\"text-[10px] text-[#00d4ff]/70 truncate\">{card.progress}</p>\n )}\n {card.filesLocked && card.filesLocked.length > 0 && (\n <div className=\"text-[9px] text-muted-foreground/60\">\n Editing: {card.filesLocked.slice(0, 2).map(f => f.split('/').pop()).join(', ')}\n {card.filesLocked.length > 2 && ` +${card.filesLocked.length - 2}`}\n </div>\n )}\n <div className=\"flex items-center justify-between text-[10px] text-muted-foreground\">\n <span>\n {card.tokenUsage ? (\n <>{formatTokens(card.tokenUsage.total)} tokens · {formatCost(card.tokenUsage)}</>\n ) : card.tokensUsed != null ? (\n <>{formatTokens(card.tokensUsed)} tokens</>\n ) : null}\n </span>\n {elapsed && <span className=\"text-[#00d4ff]\">{elapsed}</span>}\n </div>\n {card.tokenUsage && (\n <div className=\"flex gap-2 text-[9px] text-muted-foreground/60\">\n <span>{formatTokens(card.tokenUsage.input)} in</span>\n <span>{formatTokens(card.tokenUsage.output)} out</span>\n </div>\n )}\n <Button\n size=\"sm\" variant=\"destructive\" className=\"h-6 w-full text-[10px] gap-1\"\n onClick={(e) => { e.stopPropagation(); onHalt(card.id); }}\n >\n <Square className=\"h-3 w-3\" /> Halt\n </Button>\n </div>\n )}\n\n {/* Pending state */}\n {card.status === \"paused\" && card.pausedForTokens && (\n <div className=\"mt-2 space-y-1.5\">\n <div className=\"rounded border border-yellow-500/40 bg-yellow-500/10 px-2 py-1.5\">\n <p className=\"text-[10px] font-medium text-yellow-400\">Token budget exhausted</p>\n <p className=\"text-[9px] text-yellow-300/70 mt-0.5\">\n {card.tokenUsage ? formatTokens(card.tokenUsage.total) : '?'} / {card.tokenBudget ? formatTokens(card.tokenBudget) : '?'} tokens\n </p>\n </div>\n <Button\n size=\"sm\" variant=\"outline\" className=\"h-6 w-full text-[10px] gap-1 border-yellow-500/40 text-yellow-300 hover:bg-yellow-500/10\"\n onClick={(e) => { e.stopPropagation(); onRun(card.id); }}\n >\n <RotateCcw className=\"h-3 w-3\" /> Resume (override)\n </Button>\n </div>\n )}\n {(card.status === \"pending\" || (card.status === \"paused\" && !card.pausedForTokens)) && (\n <div className=\"mt-2\">\n <Button\n size=\"sm\" variant=\"outline\" className=\"h-6 w-full text-[10px] gap-1 border-[#00d4ff]/30 text-[#00d4ff] hover:bg-[#00d4ff]/10\"\n onClick={(e) => { e.stopPropagation(); onRun(card.id); }}\n >\n <Play className=\"h-3 w-3\" /> Run\n </Button>\n </div>\n )}\n\n {/* Done state with cost */}\n {card.status === \"done\" && (\n <div className=\"mt-2 space-y-1\">\n <div className=\"flex items-center gap-2 text-[10px] text-muted-foreground flex-wrap\">\n {card.tokenUsage ? (\n <>\n <span>{formatTokens(card.tokenUsage.total)} tokens</span>\n <span className=\"text-emerald-400 font-medium\">{formatCost(card.tokenUsage)}</span>\n <span className=\"text-muted-foreground/50\">({formatTokens(card.tokenUsage.input)} in / {formatTokens(card.tokenUsage.output)} out)</span>\n </>\n ) : card.tokensUsed != null ? (\n <span>{formatTokens(card.tokensUsed)} tokens</span>\n ) : null}\n {card.completedAt && <span>{formatDate(card.completedAt)}</span>}\n </div>\n {card.result && (\n <button className=\"text-[10px] text-[#00d4ff] hover:underline\" onClick={(e) => { e.stopPropagation(); setExpanded(!expanded); }}>\n {expanded ? \"Hide result\" : \"Show result\"}\n </button>\n )}\n {expanded && card.result && (\n <div className=\"mt-1 text-[10px] rounded bg-muted/50 p-2\">\n <MarkdownRenderer content={card.result} className=\"prose-xs prose-invert max-w-none\" />\n </div>\n )}\n </div>\n )}\n\n {/* Failed state */}\n {card.status === \"failed\" && (\n <div className=\"mt-2 space-y-1.5\">\n {card.error && <p className=\"text-[10px] text-red-400 line-clamp-2\">{card.error}</p>}\n {card.tokenUsage && (\n <div className=\"text-[10px] text-muted-foreground\">\n {formatTokens(card.tokenUsage.total)} tokens · {formatCost(card.tokenUsage)}\n </div>\n )}\n <Button\n size=\"sm\" variant=\"outline\" className=\"h-6 w-full text-[10px] gap-1 border-orange-400/30 text-orange-400 hover:bg-orange-400/10\"\n onClick={(e) => { e.stopPropagation(); onRun(card.id); }}\n >\n <RotateCcw className=\"h-3 w-3\" /> Retry\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Add Card Dialog (with parent selection)\n// ═══════════════════════════════════════════════════════════════\n\nfunction AddCardDialog({\n boardId, open, onOpenChange, onCreated, allCards,\n}: {\n boardId: string; open: boolean; onOpenChange: (o: boolean) => void; onCreated: () => void; allCards: BoardCard[];\n}) {\n const [task, setTask] = useState(\"\");\n const [priority, setPriority] = useState<string>(\"normal\");\n const [parentId, setParentId] = useState<string>(\"none\");\n const [tokenBudget, setTokenBudget] = useState<string>(\"\");\n const [submitting, setSubmitting] = useState(false);\n\n const handleSubmit = async () => {\n if (!task.trim()) return;\n setSubmitting(true);\n try {\n const cardData: any = { task: task.trim(), priority: priority || undefined };\n if (tokenBudget && parseInt(tokenBudget) > 0) {\n cardData.tokenBudget = parseInt(tokenBudget);\n }\n const result = await api.boards.cards.add(boardId, cardData);\n // Set parent if selected\n if (parentId !== \"none\" && result.card) {\n await api.boards.cards.setParent(boardId, result.card.id, parentId);\n }\n setTask(\"\");\n setPriority(\"normal\");\n setParentId(\"none\");\n setTokenBudget(\"\");\n onOpenChange(false);\n onCreated();\n } catch {} finally { setSubmitting(false); }\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Add Card</DialogTitle>\n <DialogDescription>Create a new task card for this board.</DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-2\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Task</label>\n <Textarea placeholder=\"Describe the task...\" value={task} onChange={(e) => setTask(e.target.value)} rows={4} />\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Priority</label>\n <Select value={priority} onValueChange={setPriority}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"low\">Low</SelectItem>\n <SelectItem value=\"normal\">Normal</SelectItem>\n <SelectItem value=\"high\">High</SelectItem>\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Token Budget</label>\n <Input\n type=\"number\"\n placeholder=\"No limit\"\n value={tokenBudget}\n onChange={(e) => setTokenBudget(e.target.value)}\n min={0}\n step={1000}\n />\n <p className=\"text-[10px] text-muted-foreground\">Max tokens before auto-pause</p>\n </div>\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-sm font-medium text-foreground\">Parent Card</label>\n <Select value={parentId} onValueChange={setParentId}>\n <SelectTrigger><SelectValue placeholder=\"None\" /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">None</SelectItem>\n {allCards.map((c) => (\n <SelectItem key={c.id} value={c.id}>\n {truncate(c.task, 50)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n <DialogFooter>\n <DialogClose asChild><Button variant=\"ghost\">Cancel</Button></DialogClose>\n <Button onClick={handleSubmit} disabled={!task.trim() || submitting} className=\"bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\">\n {submitting && <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />} Add Card\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// Card Detail Sheet (with tabs: Details, Comments, Attachments)\n// ═══════════════════════════════════════════════════════════════\n\nfunction FeedbackResponsePanel({ boardId, cardId, progress, onRefresh }: { boardId: string; cardId: string; progress?: string; onRefresh: () => void }) {\n const [feedback, setFeedback] = useState<Array<{ id: string; question: string; options?: string[] }>>([]);\n const [customText, setCustomText] = useState(\"\");\n const [sending, setSending] = useState(false);\n\n useEffect(() => {\n api.boards.feedback.list(boardId).then(d => {\n const forCard = d.feedback.filter(f => f.cardId === cardId);\n setFeedback(forCard);\n }).catch(() => {});\n }, [boardId, cardId, progress]);\n\n const handleRespond = async (feedbackId: string, response: string) => {\n setSending(true);\n try {\n await api.boards.feedback.respond(boardId, feedbackId, response);\n setFeedback(prev => prev.filter(f => f.id !== feedbackId));\n setCustomText(\"\");\n onRefresh();\n } catch {} finally { setSending(false); }\n };\n\n if (feedback.length === 0) {\n return (\n <div className=\"rounded-lg border border-purple-500/30 bg-purple-500/5 p-3\">\n <p className=\"text-xs text-purple-300 font-medium uppercase tracking-wider mb-1\">Awaiting Input</p>\n <p className=\"text-sm text-purple-200/80\">{progress?.replace('Awaiting feedback: ', '') || 'Agent is waiting for a decision...'}</p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-3\">\n {feedback.map(fb => (\n <div key={fb.id} className=\"rounded-lg border border-purple-500/30 bg-purple-500/5 p-3 space-y-2\">\n <p className=\"text-xs text-purple-300 font-medium uppercase tracking-wider\">Decision Required</p>\n <p className=\"text-sm text-foreground\">{fb.question}</p>\n {fb.options && fb.options.length > 0 && (\n <div className=\"flex flex-wrap gap-2\">\n {fb.options.map(opt => (\n <Button key={opt} size=\"sm\" variant=\"outline\" disabled={sending}\n className=\"text-xs border-purple-400/40 text-purple-300 hover:bg-purple-500/20\"\n onClick={() => handleRespond(fb.id, opt)}\n >\n {opt}\n </Button>\n ))}\n </div>\n )}\n <div className=\"flex gap-2\">\n <Input\n value={customText}\n onChange={(e) => setCustomText(e.target.value)}\n placeholder=\"Type a custom response...\"\n className=\"text-sm h-8\"\n onKeyDown={(e) => { if (e.key === 'Enter' && customText.trim()) handleRespond(fb.id, customText.trim()); }}\n />\n <Button size=\"sm\" disabled={!customText.trim() || sending}\n className=\"h-8 bg-purple-500 hover:bg-purple-600 text-white\"\n onClick={() => handleRespond(fb.id, customText.trim())}\n >\n <Send className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nfunction CardDetailSheet({\n card, boardId, allCards, open, onOpenChange, onRun, onHalt, onDelete, onRefresh,\n}: {\n card: BoardCard | null;\n boardId: string;\n allCards: BoardCard[];\n open: boolean;\n onOpenChange: (o: boolean) => void;\n onRun: (id: string) => void;\n onHalt: (id: string) => void;\n onDelete: (id: string) => void;\n onRefresh: () => void;\n}) {\n const [tab, setTab] = useState<\"details\" | \"activity\" | \"comments\" | \"attachments\">(\"details\");\n const [editingTask, setEditingTask] = useState(false);\n const [taskDraft, setTaskDraft] = useState(\"\");\n const [commentText, setCommentText] = useState(\"\");\n const [submittingComment, setSubmittingComment] = useState(false);\n const [labelName, setLabelName] = useState(\"\");\n const [labelColor, setLabelColor] = useState(\"#3b82f6\");\n const [showLabelInput, setShowLabelInput] = useState(false);\n\n const elapsed = useElapsed(card?.startedAt, card?.status === \"running\");\n\n if (!card) return null;\n\n const parentCard = card.parentId ? allCards.find(c => c.id === card.parentId) : null;\n const children = allCards.filter(c => c.parentId === card.id);\n const deps = (card.dependsOn ?? []).map(id => allCards.find(c => c.id === id)).filter(Boolean) as BoardCard[];\n\n const statusLabel =\n card.status === \"running\" ? \"Running\" :\n card.status === \"pending\" ? \"Pending\" :\n card.status === \"paused\" && card.pausedForTokens ? \"Budget Exhausted\" :\n card.status === \"paused\" ? \"Paused\" :\n card.status === \"done\" ? \"Done\" :\n card.status === \"question\" ? \"Needs Input\" : \"Failed\";\n\n const statusColor =\n card.status === \"running\" ? \"text-[#00d4ff]\" :\n card.status === \"done\" ? \"text-emerald-400\" :\n card.status === \"failed\" ? \"text-red-400\" :\n card.status === \"question\" ? \"text-purple-400\" :\n card.pausedForTokens ? \"text-yellow-400\" :\n \"text-muted-foreground\";\n\n const handleSaveTask = async () => {\n try {\n await api.boards.cards.update(boardId, card.id, { task: taskDraft } as Partial<BoardCard>);\n setEditingTask(false);\n onRefresh();\n } catch {}\n };\n\n const handleAddComment = async () => {\n if (!commentText.trim()) return;\n setSubmittingComment(true);\n try {\n await api.boards.cards.comments.add(boardId, card.id, commentText.trim(), \"user\", \"Admin\");\n setCommentText(\"\");\n onRefresh();\n } catch {} finally { setSubmittingComment(false); }\n };\n\n const handleDeleteComment = async (commentId: string) => {\n try { await api.boards.cards.comments.delete(boardId, card.id, commentId); onRefresh(); } catch {}\n };\n\n const handleAddLabel = async () => {\n if (!labelName.trim()) return;\n try {\n await api.boards.cards.labels.add(boardId, card.id, labelName.trim(), labelColor);\n setLabelName(\"\");\n setShowLabelInput(false);\n onRefresh();\n } catch {}\n };\n\n const handleRemoveLabel = async (labelId: string) => {\n try { await api.boards.cards.labels.remove(boardId, card.id, labelId); onRefresh(); } catch {}\n };\n\n const handleDeleteAttachment = async (attId: string) => {\n try { await api.boards.cards.attachments.delete(boardId, card.id, attId); onRefresh(); } catch {}\n };\n\n const handleUpdatePriority = async (priority: string) => {\n try { await api.boards.cards.update(boardId, card.id, { priority } as Partial<BoardCard>); onRefresh(); } catch {}\n };\n\n const tabClass = (t: string) => cn(\n \"px-3 py-1.5 text-xs font-medium rounded-md transition-colors\",\n tab === t ? \"bg-[#00d4ff]/15 text-[#00d4ff]\" : \"text-muted-foreground hover:text-foreground hover:bg-muted/50\"\n );\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent className=\"w-full sm:max-w-lg overflow-y-auto\">\n <SheetHeader>\n <SheetTitle className=\"text-base\">Card Details</SheetTitle>\n <SheetDescription className=\"sr-only\">Detailed view of the selected task card.</SheetDescription>\n </SheetHeader>\n\n <div className=\"mt-4 space-y-4\">\n {/* Status + Priority (editable) */}\n <div className=\"flex items-center gap-3 flex-wrap\">\n <span className={cn(\"text-sm font-semibold\", statusColor)}>{statusLabel}</span>\n <Select value={card.priority ?? \"normal\"} onValueChange={handleUpdatePriority}>\n <SelectTrigger className=\"h-7 w-24 text-xs\"><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"low\">Low</SelectItem>\n <SelectItem value=\"normal\">Normal</SelectItem>\n <SelectItem value=\"high\">High</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {/* Token budget exhausted banner */}\n {card.pausedForTokens && (\n <div className=\"rounded-md border border-yellow-500/40 bg-yellow-500/10 px-3 py-2 space-y-1\">\n <p className=\"text-xs font-medium text-yellow-400\">Token budget exhausted</p>\n <p className=\"text-[10px] text-yellow-300/70\">\n Used {card.tokenUsage ? formatTokens(card.tokenUsage.total) : '?'} of {card.tokenBudget ? formatTokens(card.tokenBudget) : '?'} token budget.\n Click Run to resume with override.\n </p>\n </div>\n )}\n\n {/* Token budget display */}\n {card.tokenBudget && !card.pausedForTokens && (\n <p className=\"text-[10px] text-muted-foreground\">\n Budget: {formatTokens(card.tokenBudget)} tokens\n {card.tokenUsage ? ` (${formatTokens(card.tokenUsage.total)} used)` : ''}\n </p>\n )}\n\n {/* Labels */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 flex-wrap\">\n {card.labels?.map((label) => (\n <span key={label.id} className=\"inline-flex items-center gap-1 text-[10px] font-medium rounded px-2 py-0.5 text-white\" style={{ backgroundColor: label.color }}>\n {label.name}\n <button onClick={() => handleRemoveLabel(label.id)} className=\"hover:opacity-70\"><X className=\"h-2.5 w-2.5\" /></button>\n </span>\n ))}\n <button onClick={() => setShowLabelInput(!showLabelInput)} className=\"text-[10px] text-muted-foreground hover:text-foreground flex items-center gap-0.5\">\n <Tag className=\"h-3 w-3\" /> Add Label\n </button>\n </div>\n {showLabelInput && (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex flex-wrap gap-1\">\n {LABEL_PRESETS.map((p) => (\n <button\n key={p.name}\n onClick={() => { setLabelName(p.name); setLabelColor(p.color); }}\n className={cn(\"text-[9px] font-medium rounded px-1.5 py-0.5 text-white transition-all\", labelName === p.name && \"ring-2 ring-white/50\")}\n style={{ backgroundColor: p.color }}\n >\n {p.name}\n </button>\n ))}\n </div>\n <Input value={labelName} onChange={(e) => setLabelName(e.target.value)} placeholder=\"Custom...\" className=\"h-6 text-xs w-20\" />\n <input type=\"color\" value={labelColor} onChange={(e) => setLabelColor(e.target.value)} className=\"h-6 w-6 rounded cursor-pointer\" />\n <Button size=\"sm\" onClick={handleAddLabel} disabled={!labelName.trim()} className=\"h-6 text-[10px] px-2 bg-[#00d4ff] text-black\">Add</Button>\n </div>\n )}\n </div>\n\n {/* Tabs */}\n <div className=\"flex gap-1 border-b border-border/50 pb-2\">\n <button className={tabClass(\"details\")} onClick={() => setTab(\"details\")}>Details</button>\n <button className={tabClass(\"activity\")} onClick={() => setTab(\"activity\")}>\n Activity {(card.activityLog?.length ?? 0) > 0 && <Badge variant=\"secondary\" className=\"ml-1 text-[9px] px-1 h-4\">{card.activityLog!.length}</Badge>}\n </button>\n <button className={tabClass(\"comments\")} onClick={() => setTab(\"comments\")}>\n Comments {(card.comments?.length ?? 0) > 0 && <Badge variant=\"secondary\" className=\"ml-1 text-[9px] px-1 h-4\">{card.comments!.length}</Badge>}\n </button>\n <button className={tabClass(\"attachments\")} onClick={() => setTab(\"attachments\")}>\n Attachments {(card.attachments?.length ?? 0) > 0 && <Badge variant=\"secondary\" className=\"ml-1 text-[9px] px-1 h-4\">{card.attachments!.length}</Badge>}\n </button>\n </div>\n\n {/* ── Details Tab ── */}\n {tab === \"details\" && (\n <div className=\"space-y-4\">\n {/* Task (editable) */}\n <div className=\"space-y-1\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Task</label>\n {!editingTask && (\n <button onClick={() => { setTaskDraft(card.task); setEditingTask(true); }} className=\"text-[10px] text-muted-foreground hover:text-foreground flex items-center gap-0.5\">\n <Pencil className=\"h-2.5 w-2.5\" /> Edit\n </button>\n )}\n </div>\n {editingTask ? (\n <div className=\"space-y-2\">\n <Textarea value={taskDraft} onChange={(e) => setTaskDraft(e.target.value)} rows={3} className=\"text-sm\" />\n <div className=\"flex gap-2\">\n <Button size=\"sm\" onClick={handleSaveTask} className=\"h-6 text-xs bg-[#00d4ff] text-black\">Save</Button>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => setEditingTask(false)} className=\"h-6 text-xs\">Cancel</Button>\n </div>\n </div>\n ) : (\n <p className=\"text-sm leading-relaxed text-foreground whitespace-pre-wrap\">{card.task}</p>\n )}\n </div>\n\n {/* Progress */}\n {card.progress && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Progress</label>\n <p className=\"text-sm text-[#00d4ff]/80 mt-0.5\">{card.progress}</p>\n </div>\n )}\n\n {/* Feedback Response UI */}\n {card.status === \"question\" && (\n <FeedbackResponsePanel boardId={boardId} cardId={card.id} progress={card.progress} onRefresh={onRefresh} />\n )}\n\n {/* Files being edited */}\n {card.filesLocked && card.filesLocked.length > 0 && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Files Locked</label>\n <div className=\"mt-1 space-y-0.5\">\n {card.filesLocked.map((f, i) => (\n <p key={i} className=\"text-[11px] font-mono text-foreground/70 truncate\">{f}</p>\n ))}\n </div>\n </div>\n )}\n\n {/* Token Usage (detailed breakdown) */}\n {card.tokenUsage && (\n <div className=\"rounded-md border border-border/50 bg-muted/30 p-3 space-y-2\">\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Token Usage & Cost</label>\n <div className=\"grid grid-cols-3 gap-3 text-center\">\n <div>\n <p className=\"text-lg font-semibold text-foreground\">{formatTokens(card.tokenUsage.total)}</p>\n <p className=\"text-[10px] text-muted-foreground\">Total</p>\n </div>\n <div>\n <p className=\"text-lg font-semibold text-[#00d4ff]\">{formatTokens(card.tokenUsage.input)}</p>\n <p className=\"text-[10px] text-muted-foreground\">Input</p>\n </div>\n <div>\n <p className=\"text-lg font-semibold text-[#a78bfa]\">{formatTokens(card.tokenUsage.output)}</p>\n <p className=\"text-[10px] text-muted-foreground\">Output</p>\n </div>\n </div>\n <div className=\"text-center pt-1 border-t border-border/30\">\n <p className=\"text-sm font-semibold text-emerald-400\">{formatCost(card.tokenUsage)}</p>\n <p className=\"text-[10px] text-muted-foreground\">Estimated Cost</p>\n </div>\n </div>\n )}\n\n {/* Timestamps */}\n <div className=\"grid grid-cols-2 gap-3 text-xs\">\n <div>\n <span className=\"text-muted-foreground\">Created</span>\n <p className=\"text-foreground\">{formatDate(card.createdAt)}</p>\n </div>\n {card.startedAt && <div><span className=\"text-muted-foreground\">Started</span><p className=\"text-foreground\">{formatDate(card.startedAt)}</p></div>}\n {card.completedAt && <div><span className=\"text-muted-foreground\">Completed</span><p className=\"text-foreground\">{formatDate(card.completedAt)}</p></div>}\n {card.status === \"running\" && elapsed && <div><span className=\"text-muted-foreground\">Elapsed</span><p className=\"text-[#00d4ff]\">{elapsed}</p></div>}\n </div>\n\n {/* Dependencies */}\n {(parentCard || children.length > 0 || deps.length > 0) && (\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Dependencies</label>\n {parentCard && (\n <div className=\"flex items-center gap-2 text-xs\">\n <GitBranch className=\"h-3 w-3 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Parent:</span>\n <span className=\"text-foreground truncate\">{truncate(parentCard.task, 60)}</span>\n </div>\n )}\n {deps.length > 0 && (\n <div className=\"space-y-1\">\n <span className=\"text-[10px] text-muted-foreground\">Depends on:</span>\n {deps.map(d => (\n <div key={d.id} className=\"flex items-center gap-2 text-xs pl-2\">\n <Link2 className=\"h-2.5 w-2.5 text-muted-foreground/60\" />\n <span className={cn(\"truncate\", d.status === \"done\" ? \"text-emerald-400 line-through\" : \"text-foreground/70\")}>{truncate(d.task, 50)}</span>\n <Badge variant=\"secondary\" className=\"text-[8px] px-1 h-3.5\">{d.status}</Badge>\n </div>\n ))}\n </div>\n )}\n {children.length > 0 && (\n <div className=\"space-y-1\">\n <span className=\"text-[10px] text-muted-foreground\">Children ({children.length}):</span>\n {children.map(ch => (\n <div key={ch.id} className=\"flex items-center gap-2 text-xs pl-2\">\n <ChevronRight className=\"h-2.5 w-2.5 text-muted-foreground/60\" />\n <span className=\"truncate text-foreground/70\">{truncate(ch.task, 50)}</span>\n <Badge variant=\"secondary\" className=\"text-[8px] px-1 h-3.5\">{ch.status}</Badge>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Result */}\n {card.result && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Result</label>\n <div className=\"mt-1 max-h-60 overflow-y-auto rounded-md bg-muted/50 p-3\">\n <MarkdownRenderer content={card.result} className=\"prose-sm prose-invert max-w-none\" />\n </div>\n </div>\n )}\n\n {/* Error */}\n {card.error && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">Error</label>\n <div className=\"mt-1 rounded-md border border-red-500/20 bg-red-500/5 p-3 text-xs text-red-400 whitespace-pre-wrap\">{card.error}</div>\n </div>\n )}\n </div>\n )}\n\n {/* ── Activity Tab ── */}\n {tab === \"activity\" && (\n <div className=\"space-y-1\">\n {(!card.activityLog || card.activityLog.length === 0) ? (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">No activity recorded yet. Run this card to see live steps.</p>\n ) : (\n <div className=\"relative pl-4 border-l-2 border-border/40 space-y-2 max-h-[400px] overflow-y-auto\">\n {[...card.activityLog].reverse().map((entry, i) => {\n const icon =\n entry.type === 'started' ? '🚀' :\n entry.type === 'tool-use' ? '🔧' :\n entry.type === 'thinking' ? '💭' :\n entry.type === 'file-lock' ? '📁' :\n entry.type === 'completed' ? '✅' :\n entry.type === 'failed' ? '❌' :\n entry.type === 'feedback' ? '❓' : '▸';\n const color =\n entry.type === 'completed' ? 'text-emerald-400' :\n entry.type === 'failed' ? 'text-red-400' :\n entry.type === 'tool-use' ? 'text-[#00d4ff]' :\n entry.type === 'thinking' ? 'text-yellow-300' :\n entry.type === 'feedback' ? 'text-purple-400' :\n 'text-muted-foreground';\n return (\n <div key={i} className=\"relative\">\n <div className=\"absolute -left-[21px] top-1 w-2.5 h-2.5 rounded-full bg-border border-2 border-background\" />\n <div className=\"flex items-start gap-2\">\n <span className=\"text-xs shrink-0\">{icon}</span>\n <div className=\"flex-1 min-w-0\">\n <p className={cn(\"text-xs leading-relaxed\", color)}>{entry.message}</p>\n {entry.data?.files && (\n <div className=\"mt-0.5\">\n {(entry.data.files as string[]).slice(0, 3).map((f, fi) => (\n <p key={fi} className=\"text-[10px] font-mono text-muted-foreground/60 truncate\">{f.split('/').pop()}</p>\n ))}\n </div>\n )}\n </div>\n <span className=\"text-[9px] text-muted-foreground/50 shrink-0 tabular-nums\">{timeAgo(entry.timestamp)}</span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n {card.status === \"running\" && (\n <div className=\"flex items-center gap-2 pt-2 border-t border-border/30\">\n <div className=\"w-2 h-2 rounded-full bg-[#00d4ff] animate-pulse\" />\n <span className=\"text-xs text-[#00d4ff]/80\">Agent is working...</span>\n {card.progress && <span className=\"text-[10px] text-muted-foreground ml-auto truncate max-w-[150px]\">{card.progress}</span>}\n </div>\n )}\n </div>\n )}\n\n {/* ── Comments Tab ── */}\n {tab === \"comments\" && (\n <div className=\"space-y-3\">\n {(card.comments?.length ?? 0) === 0 && (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">No comments yet. Start a conversation.</p>\n )}\n {card.comments?.map((comment) => (\n <div key={comment.id} className={cn(\n \"rounded-md p-3 text-sm space-y-1\",\n comment.author === \"agent\" ? \"bg-[#00d4ff]/5 border border-[#00d4ff]/20\" : \"bg-muted/50 border border-border/30\"\n )}>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className={cn(\"text-xs font-medium\", comment.author === \"agent\" ? \"text-[#00d4ff]\" : \"text-foreground\")}>\n {comment.authorName}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">{timeAgo(comment.timestamp)}</span>\n </div>\n <button onClick={() => handleDeleteComment(comment.id)} className=\"text-muted-foreground/50 hover:text-red-400\">\n <X className=\"h-3 w-3\" />\n </button>\n </div>\n <p className=\"text-xs text-foreground/80 whitespace-pre-wrap\">{comment.content}</p>\n </div>\n ))}\n\n {/* Add comment */}\n <div className=\"flex gap-2 pt-2 border-t border-border/30\">\n <Textarea\n value={commentText}\n onChange={(e) => setCommentText(e.target.value)}\n placeholder=\"Write a comment...\"\n rows={2}\n className=\"text-xs flex-1\"\n onKeyDown={(e) => { if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) handleAddComment(); }}\n />\n <Button\n size=\"sm\" onClick={handleAddComment} disabled={!commentText.trim() || submittingComment}\n className=\"h-8 w-8 p-0 bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80 self-end\"\n >\n {submittingComment ? <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> : <Send className=\"h-3.5 w-3.5\" />}\n </Button>\n </div>\n </div>\n )}\n\n {/* ── Attachments Tab ── */}\n {tab === \"attachments\" && (\n <AttachmentsTab card={card} boardId={boardId} onDelete={handleDeleteAttachment} />\n )}\n\n {/* Actions */}\n <div className=\"flex flex-wrap gap-2 pt-2 border-t border-border/50\">\n {(card.status === \"pending\" || card.status === \"paused\" || card.status === \"failed\") && (\n <Button size=\"sm\" className=\"gap-1.5 bg-[#00d4ff] text-black hover:bg-[#00d4ff]/80\" onClick={() => { onRun(card.id); onOpenChange(false); }}>\n <Play className=\"h-3.5 w-3.5\" /> {card.status === \"failed\" ? \"Retry\" : \"Run\"}\n </Button>\n )}\n {card.status === \"running\" && (\n <Button size=\"sm\" variant=\"destructive\" className=\"gap-1.5\" onClick={() => { onHalt(card.id); onOpenChange(false); }}>\n <Square className=\"h-3.5 w-3.5\" /> Halt\n </Button>\n )}\n <AlertDialog>\n <AlertDialogTrigger asChild>\n <Button size=\"sm\" variant=\"ghost\" className=\"gap-1.5 text-red-400 hover:text-red-300\"><Trash2 className=\"h-3.5 w-3.5\" /> Delete</Button>\n </AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>Delete card?</AlertDialogTitle>\n <AlertDialogDescription>This card will be permanently removed.</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>Cancel</AlertDialogCancel>\n <AlertDialogAction className=\"bg-red-600 hover:bg-red-700\" onClick={() => { onDelete(card.id); onOpenChange(false); }}>Delete</AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n </div>\n </div>\n </SheetContent>\n </Sheet>\n );\n}\n\n// ═══════════════════════════════════════════════════════════════\n// AttachmentsTab — with markdown preview + download\n// ═══════════════════════════════════════════════════════════════\n\nfunction AttachmentsTab({ card, boardId, onDelete }: { card: BoardCard; boardId: string; onDelete: (id: string) => void }) {\n const [previewId, setPreviewId] = useState<string | null>(null);\n const [previewContent, setPreviewContent] = useState<string>(\"\");\n const [previewLoading, setPreviewLoading] = useState(false);\n\n const handlePreview = async (att: CardAttachment) => {\n if (previewId === att.id) { setPreviewId(null); return; }\n setPreviewId(att.id);\n setPreviewLoading(true);\n try {\n const data = await api.boards.cards.attachments.content(boardId, card.id, att.id);\n setPreviewContent(data.content);\n } catch { setPreviewContent(\"Failed to load file content.\"); }\n finally { setPreviewLoading(false); }\n };\n\n const handleDownload = (att: CardAttachment) => {\n const url = api.boards.cards.attachments.downloadUrl(boardId, card.id, att.id);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = att.name;\n a.click();\n };\n\n return (\n <div className=\"space-y-3\">\n {(card.attachments?.length ?? 0) === 0 && (\n <p className=\"text-sm text-muted-foreground py-4 text-center\">No attachments. Documents generated by the agent will appear here.</p>\n )}\n {card.attachments?.map((att) => {\n const Icon = ATTACHMENT_ICONS[att.type] ?? Paperclip;\n const isPreviewable = att.type === \"markdown\" || att.type === \"document\";\n const isImage = att.type === \"image\";\n const isOpen = previewId === att.id;\n\n return (\n <div key={att.id} className=\"rounded-md border border-border/50 bg-muted/30 overflow-hidden\">\n <div className=\"flex items-center gap-3 p-3\">\n <div className={cn(\n \"h-9 w-9 rounded-md flex items-center justify-center shrink-0\",\n att.type === \"markdown\" ? \"bg-emerald-500/15 text-emerald-400\" :\n att.type === \"image\" ? \"bg-purple-500/15 text-purple-400\" :\n \"bg-muted text-muted-foreground\"\n )}>\n <Icon className=\"h-4 w-4\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-foreground truncate\">{att.name}</p>\n <div className=\"flex items-center gap-2 text-[10px] text-muted-foreground\">\n <span className=\"capitalize\">{att.type}</span>\n {att.size != null && <span>{(att.size / 1024).toFixed(1)} KB</span>}\n <span>{timeAgo(att.addedAt)}</span>\n <span>by {att.addedBy}</span>\n </div>\n </div>\n <div className=\"flex items-center gap-1 shrink-0\">\n {(isPreviewable || isImage) && (\n <button\n onClick={() => handlePreview(att)}\n className={cn(\"p-1.5 rounded-md transition-colors\", isOpen ? \"bg-[#00d4ff]/15 text-[#00d4ff]\" : \"text-muted-foreground/50 hover:text-foreground\")}\n title=\"Preview\"\n >\n <Eye className=\"h-3.5 w-3.5\" />\n </button>\n )}\n <button onClick={() => handleDownload(att)} className=\"p-1.5 text-muted-foreground/50 hover:text-foreground\" title=\"Download\">\n <Download className=\"h-3.5 w-3.5\" />\n </button>\n <button onClick={() => onDelete(att.id)} className=\"p-1.5 text-muted-foreground/50 hover:text-red-400\" title=\"Delete\">\n <Trash2 className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n </div>\n\n {/* Preview panel */}\n {isOpen && (\n <div className=\"border-t border-border/30 bg-background/50\">\n {previewLoading ? (\n <div className=\"flex justify-center py-6\"><Loader2 className=\"h-5 w-5 animate-spin text-[#00d4ff]\" /></div>\n ) : isImage ? (\n <div className=\"p-3\">\n <img\n src={api.boards.cards.attachments.downloadUrl(boardId, card.id, att.id)}\n alt={att.name}\n className=\"max-w-full max-h-96 rounded-md mx-auto\"\n />\n </div>\n ) : (\n <div className=\"p-3 max-h-96 overflow-y-auto\">\n <div className=\"prose prose-sm dark:prose-invert max-w-none text-xs\">\n <MarkdownRenderer content={previewContent} />\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\n// Simple markdown renderer (handles headers, bold, code blocks, lists)\nfunction MarkdownRenderer({ content }: { content: string }) {\n const lines = content.split('\\n');\n const elements: JSX.Element[] = [];\n let inCodeBlock = false;\n let codeLines: string[] = [];\n let codeLang = '';\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n\n if (line.startsWith('```')) {\n if (inCodeBlock) {\n elements.push(\n <pre key={i} className=\"rounded-md bg-muted p-3 text-[11px] font-mono overflow-x-auto my-2\">\n <code>{codeLines.join('\\n')}</code>\n </pre>\n );\n codeLines = [];\n inCodeBlock = false;\n } else {\n inCodeBlock = true;\n codeLang = line.slice(3).trim();\n }\n continue;\n }\n\n if (inCodeBlock) {\n codeLines.push(line);\n continue;\n }\n\n if (line.startsWith('# ')) {\n elements.push(<h1 key={i} className=\"text-lg font-bold mt-3 mb-1\">{renderInline(line.slice(2))}</h1>);\n } else if (line.startsWith('## ')) {\n elements.push(<h2 key={i} className=\"text-base font-semibold mt-2 mb-1\">{renderInline(line.slice(3))}</h2>);\n } else if (line.startsWith('### ')) {\n elements.push(<h3 key={i} className=\"text-sm font-semibold mt-2 mb-0.5\">{renderInline(line.slice(4))}</h3>);\n } else if (line.startsWith('- ') || line.startsWith('* ')) {\n elements.push(<li key={i} className=\"ml-4 list-disc text-foreground/80\">{renderInline(line.slice(2))}</li>);\n } else if (/^\\d+\\.\\s/.test(line)) {\n elements.push(<li key={i} className=\"ml-4 list-decimal text-foreground/80\">{renderInline(line.replace(/^\\d+\\.\\s/, ''))}</li>);\n } else if (line.startsWith('> ')) {\n elements.push(<blockquote key={i} className=\"border-l-2 border-[#00d4ff]/40 pl-3 text-muted-foreground italic my-1\">{renderInline(line.slice(2))}</blockquote>);\n } else if (line.trim() === '') {\n elements.push(<div key={i} className=\"h-2\" />);\n } else {\n elements.push(<p key={i} className=\"text-foreground/80 my-0.5\">{renderInline(line)}</p>);\n }\n }\n\n // Handle unclosed code block\n if (inCodeBlock && codeLines.length > 0) {\n elements.push(\n <pre key=\"unclosed\" className=\"rounded-md bg-muted p-3 text-[11px] font-mono overflow-x-auto my-2\">\n <code>{codeLines.join('\\n')}</code>\n </pre>\n );\n }\n\n return <>{elements}</>;\n}\n\nfunction renderInline(text: string): React.ReactNode {\n // Handle bold, italic, inline code\n const parts: React.ReactNode[] = [];\n let remaining = text;\n let key = 0;\n\n while (remaining.length > 0) {\n // Inline code\n const codeMatch = remaining.match(/^(.*?)`([^`]+)`/);\n if (codeMatch) {\n if (codeMatch[1]) parts.push(<span key={key++}>{codeMatch[1]}</span>);\n parts.push(<code key={key++} className=\"bg-muted px-1 py-0.5 rounded text-[10px] font-mono text-[#00d4ff]\">{codeMatch[2]}</code>);\n remaining = remaining.slice(codeMatch[0].length);\n continue;\n }\n\n // Bold\n const boldMatch = remaining.match(/^(.*?)\\*\\*([^*]+)\\*\\*/);\n if (boldMatch) {\n if (boldMatch[1]) parts.push(<span key={key++}>{boldMatch[1]}</span>);\n parts.push(<strong key={key++}>{boldMatch[2]}</strong>);\n remaining = remaining.slice(boldMatch[0].length);\n continue;\n }\n\n // No more special formatting\n parts.push(<span key={key++}>{remaining}</span>);\n break;\n }\n\n return <>{parts}</>;\n}\n"],"names":["__iconNode","CircleDot","createLucideIcon","Columns3","Image","Link2","Paperclip","RotateCcw","Square","Tag","Sheet","SheetPrimitive.Root","SheetPortal","SheetPrimitive.Portal","SheetOverlay","React.forwardRef","className","props","ref","jsx","SheetPrimitive.Overlay","cn","sheetVariants","cva","SheetContent","side","children","jsxs","SheetPrimitive.Content","SheetPrimitive.Close","X","SheetHeader","SheetTitle","SheetPrimitive.Title","SheetDescription","SheetPrimitive.Description","COLUMNS","PRIORITY_CONFIG","STATUS_BORDER","LABEL_PRESETS","ATTACHMENT_ICONS","FileText","fadeUp","i","useElapsed","startedAt","active","elapsed","setElapsed","useState","useEffect","update","start","diff","m","s","id","Skeleton","PriorityBadge","priority","cfg","formatCost","tokenUsage","cost","timeAgo","ts","KanbanPage","boardId","useParams","navigate","useNavigate","BoardDetailView","BoardListView","onSelect","boards","setBoards","loading","setLoading","error","setError","createOpen","setCreateOpen","createName","setCreateName","createDesc","setCreateDesc","creating","setCreating","load","useCallback","api","d","e","handleCreate","board","handleDelete","handleToggleActive","Button","Plus","Card","CardContent","AnimatePresence","motion","CardHeader","CardTitle","truncate","Badge","Fragment","Power","PowerOff","AlertDialog","AlertDialogTrigger","Trash2","AlertDialogContent","AlertDialogHeader","AlertDialogTitle","AlertDialogDescription","AlertDialogFooter","AlertDialogCancel","AlertDialogAction","_a","formatDate","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","Textarea","DialogFooter","DialogClose","Loader2","onBack","setBoard","resources","setResources","addOpen","setAddOpen","generating","setGenerating","selectedCard","setSelectedCard","activeId","setActiveId","editingDesc","setEditingDesc","descDraft","setDescDraft","showFullDesc","setShowFullDesc","planOpen","setPlanOpen","plan","setPlan","planLoading","setPlanLoading","pollRef","useRef","sseRef","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","data","updated","c","baseUrl","es","prev","cards","useMemo","columnCards","map","displayColumns","col","activeCard","totalCost","inp","out","handleDragStart","event","handleDragEnd","over","overId","targetStatus","overCard","card","handleGenerate","handleSmartExecute","handleRunAll","handleClearDone","handleHaltAll","handleRunCard","cardId","opts","handleHaltCard","handleDeleteCard","handleSaveDesc","handleViewPlan","ArrowLeft","desc","isLong","preview","MarkdownRenderer","Pencil","formatTokens","Sparkles","Zap","GitBranch","Play","CheckCircle2","qCard","DndContext","closestCenter","KanbanColumn","MobileColumn","DragOverlay","KanbanCardContent","AddCardDialog","CardDetailSheet","open","batch","status","label","allCards","onRun","onHalt","onDelete","statusColor","SortableContext","verticalListSortingStrategy","ScrollArea","SortableCard","setOpen","Collapsible","CollapsibleTrigger","ChevronDown","ChevronRight","CollapsibleContent","index","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","style","CSS","overlay","expanded","setExpanded","parentCard","childCount","depCount","_b","_c","MessageSquare","_d","f","onOpenChange","onCreated","task","setTask","setPriority","parentId","setParentId","tokenBudget","setTokenBudget","submitting","setSubmitting","handleSubmit","cardData","result","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","FeedbackResponsePanel","progress","onRefresh","feedback","setFeedback","customText","setCustomText","sending","setSending","forCard","handleRespond","feedbackId","response","fb","opt","Send","tab","setTab","editingTask","setEditingTask","taskDraft","setTaskDraft","commentText","setCommentText","submittingComment","setSubmittingComment","labelName","setLabelName","labelColor","setLabelColor","showLabelInput","setShowLabelInput","deps","statusLabel","handleSaveTask","handleAddComment","handleDeleteComment","commentId","handleAddLabel","handleRemoveLabel","labelId","handleDeleteAttachment","attId","handleUpdatePriority","tabClass","t","p","ch","entry","icon","color","fi","_e","_f","comment","AttachmentsTab","previewId","setPreviewId","previewContent","setPreviewContent","previewLoading","setPreviewLoading","handlePreview","att","handleDownload","url","a","Icon","isPreviewable","isImage","isOpen","Eye","Download","content","lines","elements","inCodeBlock","codeLines","line","renderInline","text","parts","remaining","key","codeMatch","boldMatch"],"mappings":"osDAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,KAAM,IAAK,SAAU,EACzD,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAQ,CAAE,CAC1D,EACMC,GAAYC,EAAiB,aAAcF,EAAU,ECb3D;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,IAAK,QAAQ,CAAE,EAC9E,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACMG,GAAWD,EAAiB,YAAaF,EAAU,ECdzD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,SAAU,EACvF,CAAC,SAAU,CAAE,GAAI,IAAK,GAAI,IAAK,EAAG,IAAK,IAAK,SAAU,EACtD,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAQ,CAAE,CAC5E,EACMI,GAAQF,EAAiB,QAASF,EAAU,ECdlD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,4BAA6B,IAAK,QAAQ,CAAE,EAC1D,CAAC,OAAQ,CAAE,GAAI,IAAK,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAQ,CAAE,CACnE,EACMK,GAAQH,EAAiB,SAAUF,EAAU,ECdnD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,yBAA0B,IAAK,QAAQ,CAAE,EACvD,CACE,OACA,CACE,EAAG,2IACH,IAAK,QACX,CACA,CACA,EACMM,GAAYJ,EAAiB,YAAaF,EAAU,ECnB1D;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,oDAAqD,IAAK,QAAQ,CAAE,EAClF,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACMO,GAAYL,EAAiB,aAAcF,EAAU,ECb3D;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,IAAK,QAAQ,CAAE,CAChF,EACMQ,GAASN,EAAiB,SAAUF,EAAU,ECZpD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CACE,OACA,CACE,EAAG,uJACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,MAAO,GAAI,MAAO,EAAG,KAAM,KAAM,eAAgB,IAAK,QAAQ,CAAE,CACnF,EACMS,GAAMP,EAAiB,MAAOF,EAAU,ECbxCU,GAAQC,GAGRC,GAAcC,GAEdC,GAAeC,EAAAA,WAGnB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,IAACC,GAAA,CACC,UAAWC,EACT,yJACAL,CAAA,EAED,GAAGC,EACJ,IAAAC,CAAA,CACF,CACD,EACDJ,GAAa,YAAcM,GAAuB,YAElD,MAAME,GAAgBC,GACpB,mMACA,CACE,SAAU,CACR,KAAM,CACJ,IAAK,kHACL,OACE,2HACF,KAAM,8IACN,MACE,gJAAA,CACJ,EAEF,gBAAiB,CACf,KAAM,OAAA,CACR,CAEJ,EAMMC,GAAeT,EAAAA,WAGnB,CAAC,CAAE,KAAAU,EAAO,QAAS,UAAAT,EAAW,SAAAU,EAAU,GAAGT,CAAA,EAASC,WACnDN,GAAA,CACC,SAAA,CAAAO,EAAAA,IAACL,GAAA,EAAa,EACda,EAAAA,KAACC,GAAA,CACC,IAAAV,EACA,UAAWG,EAAGC,GAAc,CAAE,KAAAG,CAAA,CAAM,EAAGT,CAAS,EAC/C,GAAGC,EAEJ,SAAA,CAAAU,EAAAA,KAACE,GAAA,CAAqB,UAAU,2OAC9B,SAAA,CAAAV,EAAAA,IAACW,GAAA,CAAE,UAAU,SAAA,CAAU,EACvBX,EAAAA,IAAC,OAAA,CAAK,UAAU,UAAU,SAAA,OAAA,CAAK,CAAA,EACjC,EACCO,CAAA,CAAA,CAAA,CACH,CAAA,CACF,CACD,EACDF,GAAa,YAAcI,GAAuB,YAElD,MAAMG,GAAc,CAAC,CACnB,UAAAf,EACA,GAAGC,CACL,IACEE,EAAAA,IAAC,MAAA,CACC,UAAWE,EACT,mDACAL,CAAA,EAED,GAAGC,CAAA,CACN,EAEFc,GAAY,YAAc,cAgB1B,MAAMC,GAAajB,EAAAA,WAGjB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,IAACc,GAAA,CACC,IAAAf,EACA,UAAWG,EAAG,wCAAyCL,CAAS,EAC/D,GAAGC,CAAA,CACN,CACD,EACDe,GAAW,YAAcC,GAAqB,YAE9C,MAAMC,GAAmBnB,EAAAA,WAGvB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,IAACgB,GAAA,CACC,IAAAjB,EACA,UAAWG,EAAG,gCAAiCL,CAAS,EACvD,GAAGC,CAAA,CACN,CACD,EACDiB,GAAiB,YAAcC,GAA2B,YCA1D,MAAMC,GAAgD,CACpD,CAAE,IAAK,UAAW,MAAO,OAAA,EACzB,CAAE,IAAK,UAAW,MAAO,aAAA,EACzB,CAAE,IAAK,OAAQ,MAAO,MAAA,EACtB,CAAE,IAAK,SAAU,MAAO,SAAA,CAC1B,EAEMC,GAAoE,CACxE,IAAK,CAAE,MAAO,MAAO,MAAO,kDAAA,EAC5B,OAAQ,CAAE,MAAO,MAAO,MAAO,sCAAA,EAC/B,OAAQ,CAAE,MAAO,MAAO,MAAO,sCAAA,EAC/B,KAAM,CAAE,MAAO,OAAQ,MAAO,sCAAA,EAC9B,SAAU,CAAE,MAAO,OAAQ,MAAO,gCAAA,CACpC,EAEMC,GAAwC,CAC5C,QAAS,6CACT,QAAS,qBACT,OAAQ,sBACR,KAAM,uBACN,OAAQ,mBACR,SAAU,qBACZ,EAEMC,GAAgB,CACpB,CAAE,KAAM,MAAO,MAAO,SAAA,EACtB,CAAE,KAAM,UAAW,MAAO,SAAA,EAC1B,CAAE,KAAM,WAAY,MAAO,SAAA,EAC3B,CAAE,KAAM,OAAQ,MAAO,SAAA,EACvB,CAAE,KAAM,OAAQ,MAAO,SAAA,EACvB,CAAE,KAAM,SAAU,MAAO,SAAA,EACzB,CAAE,KAAM,UAAW,MAAO,SAAA,EAC1B,CAAE,KAAM,WAAY,MAAO,SAAA,EAC3B,CAAE,KAAM,SAAU,MAAO,SAAA,CAC3B,EAEMC,GAAoD,CACxD,SAAUC,GACV,SAAUA,GACV,MAAOrC,GACP,aAAcqC,GACd,MAAOnC,EACT,EAEMoC,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,EAE3E,EAIA,SAASC,GAAWC,EAA6BC,EAAkB,CACjE,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAE,EACzCC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACL,GAAa,CAACC,EAAQ,CAAEE,EAAW,EAAE,EAAG,MAAQ,CACrD,MAAMG,EAAS,IAAM,CACnB,MAAMC,EAAQ,OAAOP,GAAc,SAAWA,EAAY,IAAI,KAAKA,CAAS,EAAE,QAAA,EACxEQ,EAAO,KAAK,IAAI,EAAG,KAAK,OAAO,KAAK,IAAA,EAAQD,GAAS,GAAI,CAAC,EAC1DE,EAAI,KAAK,MAAMD,EAAO,EAAE,EACxBE,EAAIF,EAAO,GACjBL,EAAWM,EAAI,EAAI,GAAGA,CAAC,KAAKC,CAAC,IAAM,GAAGA,CAAC,GAAG,CAC5C,EACAJ,EAAA,EACA,MAAMK,EAAK,YAAYL,EAAQ,GAAI,EACnC,MAAO,IAAM,cAAcK,CAAE,CAC/B,EAAG,CAACX,EAAWC,CAAM,CAAC,EACfC,CACT,CAEA,SAASU,GAAS,CAAE,UAAAzC,GAAqC,CACvD,aAAQ,MAAA,CAAI,UAAWK,EAAG,oCAAqCL,CAAS,EAAG,CAC7E,CAEA,SAAS0C,GAAc,CAAE,SAAAC,GAAmC,CAC1D,GAAI,CAACA,EAAU,OAAO,KACtB,MAAMC,EAAMvB,GAAgBsB,CAAQ,GAAK,CAAE,MAAOA,EAAU,MAAO,kDAAA,EACnE,OACExC,MAAC,QAAK,UAAWE,EAAG,mEAAoEuC,EAAI,KAAK,EAC9F,SAAAA,EAAI,KAAA,CACP,CAEJ,CAEA,SAASC,GAAWC,EAAyF,CAC3G,GAAI,CAACA,EAAY,MAAO,GAExB,MAAMC,GAAQD,EAAW,MAAQ,EAAIA,EAAW,OAAS,IAAM,IAC/D,OAAOC,EAAO,IAAO,SAAW,IAAIA,EAAK,QAAQ,CAAC,CAAC,EACrD,CAEA,SAASC,GAAQC,EAAoB,CACnC,MAAMZ,EAAO,KAAK,OAAO,KAAK,IAAA,EAAQY,GAAM,GAAI,EAChD,OAAIZ,EAAO,GAAW,GAAGA,CAAI,QACzBA,EAAO,KAAa,GAAG,KAAK,MAAMA,EAAO,EAAE,CAAC,QAC5CA,EAAO,MAAc,GAAG,KAAK,MAAMA,EAAO,IAAI,CAAC,QAC5C,GAAG,KAAK,MAAMA,EAAO,KAAK,CAAC,OACpC,CAMO,SAASa,IAAa,CAC3B,KAAM,CAAE,QAAAC,CAAA,EAAYC,GAAA,EACdC,EAAWC,GAAA,EAEjB,OAAOH,EACLhD,MAACoD,GAAA,CAAgB,QAAAJ,EAAkB,OAAQ,IAAME,EAAS,QAAQ,EAAG,EAErElD,EAAAA,IAACqD,GAAA,CAAc,SAAWhB,GAAOa,EAAS,UAAUb,CAAE,EAAE,EAAG,CAE/D,CAMA,SAASgB,GAAc,CAAE,SAAAC,GAAgD,CACvE,KAAM,CAACC,EAAQC,CAAS,EAAI1B,EAAAA,SAAkB,CAAA,CAAE,EAC1C,CAAC2B,EAASC,CAAU,EAAI5B,EAAAA,SAAS,EAAI,EACrC,CAAC6B,EAAOC,CAAQ,EAAI9B,EAAAA,SAAS,EAAE,EAC/B,CAAC+B,EAAYC,CAAa,EAAIhC,EAAAA,SAAS,EAAK,EAC5C,CAACiC,EAAYC,CAAa,EAAIlC,EAAAA,SAAS,EAAE,EACzC,CAACmC,EAAYC,CAAa,EAAIpC,EAAAA,SAAS,EAAE,EACzC,CAACqC,EAAUC,CAAW,EAAItC,EAAAA,SAAS,EAAK,EAExCuC,EAAOC,EAAAA,YAAY,IAAM,CAC7BC,EAAI,OACD,KAAA,EACA,KAAMC,GAAM,CAAEhB,EAAUgB,EAAE,MAAM,EAAGZ,EAAS,EAAE,CAAG,CAAC,EAClD,MAAOa,GAAab,EAASa,EAAE,OAAO,CAAC,EACvC,QAAQ,IAAMf,EAAW,EAAK,CAAC,CACpC,EAAG,CAAA,CAAE,EAEL3B,EAAAA,UAAU,IAAM,CAAEsC,EAAA,CAAQ,EAAG,CAACA,CAAI,CAAC,EAEnC,MAAMK,EAAe,SAAY,CAC/B,GAAKX,EAAW,OAChB,CAAAK,EAAY,EAAI,EAChB,GAAI,CACF,KAAM,CAAE,MAAAO,CAAA,EAAU,MAAMJ,EAAI,OAAO,OAAO,CAAE,KAAMR,EAAW,OAAQ,YAAaE,EAAW,KAAA,GAAU,OAAW,EAClHH,EAAc,EAAK,EACnBE,EAAc,EAAE,EAChBE,EAAc,EAAE,EAChBZ,EAASqB,EAAM,EAAE,CACnB,OAASF,EAAY,CACnBb,EAAUa,EAAY,OAAO,CAC/B,QAAA,CACEL,EAAY,EAAK,CACnB,EACF,EAEMQ,EAAe,MAAOvC,GAAe,CACzC,GAAI,CAAE,MAAMkC,EAAI,OAAO,OAAOlC,CAAE,EAAGgC,EAAA,CAAQ,OAASI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACpG,EAEMI,EAAqB,MAAOF,GAAiB,CACjD,GAAI,CACEA,EAAM,OAAQ,MAAMJ,EAAI,OAAO,WAAWI,EAAM,EAAE,EACjD,MAAMJ,EAAI,OAAO,SAASI,EAAM,EAAE,EACvCN,EAAA,CACF,OAASI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACzD,EAEA,OACEjE,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAR,EAAAA,IAAChB,GAAA,CAAS,UAAU,wBAAA,CAAyB,EAC7CwB,EAAAA,KAAC,KAAA,CAAG,UAAU,yCAAyC,SAAA,CAAA,iBACvCR,EAAAA,IAAC,OAAA,CAAK,UAAU,4CAA4C,SAAA,aAAA,CAAW,CAAA,CAAA,CACvF,CAAA,EACF,EACAQ,OAACsE,GAAO,QAAS,IAAMhB,EAAc,EAAI,EAAG,UAAU,sDACpD,SAAA,CAAA9D,EAAAA,IAAC+E,GAAA,CAAK,UAAU,SAAA,CAAU,EAAE,eAAA,CAAA,CAC9B,CAAA,EACF,EAECpB,GAAS3D,EAAAA,IAAC,MAAA,CAAI,UAAU,mFAAoF,SAAA2D,EAAM,EAElHF,SACE,MAAA,CAAI,UAAU,2CACZ,SAAA,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,IAAKjC,GAAMxB,EAAAA,IAACsC,GAAA,CAAiB,UAAU,MAAA,EAAbd,CAAoB,CAAE,EAChE,EAGD,CAACiC,GAAWF,EAAO,SAAW,GAAK,CAACI,GACnC3D,EAAAA,IAACgF,GAAA,CACC,SAAAxE,EAAAA,KAACyE,GAAA,CAAY,UAAU,oBACrB,SAAA,CAAAjF,EAAAA,IAAChB,GAAA,CAAS,UAAU,iDAAA,CAAkD,EACtEgB,EAAAA,IAAC,IAAA,CAAE,UAAU,wBAAwB,SAAA,2CAAA,CAAyC,CAAA,CAAA,CAChF,CAAA,CACF,EAGD,CAACyD,GAAWF,EAAO,OAAS,SAC1B,MAAA,CAAI,UAAU,2CACb,SAAAvD,EAAAA,IAACkF,GAAA,CAAgB,KAAK,YACnB,SAAA3B,EAAO,IAAI,CAACoB,EAAOnD,IAAA,OAClBxB,OAAAA,MAACmF,GAAO,IAAP,CAA0B,OAAQ3D,EAAG,SAAUD,GAAQ,QAAQ,SAAS,QAAQ,UAAU,KAAM,CAAE,QAAS,EAAG,MAAO,IAAM,WAAY,CAAE,SAAU,EAAA,GAAS,OAAM,GACjK,SAAAf,OAACwE,GAAA,CAAK,UAAU,6DAA6D,QAAS,IAAM1B,EAASqB,EAAM,EAAE,EAC3G,SAAA,CAAAnE,EAAAA,KAAC4E,GAAA,CAAW,UAAU,uDACpB,SAAA,CAAA5E,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACb,SAAA,CAAAR,EAAAA,IAACqF,GAAA,CAAU,UAAU,0BAA2B,SAAAV,EAAM,KAAK,EAC1DA,EAAM,aAAe3E,MAAC,IAAA,CAAE,UAAU,qCAAsC,SAAAsF,EAASX,EAAM,YAAa,GAAG,CAAA,CAAE,CAAA,EAC5G,EACAnE,EAAAA,KAAC,OAAI,UAAU,mCAAmC,QAAUiE,GAAMA,EAAE,gBAAA,EAClE,SAAA,CAAAzE,EAAAA,IAACuF,EAAA,CACC,QAASZ,EAAM,OAAS,UAAY,YACpC,UAAWzE,EAAG,6BAA8ByE,EAAM,QAAU,sDAAsD,EAClH,QAAS,IAAME,EAAmBF,CAAK,EAEtC,SAAAA,EAAM,OAASnE,EAAAA,KAAAgF,EAAAA,SAAA,CAAE,SAAA,CAAAxF,EAAAA,IAACyF,GAAA,CAAM,UAAU,cAAA,CAAe,EAAE,SAAA,CAAA,CAAO,EAAMjF,EAAAA,KAAAgF,EAAAA,SAAA,CAAE,SAAA,CAAAxF,EAAAA,IAAC0F,GAAA,CAAS,UAAU,cAAA,CAAe,EAAE,WAAA,CAAA,CAAS,CAAA,CAAA,SAElHC,GAAA,CACC,SAAA,CAAA3F,MAAC4F,IAAmB,QAAO,GACzB,SAAA5F,EAAAA,IAAC8E,EAAA,CAAO,QAAQ,QAAQ,KAAK,OAAO,UAAU,mDAAmD,SAAA9E,MAAC6F,GAAA,CAAO,UAAU,aAAA,CAAc,EAAE,EACrI,SACCC,GAAA,CACC,SAAA,CAAAtF,OAACuF,GAAA,CACC,SAAA,CAAA/F,EAAAA,IAACgG,IAAiB,SAAA,eAAA,CAAa,SAC9BC,GAAA,CAAuB,SAAA,CAAA,iCAA+BtB,EAAM,KAAK,sBAAA,CAAA,CAAoB,CAAA,EACxF,SACCuB,GAAA,CACC,SAAA,CAAAlG,EAAAA,IAACmG,IAAkB,SAAA,QAAA,CAAM,EACzBnG,EAAAA,IAACoG,GAAA,CAAkB,UAAU,8BAA8B,QAAS,IAAMxB,EAAaD,EAAM,EAAE,EAAG,SAAA,QAAA,CAAM,CAAA,CAAA,CAC1G,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,EACA3E,MAACiF,GAAA,CACC,SAAAzE,EAAAA,KAAC,MAAA,CAAI,UAAU,wDACb,SAAA,CAAAA,OAAC,OAAA,CAAM,SAAA,CAAAmE,EAAM,aAAa0B,EAAA1B,EAAM,QAAN,YAAA0B,EAAa,SAAU,EAAE,QAAA,EAAM,EACzDrG,EAAAA,IAAC,OAAA,CAAM,SAAAsG,GAAW3B,EAAM,SAAS,CAAA,CAAE,CAAA,CAAA,CACrC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EAtCeA,EAAM,EAuCvB,EACD,EACH,CAAA,CACF,QAID4B,GAAA,CAAO,KAAM1C,EAAY,aAAcC,EACtC,gBAAC0C,GAAA,CACC,SAAA,CAAAhG,OAACiG,GAAA,CACC,SAAA,CAAAzG,EAAAA,IAAC0G,IAAY,SAAA,cAAA,CAAY,EACzB1G,EAAAA,IAAC2G,IAAkB,SAAA,oDAAA,CAAkD,CAAA,EACvE,EACAnG,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,sCAAsC,SAAA,OAAI,EAC3DA,MAAC4G,IAAM,YAAY,aAAa,MAAO7C,EAAY,SAAWU,GAAMT,EAAcS,EAAE,OAAO,KAAK,EAAG,UAAYA,GAAMA,EAAE,MAAQ,SAAWC,GAAa,CAAG,CAAA,EAC5J,EACAlE,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,sCAAsC,SAAA,cAAW,EAClEA,EAAAA,IAAC6G,GAAA,CAAS,YAAY,sFAAsF,MAAO5C,EAAY,SAAWQ,GAAMP,EAAcO,EAAE,OAAO,KAAK,EAAG,KAAM,CAAA,CAAG,CAAA,CAAA,CAC1L,CAAA,EACF,SACCqC,GAAA,CACC,SAAA,CAAA9G,EAAAA,IAAC+G,GAAA,CAAY,QAAO,GAAC,SAAA/G,EAAAA,IAAC8E,GAAO,QAAQ,QAAQ,kBAAM,CAAA,CAAS,EAC5DtE,EAAAA,KAACsE,EAAA,CAAO,QAASJ,EAAc,SAAU,CAACX,EAAW,KAAA,GAAUI,EAAU,UAAU,gDAChF,SAAA,CAAAA,GAAYnE,EAAAA,IAACgH,GAAA,CAAQ,UAAU,2BAAA,CAA4B,EAAG,SAAA,CAAA,CACjE,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ,CAMA,SAAS5D,GAAgB,CAAE,QAAAJ,EAAS,OAAAiE,GAAmD,CACrF,KAAM,CAACtC,EAAOuC,CAAQ,EAAIpF,EAAAA,SAAuB,IAAI,EAC/C,CAACqF,EAAWC,CAAY,EAAItF,EAAAA,SAAgC,IAAI,EAChE,CAAC2B,EAASC,CAAU,EAAI5B,EAAAA,SAAS,EAAI,EACrC,CAAC6B,EAAOC,CAAQ,EAAI9B,EAAAA,SAAS,EAAE,EAC/B,CAACuF,EAASC,CAAU,EAAIxF,EAAAA,SAAS,EAAK,EACtC,CAACyF,EAAYC,CAAa,EAAI1F,EAAAA,SAAS,EAAK,EAC5C,CAAC2F,EAAcC,CAAe,EAAI5F,EAAAA,SAA2B,IAAI,EACjE,CAAC6F,EAAUC,CAAW,EAAI9F,EAAAA,SAAwB,IAAI,EACtD,CAAC+F,EAAaC,CAAc,EAAIhG,EAAAA,SAAS,EAAK,EAC9C,CAACiG,EAAWC,CAAY,EAAIlG,EAAAA,SAAS,EAAE,EACvC,CAACmG,EAAcC,CAAe,EAAIpG,EAAAA,SAAS,EAAK,EAChD,CAACqG,GAAUC,CAAW,EAAItG,EAAAA,SAAS,EAAK,EACxC,CAACuG,EAAMC,CAAO,EAAIxG,EAAAA,SAA+B,IAAI,EACrD,CAACyG,EAAaC,EAAc,EAAI1G,EAAAA,SAAS,EAAK,EAC9C2G,GAAUC,EAAAA,OAAA,EACVC,GAASD,EAAAA,OAA2B,IAAI,EAExCE,GAAUC,GACdC,GAAUC,GAAe,CAAE,qBAAsB,CAAE,SAAU,CAAA,EAAK,EAClED,GAAUE,EAAc,CAAA,EAGpB3E,EAAOC,EAAAA,YAAY,SAAY,OACnC,GAAI,CACF,MAAM2E,EAAO,MAAM1E,EAAI,OAAO,IAAIvB,CAAO,EAKzC,GAJAkE,EAAS+B,EAAK,KAAK,EACnB7B,EAAa6B,EAAK,SAAS,EAC3BrF,EAAS,EAAE,EAEP6D,EAAc,CAChB,MAAMyB,GAAU7C,EAAA4C,EAAK,MAAM,QAAX,YAAA5C,EAAkB,KAAM8C,GAAiBA,EAAE,KAAO1B,EAAa,IAC3EyB,KAAyBA,CAAO,CACtC,CACF,OAASzE,EAAY,CACnBb,EAAUa,EAAY,OAAO,CAC/B,QAAA,CACEf,EAAW,EAAK,CAClB,CACF,EAAG,CAACV,EAASyE,GAAA,YAAAA,EAAc,EAAE,CAAC,EAE9B1F,EAAAA,UAAU,IAAM,CACdsC,EAAA,EAGA,MAAM+E,EAAU,OAAO,SAAS,OAC1BC,EAAK,IAAI,YAAY,GAAGD,CAAO,eAAepG,CAAO,SAAS,EACpE,OAAA2F,GAAO,QAAUU,EAEjBA,EAAG,iBAAiB,eAAiB5E,GAAM,CACzC,GAAI,CACF,MAAMwE,EAAO,KAAK,MAAMxE,EAAE,IAAI,EAC9ByC,EAAS+B,CAAI,EACbrF,EAAS,EAAE,EAEX8D,EAAiB4B,GAAS,OACxB,OAAKA,IACWjD,EAAA4C,EAAK,QAAL,YAAA5C,EAAY,KAAM8C,GAAiBA,EAAE,KAAOG,EAAK,MAC/CA,EAFA,IAGpB,CAAC,CACH,MAAQ,CAAC,CACX,CAAC,EAEDD,EAAG,QAAU,IAAM,CAEjBA,EAAG,MAAA,EACHV,GAAO,QAAU,KACjBF,GAAQ,QAAU,YAAYpE,EAAM,IAAI,CAC1C,EAEO,IAAM,CACXgF,EAAG,MAAA,EACHV,GAAO,QAAU,KACbF,GAAQ,SAAS,cAAcA,GAAQ,OAAO,CACpD,CACF,EAAG,CAACzF,CAAO,CAAC,EAEZ,MAAMuG,EAAQC,EAAAA,QAAQ,KAAM7E,GAAA,YAAAA,EAAO,QAAS,CAAA,EAAI,CAACA,CAAK,CAAC,EAEjD8E,EAAcD,EAAAA,QAAQ,IAAM,CAChC,MAAME,EAAmC,CAAE,QAAS,CAAA,EAAI,QAAS,CAAA,EAAI,OAAQ,CAAA,EAAI,KAAM,CAAA,EAAI,OAAQ,CAAA,EAAI,SAAU,CAAA,CAAC,EAClH,UAAWP,KAAKI,EACVG,EAAIP,EAAE,MAAM,IAAOA,EAAE,MAAM,EAAE,KAAKA,CAAC,EAClCO,EAAI,QAAQ,KAAKP,CAAC,EAEzB,OAAOO,CACT,EAAG,CAACH,CAAK,CAAC,EAEJI,GAAiBH,EAAAA,QAAQ,IACtBvI,GAAQ,IAAK2I,IAAS,CAC3B,GAAGA,EACH,MAAOA,EAAI,MAAQ,UACf,CAAC,GAAGH,EAAY,QAAS,GAAGA,EAAY,OAAQ,GAAGA,EAAY,QAAQ,EACvEA,EAAYG,EAAI,GAAG,GAAK,CAAA,CAAC,EAC7B,EACD,CAACH,CAAW,CAAC,EAEVI,GAAaL,EAAAA,QAAQ,IAAO7B,EAAW4B,EAAM,KAAMJ,GAAMA,EAAE,KAAOxB,CAAQ,EAAI,OAAY,CAACA,EAAU4B,CAAK,CAAC,EAG3GO,EAAYN,EAAAA,QAAQ,IAAM,CAC9B,IAAIO,EAAM,EAAGC,EAAM,EACnB,UAAWb,KAAKI,EACVJ,EAAE,aAAcY,GAAOZ,EAAE,WAAW,MAAOa,GAAOb,EAAE,WAAW,QAErE,OAAIY,IAAQ,GAAKC,IAAQ,EAAU,KAC5B,CAAE,MAAOD,EAAK,OAAQC,EAAK,MAAOD,EAAMC,CAAA,CACjD,EAAG,CAACT,CAAK,CAAC,EAGMC,EAAAA,QAAQ,IAAM,CAC5B,MAAMrH,MAAQ,IACd,UAAWgH,KAAKI,EAAOpH,EAAE,IAAIgH,EAAE,GAAIA,CAAC,EACpC,OAAOhH,CACT,EAAG,CAACoH,CAAK,CAAC,EAGV,MAAMU,GAAmBC,GAA0BtC,EAAYsC,EAAM,OAAO,EAAY,EAElFC,GAAgB,MAAOD,GAAwB,CACnDtC,EAAY,IAAI,EAChB,KAAM,CAAE,OAAAjG,EAAQ,KAAAyI,CAAA,EAASF,EACzB,GAAI,CAACE,GAAQzI,EAAO,KAAOyI,EAAK,GAAI,OACpC,MAAMC,EAASD,EAAK,GACpB,IAAIE,EACJ,MAAMV,GAAM3I,GAAQ,KAAMkI,GAAMA,EAAE,MAAQkB,CAAM,EAChD,GAAIT,KAAoBA,GAAI,QACvB,CACH,MAAMW,EAAWhB,EAAM,KAAMJ,IAAMA,GAAE,KAAOkB,CAAM,EAC9CE,MAAyBA,EAAS,OACxC,CACA,GAAI,CAACD,EAAc,OACnB,MAAME,EAAOjB,EAAM,KAAMJ,GAAMA,EAAE,KAAOxH,EAAO,EAAE,EACjD,GAAI,GAAC6I,GAAQA,EAAK,SAAWF,GAC7B,GAAI,CAAE,MAAM/F,EAAI,OAAO,MAAM,OAAOvB,EAASwH,EAAK,GAAI,CAAE,OAAQF,EAAc,EAAGjG,EAAA,CAAQ,MAAQ,CAAC,CACpG,EAGMoG,GAAiB,SAAY,CACjCjD,EAAc,EAAI,EAClB,GAAI,CAAE,MAAMjD,EAAI,OAAO,SAASvB,CAAO,EAAGqB,EAAA,CAAQ,OAC3CI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,QAAA,CAC3C+C,EAAc,EAAK,CAAG,CAClC,EAEMkD,GAAqB,SAAY,CACrC,GAAI,CAAE,MAAMnG,EAAI,OAAO,aAAavB,CAAO,EAAGqB,EAAA,CAAQ,OAC/CI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACvD,EAEMkG,GAAe,SAAY,CAC/B,GAAI,CAAE,MAAMpG,EAAI,OAAO,OAAOvB,CAAO,EAAGqB,EAAA,CAAQ,OACzCI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACvD,EAEMmG,GAAkB,SAAY,CAClC,GAAI,CAAE,MAAMrG,EAAI,OAAO,MAAM,UAAUvB,CAAO,EAAGqB,EAAA,CAAQ,OAClDI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACvD,EAEMoG,EAAgB,SAAY,CAChC,GAAI,CAAE,MAAMtG,EAAI,OAAO,QAAQvB,CAAO,EAAGqB,EAAA,CAAQ,OAC1CI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACvD,EAEMqG,EAAgB,MAAOC,GAAmB,CAC9C,MAAMP,EAAOjB,EAAM,KAAKJ,GAAKA,EAAE,KAAO4B,CAAM,EACtCC,EAAOR,GAAA,MAAAA,EAAM,gBAAkB,CAAE,eAAgB,IAAS,OAChE,GAAI,CAAE,MAAMjG,EAAI,OAAO,MAAM,IAAIvB,EAAS+H,EAAQC,CAAI,EAAG3G,EAAA,CAAQ,OAC1DI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACvD,EAEMwG,EAAiB,MAAOF,GAAmB,CAC/C,GAAI,CAAE,MAAMxG,EAAI,OAAO,MAAM,KAAKvB,EAAS+H,CAAM,EAAG1G,EAAA,CAAQ,OACrDI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACvD,EAEMyG,EAAmB,MAAOH,GAAmB,CACjD,GAAI,CAAE,MAAMxG,EAAI,OAAO,MAAM,OAAOvB,EAAS+H,CAAM,GAAOtD,GAAA,YAAAA,EAAc,MAAOsD,GAAQrD,EAAgB,IAAI,EAAGrD,EAAA,CAAQ,OAC/GI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACvD,EAEM0G,GAAiB,SAAY,CACjC,GAAI,CAAE,MAAM5G,EAAI,OAAO,OAAOvB,EAAS,CAAE,YAAa+E,EAA6B,EAAGD,EAAe,EAAK,EAAGzD,EAAA,CAAQ,OAC9GI,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,CACvD,EAEM2G,GAAiB,SAAY,CACjC5C,GAAe,EAAI,EACnBJ,EAAY,EAAI,EAChB,GAAI,CACF,MAAMa,EAAO,MAAM1E,EAAI,OAAO,cAAcvB,CAAO,EACnDsF,EAAQW,CAAI,CACd,OAASxE,EAAY,CAAEb,EAAUa,EAAY,OAAO,CAAG,QAAA,CAC7C+D,GAAe,EAAK,CAAG,CACnC,EAEA,OAAI/E,GAAW,CAACkB,EAEZnE,EAAAA,KAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAR,EAAAA,IAACsC,GAAA,CAAS,UAAU,WAAA,CAAY,QAC/B,MAAA,CAAI,UAAU,aAAc,SAAA,CAAC,EAAG,EAAG,EAAG,CAAC,EAAE,IAAKd,GAAMxB,EAAAA,IAACsC,GAAA,CAAiB,UAAU,aAAA,EAAbd,CAA2B,CAAE,CAAA,CAAE,CAAA,EACrG,EAIAmC,GAAS,CAACgB,EAEVnE,EAAAA,KAAC,MAAA,CAAI,UAAU,MACb,SAAA,CAAAA,OAACsE,GAAO,QAAQ,QAAQ,QAASmC,EAAQ,UAAU,aAAa,SAAA,CAAAjH,EAAAA,IAACqL,GAAA,CAAU,UAAU,SAAA,CAAU,EAAE,OAAA,EAAK,EACtGrL,EAAAA,IAAC,MAAA,CAAI,UAAU,mFAAoF,SAAA2D,CAAA,CAAM,CAAA,EAC3G,EAKFnD,EAAAA,KAAC,MAAA,CAAI,UAAU,2BAEb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAR,EAAAA,IAAC8E,EAAA,CAAO,QAAQ,QAAQ,KAAK,OAAO,QAASmC,EAAQ,UAAU,mBAAmB,SAAAjH,MAACqL,GAAA,CAAU,UAAU,UAAU,EAAE,EACnHrL,EAAAA,IAAC,KAAA,CAAG,UAAU,wCAAyC,0BAAO,KAAK,GAClE2E,GAAA,YAAAA,EAAO,SAAU3E,EAAAA,IAACuF,EAAA,CAAM,UAAU,6CAA6C,SAAA,QAAA,CAAM,CAAA,EACxF,EAGAvF,EAAAA,IAAC,OAAI,UAAU,QACZ,WACCQ,EAAAA,KAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAR,EAAAA,IAAC6G,GAAA,CACC,MAAOkB,EACP,SAAWtD,GAAMuD,EAAavD,EAAE,OAAO,KAAK,EAC5C,KAAM,EACN,UAAU,iBACV,YAAY,uBACZ,UAAS,EAAA,CAAA,EAEXjE,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACb,SAAA,CAAAR,EAAAA,IAAC8E,GAAO,KAAK,KAAK,QAASqG,GAAgB,UAAU,4DAA4D,SAAA,MAAA,CAAI,EACrHnL,EAAAA,IAAC8E,EAAA,CAAO,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAMgD,EAAe,EAAK,EAAG,UAAU,cAAc,SAAA,QAAA,CAAM,CAAA,CAAA,CACxG,CAAA,CAAA,CACF,EAEAtH,EAAAA,KAAC,MAAA,CAAI,UAAU,wFACb,SAAA,CAAAR,MAAC,MAAA,CAAI,UAAU,+CACZ,SAAA2E,GAAA,MAAAA,EAAO,aACL,IAAM,CAEL,MAAM2G,EAAO3G,EAAM,YACb4G,EAASD,EAAK,OAAS,IACvBE,EAAUD,EACZD,EAAK,MAAM,EAAG,GAAkB,EAAE,UAAY,IAC9CA,EACJ,OACE9K,EAAAA,KAAAgF,WAAA,CACE,SAAA,CAAAxF,EAAAA,IAAC,MAAA,CACC,UAAWE,EAAGqL,GAAU,gBAAgB,EACxC,QAAS,IAAM,CACTA,KAAwB,EAAI,CAClC,EAEA,SAAAvL,EAAAA,IAACyL,GAAA,CACC,QAASD,EACT,UAAU,kCAAA,CAAA,CACZ,CAAA,EAEDD,GACCvL,EAAAA,IAAC,MAAA,CAAI,UAAU,2BACb,SAAAA,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAMkI,EAAgB,EAAI,EACnC,UAAU,qDACX,SAAA,UAAA,CAAA,CAED,CACF,CAAA,EAEJ,CAEJ,KAEAlI,EAAAA,IAAC,IAAA,CACC,UAAU,iDACV,QAAS,IAAM,CACbgI,EAAa,EAAE,EACfF,EAAe,EAAI,CACrB,EACD,SAAA,+BAAA,CAAA,EAIL,EACA9H,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAM,CACbgI,GAAarD,GAAA,YAAAA,EAAO,cAAe,EAAE,EACrCmD,EAAe,EAAI,CACrB,EACA,UAAU,iJACV,MAAM,mBACN,aAAW,mBAEX,SAAA9H,EAAAA,IAAC0L,GAAA,CAAO,UAAU,aAAA,CAAc,CAAA,CAAA,CAClC,CAAA,CACF,CAAA,CAEJ,EAGCvE,GACC3G,EAAAA,KAAC,MAAA,CAAI,UAAU,kEACb,SAAA,CAAAA,EAAAA,KAAC,OAAA,CAAK,UAAU,iBAAkB,SAAA,CAAA2G,EAAU,aAAa,UAAA,EAAQ,EACjEnH,EAAAA,IAAC,OAAA,CAAK,UAAU,2BAA2B,SAAA,IAAC,SAC3C,OAAA,CAAM,SAAA,CAAAmH,EAAU,aAAa,UAAA,EAAQ,EACtCnH,EAAAA,IAAC,OAAA,CAAK,UAAU,2BAA2B,SAAA,IAAC,EAC5CQ,EAAAA,KAAC,OAAA,CAAK,UAAU,mBAAoB,SAAA,CAAA2G,EAAU,UAAU,OAAA,EAAK,EAC7DnH,EAAAA,IAAC,OAAA,CAAK,UAAU,2BAA2B,SAAA,IAAC,EAC5CQ,EAAAA,KAAC,OAAA,CAAK,UAAU,eAAgB,SAAA,CAAA2G,EAAU,YAAY,SAAA,EAAO,EAC7DnH,EAAAA,IAAC,OAAA,CAAK,UAAU,2BAA2B,SAAA,IAAC,SAC3C,OAAA,CAAM,SAAA,CAAA2L,EAAaxE,EAAU,WAAW,EAAE,SAAA,EAAO,EACjD2C,GACCtJ,EAAAA,KAAAgF,WAAA,CACE,SAAA,CAAAxF,EAAAA,IAAC,OAAA,CAAK,UAAU,2BAA2B,SAAA,IAAC,QAC3C,OAAA,CAAK,UAAU,+BAAgC,SAAA0C,GAAWoH,CAAS,EAAE,EACtEtJ,EAAAA,KAAC,OAAA,CAAK,UAAU,2BAA2B,SAAA,CAAA,IACvCmL,EAAa7B,EAAU,KAAK,EAAE,SAAO6B,EAAa7B,EAAU,MAAM,EAAE,OAAA,CAAA,CACxE,CAAA,CAAA,CACF,CAAA,EAEJ,EAIFtJ,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,EAAAA,KAACsE,EAAA,CAAO,KAAK,KAAK,QAAQ,UAAU,QAAS,IAAMwC,EAAW,EAAI,EAAG,UAAU,kBAC7E,SAAA,CAAAtH,EAAAA,IAAC+E,GAAA,CAAK,UAAU,aAAA,CAAc,EAAE,WAAA,EAClC,EACAvE,EAAAA,KAACsE,EAAA,CAAO,KAAK,KAAK,QAAQ,UAAU,QAAS2F,GAAgB,SAAUlD,EAAY,UAAU,kBAC1F,SAAA,CAAAA,EAAavH,EAAAA,IAACgH,IAAQ,UAAU,0BAAA,CAA2B,EAAKhH,EAAAA,IAAC4L,GAAA,CAAS,UAAU,aAAA,CAAc,EAAG,gBAAA,EAExG,EAGApL,EAAAA,KAACsE,EAAA,CACC,KAAK,KACL,QAAS4F,GACT,UAAU,yGAEV,SAAA,CAAA1K,EAAAA,IAAC6L,GAAA,CAAI,UAAU,aAAA,CAAc,EAAE,gBAAA,CAAA,CAAA,EAGjCrL,EAAAA,KAACsE,GAAO,KAAK,KAAK,QAAQ,UAAU,QAASsG,GAAgB,UAAU,kBACrE,SAAA,CAAApL,EAAAA,IAAC8L,GAAA,CAAU,UAAU,aAAA,CAAc,EAAE,YAAA,EACvC,SAEChH,EAAA,CAAO,KAAK,KAAK,QAAS6F,GAAc,UAAU,gEACjD,SAAA,CAAA3K,EAAAA,IAAC+L,GAAA,CAAK,UAAU,aAAA,CAAc,EAAE,UAAA,EAClC,SACCpG,GAAA,CACC,SAAA,CAAA3F,EAAAA,IAAC4F,GAAA,CAAmB,QAAO,GACzB,SAAApF,EAAAA,KAACsE,EAAA,CAAO,KAAK,KAAK,QAAQ,UAAU,UAAU,kDAC5C,SAAA,CAAA9E,EAAAA,IAACX,GAAA,CAAO,UAAU,aAAA,CAAc,EAAE,WAAA,CAAA,CACpC,CAAA,CACF,SACCyG,GAAA,CACC,SAAA,CAAAtF,OAACuF,GAAA,CACC,SAAA,CAAA/F,EAAAA,IAACgG,IAAiB,SAAA,0BAAA,CAAwB,EAC1ChG,EAAAA,IAACiG,IAAuB,SAAA,0DAAA,CAAwD,CAAA,EAClF,SACCC,GAAA,CACC,SAAA,CAAAlG,EAAAA,IAACmG,IAAkB,SAAA,QAAA,CAAM,QACxBC,GAAA,CAAkB,UAAU,8BAA8B,QAASyE,EAAe,SAAA,UAAA,CAAQ,CAAA,CAAA,CAC7F,CAAA,CAAA,CACF,CAAA,EACF,EACArK,EAAAA,KAACsE,GAAO,KAAK,KAAK,QAAQ,QAAQ,QAAS8F,GAAiB,UAAU,wCACpE,SAAA,CAAA5K,EAAAA,IAACgM,GAAA,CAAa,UAAU,aAAA,CAAc,EAAE,aAAA,CAAA,CAC1C,CAAA,EACF,EAECrI,GAAS3D,EAAAA,IAAC,MAAA,CAAI,UAAU,mFAAoF,SAAA2D,EAAM,EAGlH8F,EAAY,UAAYA,EAAY,SAAS,OAAS,GACrDjJ,EAAAA,KAAC2E,GAAO,IAAP,CACC,QAAS,CAAE,QAAS,EAAG,EAAG,EAAA,EAC1B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAA,EAC1B,UAAU,4FAEV,SAAA,CAAA3E,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAR,EAAAA,IAAC,MAAA,CAAI,UAAU,sDAAA,CAAuD,EACtEQ,EAAAA,KAAC,OAAA,CAAK,UAAU,sCACb,SAAA,CAAAiJ,EAAY,SAAS,OAAO,QAAMA,EAAY,SAAS,OAAS,EAAI,IAAM,GAAG,QAAMA,EAAY,SAAS,SAAW,EAAI,IAAM,GAAG,iBAAA,CAAA,CACnI,CAAA,EACF,QACC,MAAA,CAAI,UAAU,qBACZ,SAAAA,EAAY,SAAS,IAAIwC,GACxBzL,EAAAA,KAACsE,EAAA,CAEC,KAAK,KACL,QAAQ,UACR,UAAU,4EACV,QAAS,IAAM4C,EAAgBuE,CAAK,EAEpC,SAAA,CAAAjM,EAAAA,IAAClB,GAAA,CAAU,UAAU,SAAA,CAAU,EAC9BwG,EAAS2G,EAAM,KAAM,EAAE,CAAA,CAAA,EAPnBA,EAAM,EAAA,CASd,CAAA,CACH,CAAA,CAAA,CAAA,CACF,EAEJ,EAGAzL,EAAAA,KAAC0L,IAAW,QAAAtD,GAAkB,mBAAoBuD,GAAe,YAAalC,GAAiB,UAAWE,GACxG,SAAA,CAAAnK,MAAC,OAAI,UAAU,2DACZ,SAAA2J,GAAe,IAAKC,GACnB5J,EAAAA,IAACoM,GAAA,CAEC,OAAQxC,EAAI,IACZ,MAAOA,EAAI,MACX,MAAOA,EAAI,MACX,SAAUL,EACV,QAAAvG,EACA,MAAO8H,EACP,OAAQG,EACR,SAAUC,EACV,SAAUxD,CAAA,EATLkC,EAAI,GAAA,CAWZ,EACH,QACC,MAAA,CAAI,UAAU,gCACZ,SAAAD,GAAe,IAAKC,GACnB5J,EAAAA,IAACqM,GAAA,CAEC,OAAQzC,EAAI,IACZ,MAAOA,EAAI,MACX,MAAOA,EAAI,MACX,SAAUL,EACV,QAAAvG,EACA,MAAO8H,EACP,OAAQG,EACR,SAAUC,EACV,SAAUxD,CAAA,EATLkC,EAAI,GAAA,CAWZ,EACH,EACA5J,EAAAA,IAACsM,GAAA,CACE,SAAAzC,IACC7J,EAAAA,IAAC,MAAA,CAAI,UAAU,4BACb,SAAAA,EAAAA,IAACuM,GAAA,CAAkB,KAAM1C,GAAY,SAAUN,EAAO,QAAAvG,EAAkB,MAAO8H,EAAe,OAAQG,EAAgB,SAAUC,EAAkB,SAAUxD,EAAiB,QAAO,EAAA,CAAC,CAAA,CACvL,CAAA,CAEJ,CAAA,EACF,EAEC6B,EAAM,SAAW,GAAK,CAAC9F,GACtBzD,EAAAA,IAAC,MAAA,CAAI,UAAU,0CACb,SAAAQ,EAAAA,KAAC,MAAA,CAAI,UAAU,cACb,SAAA,CAAAR,EAAAA,IAAClB,GAAA,CAAU,UAAU,iDAAA,CAAkD,EACvEkB,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,qDAAA,CAAmD,CAAA,CAAA,CAClG,CAAA,CACF,EAGFA,EAAAA,IAACwM,GAAA,CAAc,QAAAxJ,EAAkB,KAAMqE,EAAS,aAAcC,EAAY,UAAWjD,EAAM,SAAUkF,CAAA,CAAO,EAE5GvJ,EAAAA,IAACyM,GAAA,CACC,KAAMhF,EACN,QAAAzE,EACA,SAAUuG,EACV,KAAM,CAAC,CAAC9B,EACR,aAAeiF,GAAS,CAAOA,GAAMhF,EAAgB,IAAI,CAAG,EAC5D,MAAOoD,EACP,OAAQG,EACR,SAAUC,EACV,UAAW7G,CAAA,CAAA,EAIbrE,EAAAA,IAACuG,IAAO,KAAM4B,GAAU,aAAcC,EACpC,SAAA5H,EAAAA,KAACgG,GAAA,CAAc,UAAU,WACvB,SAAA,CAAAhG,OAACiG,GAAA,CACC,SAAA,CAAAjG,EAAAA,KAACkG,GAAA,CAAY,UAAU,0BAA0B,SAAA,CAAA1G,EAAAA,IAAC8L,GAAA,CAAU,UAAU,wBAAA,CAAyB,EAAE,iBAAA,EAAe,EAChH9L,EAAAA,IAAC2G,IAAkB,SAAA,wEAAA,CAAsE,CAAA,EAC3F,EACC4B,SAAgB,MAAA,CAAI,UAAU,2BAA2B,SAAAvI,EAAAA,IAACgH,GAAA,CAAQ,UAAU,qCAAA,CAAsC,CAAA,CAAE,EACpHqB,GAAQ,CAACE,GACR/H,EAAAA,KAAC,MAAA,CAAI,UAAU,qCACZ,SAAA,CAAA6H,EAAK,QAAQ,SAAW,SAAM,IAAA,CAAE,UAAU,iDAAiD,SAAA,8BAAA,CAA4B,EACvHA,EAAK,QAAQ,IAAKsE,GACjBnM,OAAC,MAAA,CAAqB,UAAU,cAC9B,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,KAAC+E,EAAA,CAAM,QAAQ,UAAU,UAAU,iEAAiE,SAAA,CAAA,QAC5FoH,EAAM,IAAA,EACd,EACAnM,EAAAA,KAAC,OAAA,CAAK,UAAU,oCAAqC,SAAA,CAAAmM,EAAM,MAAM,OAAO,QAAMA,EAAM,MAAM,OAAS,EAAI,IAAM,EAAA,CAAA,CAAG,CAAA,EAClH,EACCA,EAAM,MAAM,IAAKnC,GAChBhK,OAAC,MAAA,CAAkB,UAAU,6FAC3B,SAAA,CAAAR,EAAAA,IAACuC,GAAA,CAAc,SAAUiI,EAAK,QAAA,CAAU,EACxCxK,EAAAA,IAAC,OAAA,CAAK,UAAU,qCAAsC,WAAK,KAAK,EAC/DwK,EAAK,WAAaA,EAAK,UAAU,OAAS,GACzChK,EAAAA,KAAC,OAAA,CAAK,UAAU,6CACd,SAAA,CAAAR,EAAAA,IAACd,GAAA,CAAM,UAAU,uBAAA,CAAwB,EAAGsL,EAAK,UAAU,OAAO,OAAKA,EAAK,UAAU,OAAS,EAAI,IAAM,EAAA,CAAA,CAC3G,CAAA,CAAA,EANMA,EAAK,EAQf,CACD,CAAA,GAjBOmC,EAAM,IAkBhB,CACD,EACDnM,EAAAA,KAAC,MAAA,CAAI,UAAU,iGACb,SAAA,CAAAA,OAAC,OAAA,CAAM,SAAA,CAAA6H,EAAK,aAAa,QAAMA,EAAK,aAAe,EAAI,IAAM,GAAG,KAAGA,EAAK,WAAW,QAAMA,EAAK,WAAa,EAAI,IAAM,EAAA,EAAG,EACxH7H,EAAAA,KAACsE,EAAA,CAAO,KAAK,KAAK,QAAS,IAAM,CAAEsD,EAAY,EAAK,EAAGsC,GAAA,CAAsB,EAAG,UAAU,0EACxF,SAAA,CAAA1K,EAAAA,IAAC6L,GAAA,CAAI,UAAU,SAAA,CAAU,EAAE,eAAA,CAAA,CAC7B,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,EAGA7L,EAAAA,IAACuG,IAAO,KAAM0B,EAAc,aAAcC,EACxC,SAAA1H,EAAAA,KAACgG,GAAA,CAAc,UAAU,YACvB,SAAA,CAAAxG,EAAAA,IAACyG,GAAA,CACC,gBAACC,GAAA,CAAa,SAAA,EAAA/B,GAAA,YAAAA,EAAO,OAAQ,QAAQ,gBAAA,CAAA,CAAc,CAAA,CACrD,EACA3E,EAAAA,IAAC,MAAA,CAAI,UAAU,oCACZ,oBAAO,YACNA,EAAAA,IAACyL,GAAA,CACC,QAAS9G,EAAM,YACf,UAAU,kCAAA,CAAA,EAGZ3E,EAAAA,IAAC,IAAA,CAAE,UAAU,uCAAuC,2BAEpD,EAEJ,EACAA,MAAC8G,GAAA,CACC,SAAA9G,EAAAA,IAAC+G,GAAA,CAAY,QAAO,GAClB,SAAA/G,EAAAA,IAAC8E,EAAA,CAAO,QAAQ,QAAQ,KAAK,KAAK,SAAA,QAAK,EACzC,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ,CAkBA,SAASsH,GAAa,CAAE,OAAAQ,EAAQ,MAAAC,EAAO,MAAAtD,EAAO,SAAAuD,EAAU,QAAA9J,EAAS,MAAA+J,EAAO,OAAAC,EAAQ,SAAAC,EAAU,SAAA3J,CAAA,EAAyB,CACjH,MAAM4J,EAAcN,IAAW,UAAY,iBAAmBA,IAAW,OAAS,mBAAqBA,IAAW,SAAW,eAAiB,wBAE9I,OACEpM,EAAAA,KAAC,MAAA,CAAI,UAAU,4FACb,SAAA,CAAAR,EAAAA,IAAC,OAAI,UAAU,0EACb,SAAAQ,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAR,MAAC,QAAK,UAAWE,EAAG,sBAAuBgN,CAAW,EAAI,SAAAL,EAAM,QAC/DtH,EAAA,CAAM,QAAQ,YAAY,UAAU,0DAA2D,WAAM,MAAA,CAAO,CAAA,CAAA,CAC/G,CAAA,CACF,EACAvF,EAAAA,IAACmN,IAAgB,MAAO5D,EAAM,IAAKJ,GAAMA,EAAE,EAAE,EAAG,SAAUiE,GAA6B,GAAIR,EACzF,eAACS,GAAA,CAAW,UAAU,qBACpB,SAAArN,EAAAA,IAAC,MAAA,CAAI,UAAU,yBACb,SAAAA,EAAAA,IAACkF,GAAA,CAAgB,KAAK,YACnB,SAAAqE,EAAM,IAAI,CAACiB,EAAMhJ,IAChBxB,EAAAA,IAACsN,GAAA,CAA2B,KAAA9C,EAAY,MAAOhJ,EAAG,SAAAsL,EAAoB,QAAA9J,EAAkB,MAAA+J,EAAc,OAAAC,EAAgB,SAAAC,EAAoB,SAAA3J,CAAA,EAAvHkH,EAAK,EAAsI,CAC/J,CAAA,CACH,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,EACF,CAEJ,CAEA,SAAS6B,GAAa,CAAE,OAAAO,EAAQ,MAAAC,EAAO,MAAAtD,EAAO,SAAAuD,EAAU,QAAA9J,EAAS,MAAA+J,EAAO,OAAAC,EAAQ,SAAAC,EAAU,SAAA3J,CAAA,EAAyB,CACjH,KAAM,CAACoJ,EAAMa,CAAO,EAAIzL,EAAAA,SAAS8K,IAAW,WAAaA,IAAW,SAAS,EACvEM,EAAcN,IAAW,UAAY,iBAAmBA,IAAW,OAAS,mBAAqBA,IAAW,SAAW,eAAiB,wBAE9I,OACEpM,EAAAA,KAACgN,GAAA,CAAY,KAAAd,EAAY,aAAca,EACrC,SAAA,CAAAvN,EAAAA,IAACyN,GAAA,CAAmB,QAAO,GACzB,SAAAzN,EAAAA,IAAC,SAAA,CAAO,UAAU,sGAChB,SAAAQ,OAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAkM,EAAO1M,EAAAA,IAAC0N,IAAY,UAAU,+BAAA,CAAgC,EAAK1N,EAAAA,IAAC2N,GAAA,CAAa,UAAU,+BAAA,CAAgC,QAC3H,OAAA,CAAK,UAAWzN,EAAG,sBAAuBgN,CAAW,EAAI,SAAAL,EAAM,QAC/DtH,EAAA,CAAM,QAAQ,YAAY,UAAU,8BAA+B,WAAM,MAAA,CAAO,CAAA,CAAA,CACnF,EACF,EACF,EACAvF,EAAAA,IAAC4N,IACC,SAAA5N,MAACmN,GAAA,CAAgB,MAAO5D,EAAM,IAAKJ,GAAMA,EAAE,EAAE,EAAG,SAAUiE,GACxD,SAAApN,EAAAA,IAAC,MAAA,CAAI,UAAU,iBACb,SAAAA,EAAAA,IAACkF,IAAgB,KAAK,YACnB,WAAM,IAAI,CAACsF,EAAMhJ,IAChBxB,EAAAA,IAACsN,IAA2B,KAAA9C,EAAY,MAAOhJ,EAAG,SAAAsL,EAAoB,QAAA9J,EAAkB,MAAA+J,EAAc,OAAAC,EAAgB,SAAAC,EAAoB,SAAA3J,GAAvHkH,EAAK,EAAsI,CAC/J,CAAA,CACH,CAAA,CACF,EACF,CAAA,CACF,CAAA,EACF,CAEJ,CAiBA,SAAS8C,GAAa,CAAE,KAAA9C,EAAM,MAAAqD,EAAO,SAAAf,EAAU,QAAA9J,EAAS,MAAA+J,EAAO,OAAAC,EAAQ,SAAAC,EAAU,SAAA3J,GAA+B,CAC9G,KAAM,CAAE,WAAAwK,EAAY,UAAAC,EAAW,WAAAC,EAAY,UAAAC,EAAW,WAAAC,EAAY,WAAAC,CAAA,EAAeC,GAAY,CAAE,GAAI5D,EAAK,GAAI,EACtG6D,EAAQ,CAAE,UAAWC,GAAI,UAAU,SAASL,CAAS,EAAG,WAAAC,CAAA,EAE9D,OACElO,EAAAA,IAACmF,GAAO,IAAP,CACC,IAAK6I,EACL,MAAAK,EACA,OAAM,GACN,QAAS,CAAE,QAAS,EAAG,EAAG,CAAA,EAC1B,QAAS,CAAE,QAASF,EAAa,GAAM,EAAG,EAAG,EAAG,WAAY,CAAE,MAAON,EAAQ,IAAK,EAClF,KAAM,CAAE,QAAS,EAAG,MAAO,IAAM,WAAY,CAAE,SAAU,IAAK,EAC7D,GAAGC,EACH,GAAGC,EAEJ,SAAA/N,EAAAA,IAACuM,IAAkB,KAAA/B,EAAY,SAAAsC,EAAoB,QAAA9J,EAAkB,MAAA+J,EAAc,OAAAC,EAAgB,SAAAC,EAAoB,SAAA3J,CAAA,CAAoB,CAAA,CAAA,CAGjJ,CAiBA,SAASiJ,GAAkB,CAAE,KAAA/B,EAAM,SAAAsC,EAAU,QAAA9J,EAAS,MAAA+J,EAAO,OAAAC,EAAQ,SAAAC,EAAU,SAAA3J,EAAU,QAAAiL,GAA6B,aACpH,MAAM3M,EAAUH,GAAW+I,EAAK,UAAWA,EAAK,SAAW,SAAS,EAC9D,CAACgE,EAAUC,CAAW,EAAI3M,EAAAA,SAAS,EAAK,EACxC4M,EAAalE,EAAK,SAAWsC,EAAS,QAAU3D,EAAE,KAAOqB,EAAK,QAAQ,EAAI,KAC1EmE,EAAa7B,EAAS,OAAO3D,GAAKA,EAAE,WAAaqB,EAAK,EAAE,EAAE,OAC1DoE,IAAWvI,EAAAmE,EAAK,YAAL,YAAAnE,EAAgB,SAAU,EAE3C,OACE7F,EAAAA,KAAC,MAAA,CACC,UAAWN,EACT,qHACAiB,GAAcqJ,EAAK,MAAM,GAAKrJ,GAAc,QAC5CqJ,EAAK,SAAW,WAAa,+BAC7BA,EAAK,SAAW,YAAc,4BAC9BA,EAAK,SAAW,QAAU,aAC1B+D,GAAW,wDAAA,EAEb,QAAU9J,GAAM,CAAOA,EAAE,OAAuB,QAAQ,QAAQ,GAAWnB,EAASkH,CAAI,CAAG,EAG3F,SAAA,CAAAhK,EAAAA,KAAC,MAAA,CAAI,UAAU,8CACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,8CACb,SAAA,CAAAR,EAAAA,IAACuC,GAAA,CAAc,SAAUiI,EAAK,QAAA,CAAU,GACvCqE,EAAArE,EAAK,SAAL,YAAAqE,EAAa,IAAKhC,GACjB7M,EAAAA,IAAC,OAAA,CAEC,UAAU,0DACV,MAAO,CAAE,gBAAiB6M,EAAM,KAAA,EAE/B,SAAAA,EAAM,IAAA,EAJFA,EAAM,EAAA,GAOdrC,EAAK,SAAW,kBACd,OAAA,CAAK,UAAU,uGAAuG,SAAA,aAAA,CAEvH,CAAA,EAEJ,SACC7E,GAAA,CACC,SAAA,CAAA3F,EAAAA,IAAC4F,IAAmB,QAAO,GACzB,eAAC,SAAA,CAAO,UAAU,sGAAsG,QAAUnB,GAAMA,EAAE,kBACxI,SAAAzE,EAAAA,IAAC6F,IAAO,UAAU,UAAU,EAC9B,CAAA,CACF,SACCC,GAAA,CACC,SAAA,CAAAtF,OAACuF,GAAA,CACC,SAAA,CAAA/F,EAAAA,IAACgG,IAAiB,SAAA,cAAA,CAAY,EAC9BhG,EAAAA,IAACiG,IAAuB,SAAA,wCAAA,CAAsC,CAAA,EAChE,SACCC,GAAA,CACC,SAAA,CAAAlG,EAAAA,IAACmG,IAAkB,SAAA,QAAA,CAAM,EACzBnG,EAAAA,IAACoG,GAAA,CAAkB,UAAU,8BAA8B,QAAS,IAAM6G,EAASzC,EAAK,EAAE,EAAG,SAAA,QAAA,CAAM,CAAA,CAAA,CACrG,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,EAGCkE,GACClO,EAAAA,KAAC,MAAA,CAAI,UAAU,mEACb,SAAA,CAAAR,EAAAA,IAAC8L,GAAA,CAAU,UAAU,aAAA,CAAc,EACnC9L,MAAC,QAAK,UAAU,WAAY,WAAS0O,EAAW,KAAM,EAAE,CAAA,CAAE,CAAA,EAC5D,EAIF1O,EAAAA,IAAC,KAAE,UAAU,6CAA8C,WAASwK,EAAK,KAAM,GAAG,EAAE,EAGpFhK,EAAAA,KAAC,MAAA,CAAI,UAAU,2CACZ,SAAA,CAAAoO,EAAW,GACVpO,OAAC,OAAA,CAAK,UAAU,gEACd,SAAA,CAAAR,EAAAA,IAACd,GAAA,CAAM,UAAU,aAAA,CAAc,EAAE,IAAE0P,CAAA,EACrC,EAEDD,EAAa,GACZnO,OAAC,OAAA,CAAK,UAAU,gEACd,SAAA,CAAAR,EAAAA,IAAC8L,GAAA,CAAU,UAAU,aAAA,CAAc,EAAE,IAAE6C,CAAA,EACzC,KAEAG,EAAAtE,EAAK,WAAL,YAAAsE,EAAe,SAAU,GAAK,GAC9BtO,EAAAA,KAAC,OAAA,CAAK,UAAU,gEACd,SAAA,CAAAR,EAAAA,IAAC+O,GAAA,CAAc,UAAU,aAAA,CAAc,EAAE,IAAEvE,EAAK,SAAU,MAAA,EAC5D,KAEAwE,EAAAxE,EAAK,cAAL,YAAAwE,EAAkB,SAAU,GAAK,GACjCxO,EAAAA,KAAC,OAAA,CAAK,UAAU,gEACd,SAAA,CAAAR,EAAAA,IAACb,GAAA,CAAU,UAAU,aAAA,CAAc,EAAE,IAAEqL,EAAK,YAAa,MAAA,CAAA,CAC3D,CAAA,EAEJ,EAGCA,EAAK,SAAW,WACfhK,EAAAA,KAAC,MAAA,CAAI,UAAU,mBACZ,SAAA,CAAAgK,EAAK,UACJxK,EAAAA,IAAC,IAAA,CAAE,UAAU,yCAA0C,WAAK,SAAS,EAEtEwK,EAAK,aAAeA,EAAK,YAAY,OAAS,GAC7ChK,EAAAA,KAAC,MAAA,CAAI,UAAU,sCAAsC,SAAA,CAAA,YACzCgK,EAAK,YAAY,MAAM,EAAG,CAAC,EAAE,IAAIyE,GAAKA,EAAE,MAAM,GAAG,EAAE,IAAA,CAAK,EAAE,KAAK,IAAI,EAC5EzE,EAAK,YAAY,OAAS,GAAK,KAAKA,EAAK,YAAY,OAAS,CAAC,EAAA,EAClE,EAEFhK,EAAAA,KAAC,MAAA,CAAI,UAAU,sEACb,SAAA,CAAAR,MAAC,OAAA,CACE,SAAAwK,EAAK,WACJhK,EAAAA,KAAAgF,WAAA,CAAG,SAAA,CAAAmG,EAAanB,EAAK,WAAW,KAAK,EAAE,aAAW9H,GAAW8H,EAAK,UAAU,CAAA,CAAA,CAAE,EAC5EA,EAAK,YAAc,KACrBhK,OAAAgF,EAAAA,SAAA,CAAG,SAAA,CAAAmG,EAAanB,EAAK,UAAU,EAAE,SAAA,CAAA,CAAO,EACtC,KACN,EACC5I,GAAW5B,EAAAA,IAAC,OAAA,CAAK,UAAU,iBAAkB,SAAA4B,CAAA,CAAQ,CAAA,EACxD,EACC4I,EAAK,YACJhK,OAAC,MAAA,CAAI,UAAU,iDACb,SAAA,CAAAA,OAAC,OAAA,CAAM,SAAA,CAAAmL,EAAanB,EAAK,WAAW,KAAK,EAAE,KAAA,EAAG,SAC7C,OAAA,CAAM,SAAA,CAAAmB,EAAanB,EAAK,WAAW,MAAM,EAAE,MAAA,CAAA,CAAI,CAAA,EAClD,EAEFhK,EAAAA,KAACsE,EAAA,CACC,KAAK,KAAK,QAAQ,cAAc,UAAU,+BAC1C,QAAUL,GAAM,CAAEA,EAAE,gBAAA,EAAmBuI,EAAOxC,EAAK,EAAE,CAAG,EAExD,SAAA,CAAAxK,EAAAA,IAACX,GAAA,CAAO,UAAU,SAAA,CAAU,EAAE,OAAA,CAAA,CAAA,CAChC,EACF,EAIDmL,EAAK,SAAW,UAAYA,EAAK,iBAChChK,OAAC,MAAA,CAAI,UAAU,mBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,mEACb,SAAA,CAAAR,EAAAA,IAAC,IAAA,CAAE,UAAU,0CAA0C,SAAA,yBAAsB,EAC7EQ,EAAAA,KAAC,IAAA,CAAE,UAAU,uCACV,SAAA,CAAAgK,EAAK,WAAamB,EAAanB,EAAK,WAAW,KAAK,EAAI,IAAI,MAAIA,EAAK,YAAcmB,EAAanB,EAAK,WAAW,EAAI,IAAI,SAAA,CAAA,CAC3H,CAAA,EACF,EACAhK,EAAAA,KAACsE,EAAA,CACC,KAAK,KAAK,QAAQ,UAAU,UAAU,2FACtC,QAAUL,GAAM,CAAEA,EAAE,gBAAA,EAAmBsI,EAAMvC,EAAK,EAAE,CAAG,EAEvD,SAAA,CAAAxK,EAAAA,IAACZ,GAAA,CAAU,UAAU,SAAA,CAAU,EAAE,oBAAA,CAAA,CAAA,CACnC,EACF,GAEAoL,EAAK,SAAW,WAAcA,EAAK,SAAW,UAAY,CAACA,EAAK,kBAChExK,EAAAA,IAAC,MAAA,CAAI,UAAU,OACb,SAAAQ,EAAAA,KAACsE,EAAA,CACC,KAAK,KAAK,QAAQ,UAAU,UAAU,wFACtC,QAAUL,GAAM,CAAEA,EAAE,gBAAA,EAAmBsI,EAAMvC,EAAK,EAAE,CAAG,EAEvD,SAAA,CAAAxK,EAAAA,IAAC+L,GAAA,CAAK,UAAU,SAAA,CAAU,EAAE,MAAA,CAAA,CAAA,EAEhC,EAIDvB,EAAK,SAAW,QACfhK,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,sEACZ,SAAA,CAAAgK,EAAK,WACJhK,EAAAA,KAAAgF,EAAAA,SAAA,CACE,SAAA,CAAAhF,OAAC,OAAA,CAAM,SAAA,CAAAmL,EAAanB,EAAK,WAAW,KAAK,EAAE,SAAA,EAAO,QACjD,OAAA,CAAK,UAAU,+BAAgC,SAAA9H,GAAW8H,EAAK,UAAU,EAAE,EAC5EhK,EAAAA,KAAC,OAAA,CAAK,UAAU,2BAA2B,SAAA,CAAA,IAAEmL,EAAanB,EAAK,WAAW,KAAK,EAAE,SAAOmB,EAAanB,EAAK,WAAW,MAAM,EAAE,OAAA,CAAA,CAAK,CAAA,CAAA,CACpI,EACEA,EAAK,YAAc,YACpB,OAAA,CAAM,SAAA,CAAAmB,EAAanB,EAAK,UAAU,EAAE,SAAA,CAAA,CAAO,EAC1C,KACHA,EAAK,aAAexK,EAAAA,IAAC,QAAM,SAAAsG,GAAWkE,EAAK,WAAW,CAAA,CAAE,CAAA,EAC3D,EACCA,EAAK,QACJxK,EAAAA,IAAC,SAAA,CAAO,UAAU,6CAA6C,QAAUyE,GAAM,CAAEA,EAAE,gBAAA,EAAmBgK,EAAY,CAACD,CAAQ,CAAG,EAC3H,SAAAA,EAAW,cAAgB,aAAA,CAC9B,EAEDA,GAAYhE,EAAK,QAChBxK,EAAAA,IAAC,OAAI,UAAU,2CACb,SAAAA,EAAAA,IAACyL,GAAA,CAAiB,QAASjB,EAAK,OAAQ,UAAU,mCAAmC,CAAA,CACvF,CAAA,EAEJ,EAIDA,EAAK,SAAW,UACfhK,EAAAA,KAAC,MAAA,CAAI,UAAU,mBACZ,SAAA,CAAAgK,EAAK,OAASxK,EAAAA,IAAC,IAAA,CAAE,UAAU,wCAAyC,WAAK,MAAM,EAC/EwK,EAAK,YACJhK,OAAC,MAAA,CAAI,UAAU,oCACZ,SAAA,CAAAmL,EAAanB,EAAK,WAAW,KAAK,EAAE,aAAW9H,GAAW8H,EAAK,UAAU,CAAA,EAC5E,EAEFhK,EAAAA,KAACsE,EAAA,CACC,KAAK,KAAK,QAAQ,UAAU,UAAU,2FACtC,QAAUL,GAAM,CAAEA,EAAE,gBAAA,EAAmBsI,EAAMvC,EAAK,EAAE,CAAG,EAEvD,SAAA,CAAAxK,EAAAA,IAACZ,GAAA,CAAU,UAAU,SAAA,CAAU,EAAE,QAAA,CAAA,CAAA,CACnC,CAAA,CACF,CAAA,CAAA,CAAA,CAIR,CAMA,SAASoN,GAAc,CACrB,QAAAxJ,EAAS,KAAA0J,EAAM,aAAAwC,EAAc,UAAAC,EAAW,SAAArC,CAC1C,EAEG,CACD,KAAM,CAACsC,EAAMC,CAAO,EAAIvN,EAAAA,SAAS,EAAE,EAC7B,CAACU,EAAU8M,CAAW,EAAIxN,EAAAA,SAAiB,QAAQ,EACnD,CAACyN,EAAUC,CAAW,EAAI1N,EAAAA,SAAiB,MAAM,EACjD,CAAC2N,EAAaC,CAAc,EAAI5N,EAAAA,SAAiB,EAAE,EACnD,CAAC6N,EAAYC,CAAa,EAAI9N,EAAAA,SAAS,EAAK,EAE5C+N,EAAe,SAAY,CAC/B,GAAKT,EAAK,OACV,CAAAQ,EAAc,EAAI,EAClB,GAAI,CACF,MAAME,EAAgB,CAAE,KAAMV,EAAK,OAAQ,SAAU5M,GAAY,MAAA,EAC7DiN,GAAe,SAASA,CAAW,EAAI,IACzCK,EAAS,YAAc,SAASL,CAAW,GAE7C,MAAMM,EAAS,MAAMxL,EAAI,OAAO,MAAM,IAAIvB,EAAS8M,CAAQ,EAEvDP,IAAa,QAAUQ,EAAO,MAChC,MAAMxL,EAAI,OAAO,MAAM,UAAUvB,EAAS+M,EAAO,KAAK,GAAIR,CAAQ,EAEpEF,EAAQ,EAAE,EACVC,EAAY,QAAQ,EACpBE,EAAY,MAAM,EAClBE,EAAe,EAAE,EACjBR,EAAa,EAAK,EAClBC,EAAA,CACF,MAAQ,CAAC,QAAA,CAAYS,EAAc,EAAK,CAAG,EAC7C,EAEA,OACE5P,EAAAA,IAACuG,GAAA,CAAO,KAAAmG,EAAY,aAAAwC,EAClB,gBAAC1I,GAAA,CACC,SAAA,CAAAhG,OAACiG,GAAA,CACC,SAAA,CAAAzG,EAAAA,IAAC0G,IAAY,SAAA,UAAA,CAAQ,EACrB1G,EAAAA,IAAC2G,IAAkB,SAAA,wCAAA,CAAsC,CAAA,EAC3D,EACAnG,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,sCAAsC,SAAA,OAAI,EAC3DA,EAAAA,IAAC6G,GAAA,CAAS,YAAY,uBAAuB,MAAOuI,EAAM,SAAW3K,GAAM4K,EAAQ5K,EAAE,OAAO,KAAK,EAAG,KAAM,CAAA,CAAG,CAAA,EAC/G,EACAjE,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,sCAAsC,SAAA,WAAQ,EAC/DQ,EAAAA,KAACwP,GAAA,CAAO,MAAOxN,EAAU,cAAe8M,EACtC,SAAA,CAAAtP,EAAAA,IAACiQ,GAAA,CAAc,SAAAjQ,EAAAA,IAACkQ,GAAA,CAAA,CAAY,EAAE,SAC7BC,GAAA,CACC,SAAA,CAAAnQ,EAAAA,IAACoQ,EAAA,CAAW,MAAM,MAAM,SAAA,MAAG,EAC3BpQ,EAAAA,IAACoQ,EAAA,CAAW,MAAM,SAAS,SAAA,SAAM,EACjCpQ,EAAAA,IAACoQ,EAAA,CAAW,MAAM,OAAO,SAAA,MAAA,CAAI,CAAA,CAAA,CAC/B,CAAA,CAAA,CACF,CAAA,EACF,EACA5P,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,sCAAsC,SAAA,eAAY,EACnEA,EAAAA,IAAC4G,GAAA,CACC,KAAK,SACL,YAAY,WACZ,MAAO6I,EACP,SAAWhL,GAAMiL,EAAejL,EAAE,OAAO,KAAK,EAC9C,IAAK,EACL,KAAM,GAAA,CAAA,EAERzE,EAAAA,IAAC,IAAA,CAAE,UAAU,oCAAoC,SAAA,8BAAA,CAA4B,CAAA,CAAA,CAC/E,CAAA,EACF,EACAQ,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,sCAAsC,SAAA,cAAW,EAClEQ,EAAAA,KAACwP,GAAA,CAAO,MAAOT,EAAU,cAAeC,EACtC,SAAA,CAAAxP,MAACiQ,GAAA,CAAc,SAAAjQ,EAAAA,IAACkQ,GAAA,CAAY,YAAY,OAAO,EAAE,SAChDC,GAAA,CACC,SAAA,CAAAnQ,EAAAA,IAACoQ,EAAA,CAAW,MAAM,OAAO,SAAA,OAAI,EAC1BtD,EAAS,IAAK3D,GACbnJ,EAAAA,IAACoQ,GAAsB,MAAOjH,EAAE,GAC7B,SAAA7D,EAAS6D,EAAE,KAAM,EAAE,CAAA,EADLA,EAAE,EAEnB,CACD,CAAA,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,EACF,SACDrC,GAAA,CACC,SAAA,CAAA9G,EAAAA,IAAC+G,GAAA,CAAY,QAAO,GAAC,SAAA/G,EAAAA,IAAC8E,GAAO,QAAQ,QAAQ,kBAAM,CAAA,CAAS,EAC5DtE,EAAAA,KAACsE,EAAA,CAAO,QAAS+K,EAAc,SAAU,CAACT,EAAK,KAAA,GAAUO,EAAY,UAAU,gDAC5E,SAAA,CAAAA,GAAc3P,EAAAA,IAACgH,GAAA,CAAQ,UAAU,2BAAA,CAA4B,EAAG,WAAA,CAAA,CACnE,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAMA,SAASqJ,GAAsB,CAAE,QAAArN,EAAS,OAAA+H,EAAQ,SAAAuF,EAAU,UAAAC,GAA4F,CACtJ,KAAM,CAACC,EAAUC,CAAW,EAAI3O,EAAAA,SAAsE,CAAA,CAAE,EAClG,CAAC4O,EAAYC,CAAa,EAAI7O,EAAAA,SAAS,EAAE,EACzC,CAAC8O,EAASC,CAAU,EAAI/O,EAAAA,SAAS,EAAK,EAE5CC,EAAAA,UAAU,IAAM,CACdwC,EAAI,OAAO,SAAS,KAAKvB,CAAO,EAAE,KAAKwB,GAAK,CAC1C,MAAMsM,EAAUtM,EAAE,SAAS,OAAOyK,GAAKA,EAAE,SAAWlE,CAAM,EAC1D0F,EAAYK,CAAO,CACrB,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,CACnB,EAAG,CAAC9N,EAAS+H,EAAQuF,CAAQ,CAAC,EAE9B,MAAMS,EAAgB,MAAOC,EAAoBC,IAAqB,CACpEJ,EAAW,EAAI,EACf,GAAI,CACF,MAAMtM,EAAI,OAAO,SAAS,QAAQvB,EAASgO,EAAYC,CAAQ,EAC/DR,KAAoBnH,EAAK,UAAY2F,EAAE,KAAO+B,CAAU,CAAC,EACzDL,EAAc,EAAE,EAChBJ,EAAA,CACF,MAAQ,CAAC,QAAA,CAAYM,EAAW,EAAK,CAAG,CAC1C,EAEA,OAAIL,EAAS,SAAW,EAEpBhQ,EAAAA,KAAC,MAAA,CAAI,UAAU,6DACb,SAAA,CAAAR,EAAAA,IAAC,IAAA,CAAE,UAAU,oEAAoE,SAAA,iBAAc,EAC/FA,EAAAA,IAAC,KAAE,UAAU,6BAA8B,2BAAU,QAAQ,sBAAuB,MAAO,oCAAA,CAAqC,CAAA,EAClI,EAKFA,EAAAA,IAAC,MAAA,CAAI,UAAU,YACZ,SAAAwQ,EAAS,IAAIU,GACZ1Q,EAAAA,KAAC,MAAA,CAAgB,UAAU,uEACzB,SAAA,CAAAR,EAAAA,IAAC,IAAA,CAAE,UAAU,+DAA+D,SAAA,oBAAiB,EAC7FA,EAAAA,IAAC,IAAA,CAAE,UAAU,0BAA2B,WAAG,SAAS,EACnDkR,EAAG,SAAWA,EAAG,QAAQ,OAAS,GACjClR,EAAAA,IAAC,MAAA,CAAI,UAAU,uBACZ,SAAAkR,EAAG,QAAQ,IAAIC,GACdnR,EAAAA,IAAC8E,EAAA,CAAiB,KAAK,KAAK,QAAQ,UAAU,SAAU8L,EACtD,UAAU,sEACV,QAAS,IAAMG,EAAcG,EAAG,GAAIC,CAAG,EAEtC,SAAAA,CAAA,EAJUA,CAAA,CAMd,EACH,EAEF3Q,EAAAA,KAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAR,EAAAA,IAAC4G,GAAA,CACC,MAAO8J,EACP,SAAWjM,GAAMkM,EAAclM,EAAE,OAAO,KAAK,EAC7C,YAAY,4BACZ,UAAU,cACV,UAAYA,GAAM,CAAMA,EAAE,MAAQ,SAAWiM,EAAW,KAAA,GAAQK,EAAcG,EAAG,GAAIR,EAAW,KAAA,CAAM,CAAG,CAAA,CAAA,EAE3G1Q,EAAAA,IAAC8E,EAAA,CAAO,KAAK,KAAK,SAAU,CAAC4L,EAAW,KAAA,GAAUE,EAChD,UAAU,mDACV,QAAS,IAAMG,EAAcG,EAAG,GAAIR,EAAW,MAAM,EAErD,SAAA1Q,EAAAA,IAACoR,GAAA,CAAK,UAAU,SAAA,CAAU,CAAA,CAAA,CAC5B,CAAA,CACF,CAAA,CAAA,EA7BQF,EAAG,EA8Bb,CACD,EACH,CAEJ,CAEA,SAASzE,GAAgB,CACvB,KAAAjC,EAAM,QAAAxH,EAAS,SAAA8J,EAAU,KAAAJ,EAAM,aAAAwC,EAAc,MAAAnC,EAAO,OAAAC,EAAQ,SAAAC,EAAU,UAAAsD,CACxE,EAUG,uBACD,KAAM,CAACc,EAAKC,CAAM,EAAIxP,EAAAA,SAA8D,SAAS,EACvF,CAACyP,EAAaC,CAAc,EAAI1P,EAAAA,SAAS,EAAK,EAC9C,CAAC2P,EAAWC,CAAY,EAAI5P,EAAAA,SAAS,EAAE,EACvC,CAAC6P,EAAaC,CAAc,EAAI9P,EAAAA,SAAS,EAAE,EAC3C,CAAC+P,EAAmBC,CAAoB,EAAIhQ,EAAAA,SAAS,EAAK,EAC1D,CAACiQ,EAAWC,CAAY,EAAIlQ,EAAAA,SAAS,EAAE,EACvC,CAACmQ,EAAYC,CAAa,EAAIpQ,EAAAA,SAAS,SAAS,EAChD,CAACqQ,EAAgBC,EAAiB,EAAItQ,EAAAA,SAAS,EAAK,EAEpDF,EAAUH,GAAW+I,GAAA,YAAAA,EAAM,WAAWA,GAAA,YAAAA,EAAM,UAAW,SAAS,EAEtE,GAAI,CAACA,EAAM,OAAO,KAElB,MAAMkE,EAAalE,EAAK,SAAWsC,EAAS,QAAU3D,EAAE,KAAOqB,EAAK,QAAQ,EAAI,KAC1EjK,EAAWuM,EAAS,UAAY3D,EAAE,WAAaqB,EAAK,EAAE,EACtD6H,GAAQ7H,EAAK,WAAa,CAAA,GAAI,IAAInI,GAAMyK,EAAS,KAAK3D,GAAKA,EAAE,KAAO9G,CAAE,CAAC,EAAE,OAAO,OAAO,EAEvFiQ,GACJ9H,EAAK,SAAW,UAAY,UAC5BA,EAAK,SAAW,UAAY,UAC5BA,EAAK,SAAW,UAAYA,EAAK,gBAAkB,mBACnDA,EAAK,SAAW,SAAW,SAC3BA,EAAK,SAAW,OAAS,OACzBA,EAAK,SAAW,WAAa,cAAgB,SAEzC0C,GACJ1C,EAAK,SAAW,UAAY,iBAC5BA,EAAK,SAAW,OAAS,mBACzBA,EAAK,SAAW,SAAW,eAC3BA,EAAK,SAAW,WAAa,kBAC7BA,EAAK,gBAAkB,kBACvB,wBAEI+H,GAAiB,SAAY,CACjC,GAAI,CACF,MAAMhO,EAAI,OAAO,MAAM,OAAOvB,EAASwH,EAAK,GAAI,CAAE,KAAMiH,EAAiC,EACzFD,EAAe,EAAK,EACpBjB,EAAA,CACF,MAAQ,CAAC,CACX,EAEMiC,GAAmB,SAAY,CACnC,GAAKb,EAAY,OACjB,CAAAG,EAAqB,EAAI,EACzB,GAAI,CACF,MAAMvN,EAAI,OAAO,MAAM,SAAS,IAAIvB,EAASwH,EAAK,GAAImH,EAAY,KAAA,EAAQ,OAAQ,OAAO,EACzFC,EAAe,EAAE,EACjBrB,EAAA,CACF,MAAQ,CAAC,QAAA,CAAYuB,EAAqB,EAAK,CAAG,EACpD,EAEMW,EAAsB,MAAOC,GAAsB,CACvD,GAAI,CAAE,MAAMnO,EAAI,OAAO,MAAM,SAAS,OAAOvB,EAASwH,EAAK,GAAIkI,CAAS,EAAGnC,EAAA,CAAa,MAAQ,CAAC,CACnG,EAEMoC,EAAiB,SAAY,CACjC,GAAKZ,EAAU,OACf,GAAI,CACF,MAAMxN,EAAI,OAAO,MAAM,OAAO,IAAIvB,EAASwH,EAAK,GAAIuH,EAAU,KAAA,EAAQE,CAAU,EAChFD,EAAa,EAAE,EACfI,GAAkB,EAAK,EACvB7B,EAAA,CACF,MAAQ,CAAC,CACX,EAEMqC,EAAoB,MAAOC,GAAoB,CACnD,GAAI,CAAE,MAAMtO,EAAI,OAAO,MAAM,OAAO,OAAOvB,EAASwH,EAAK,GAAIqI,CAAO,EAAGtC,EAAA,CAAa,MAAQ,CAAC,CAC/F,EAEMuC,GAAyB,MAAOC,GAAkB,CACtD,GAAI,CAAE,MAAMxO,EAAI,OAAO,MAAM,YAAY,OAAOvB,EAASwH,EAAK,GAAIuI,CAAK,EAAGxC,EAAA,CAAa,MAAQ,CAAC,CAClG,EAEMyC,GAAuB,MAAOxQ,GAAqB,CACvD,GAAI,CAAE,MAAM+B,EAAI,OAAO,MAAM,OAAOvB,EAASwH,EAAK,GAAI,CAAE,SAAAhI,EAAgC,EAAG+N,EAAA,CAAa,MAAQ,CAAC,CACnH,EAEM0C,EAAYC,GAAchT,EAC9B,+DACAmR,IAAQ6B,EAAI,iCAAmC,+DAAA,EAGjD,aACG3T,GAAA,CAAM,KAAAmN,EAAY,aAAAwC,EACjB,SAAA1O,EAAAA,KAACH,GAAA,CAAa,UAAU,qCACtB,SAAA,CAAAG,OAACI,GAAA,CACC,SAAA,CAAAZ,EAAAA,IAACa,GAAA,CAAW,UAAU,YAAY,SAAA,eAAY,EAC9Cb,EAAAA,IAACe,GAAA,CAAiB,UAAU,UAAU,SAAA,0CAAA,CAAwC,CAAA,EAChF,EAEAP,EAAAA,KAAC,MAAA,CAAI,UAAU,iBAEb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAR,MAAC,QAAK,UAAWE,EAAG,wBAAyBgN,EAAW,EAAI,SAAAoF,GAAY,SACvEtC,GAAA,CAAO,MAAOxF,EAAK,UAAY,SAAU,cAAewI,GACvD,SAAA,CAAAhT,MAACiQ,GAAA,CAAc,UAAU,mBAAmB,SAAAjQ,MAACkQ,KAAY,EAAE,SAC1DC,GAAA,CACC,SAAA,CAAAnQ,EAAAA,IAACoQ,EAAA,CAAW,MAAM,MAAM,SAAA,MAAG,EAC3BpQ,EAAAA,IAACoQ,EAAA,CAAW,MAAM,SAAS,SAAA,SAAM,EACjCpQ,EAAAA,IAACoQ,EAAA,CAAW,MAAM,OAAO,SAAA,MAAA,CAAI,CAAA,CAAA,CAC/B,CAAA,CAAA,CACF,CAAA,EACF,EAGC5F,EAAK,iBACJhK,OAAC,MAAA,CAAI,UAAU,8EACb,SAAA,CAAAR,EAAAA,IAAC,IAAA,CAAE,UAAU,sCAAsC,SAAA,yBAAsB,EACzEQ,EAAAA,KAAC,IAAA,CAAE,UAAU,iCAAiC,SAAA,CAAA,QACtCgK,EAAK,WAAamB,EAAanB,EAAK,WAAW,KAAK,EAAI,IAAI,OAAKA,EAAK,YAAcmB,EAAanB,EAAK,WAAW,EAAI,IAAI,mDAAA,CAAA,CAEjI,CAAA,EACF,EAIDA,EAAK,aAAe,CAACA,EAAK,iBACzBhK,OAAC,IAAA,CAAE,UAAU,oCAAoC,SAAA,CAAA,WACtCmL,EAAanB,EAAK,WAAW,EAAE,UACvCA,EAAK,WAAa,KAAKmB,EAAanB,EAAK,WAAW,KAAK,CAAC,SAAW,EAAA,EACxE,EAIFhK,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACZ,SAAA,EAAA6F,GAAAmE,EAAK,SAAL,YAAAnE,GAAa,IAAKwG,GACjBrM,EAAAA,KAAC,OAAA,CAAoB,UAAU,wFAAwF,MAAO,CAAE,gBAAiBqM,EAAM,OACpJ,SAAA,CAAAA,EAAM,KACP7M,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAM4S,EAAkB/F,EAAM,EAAE,EAAG,UAAU,mBAAmB,SAAA7M,MAACW,GAAA,CAAE,UAAU,cAAc,CAAA,CAAE,CAAA,GAFrGkM,EAAM,EAGjB,GAEFrM,OAAC,UAAO,QAAS,IAAM4R,GAAkB,CAACD,CAAc,EAAG,UAAU,oFACnE,SAAA,CAAAnS,EAAAA,IAACV,GAAA,CAAI,UAAU,SAAA,CAAU,EAAE,YAAA,CAAA,CAC7B,CAAA,EACF,EACC6S,GACC3R,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAR,MAAC,OAAI,UAAU,uBACZ,SAAAoB,GAAc,IAAK+R,GAClBnT,EAAAA,IAAC,SAAA,CAEC,QAAS,IAAM,CAAEgS,EAAamB,EAAE,IAAI,EAAGjB,EAAciB,EAAE,KAAK,CAAG,EAC/D,UAAWjT,EAAG,yEAA0E6R,IAAcoB,EAAE,MAAQ,sBAAsB,EACtI,MAAO,CAAE,gBAAiBA,EAAE,KAAA,EAE3B,SAAAA,EAAE,IAAA,EALEA,EAAE,IAAA,CAOV,EACH,EACAnT,EAAAA,IAAC4G,GAAA,CAAM,MAAOmL,EAAW,SAAWtN,GAAMuN,EAAavN,EAAE,OAAO,KAAK,EAAG,YAAY,YAAY,UAAU,mBAAmB,EAC7HzE,EAAAA,IAAC,QAAA,CAAM,KAAK,QAAQ,MAAOiS,EAAY,SAAWxN,GAAMyN,EAAczN,EAAE,OAAO,KAAK,EAAG,UAAU,iCAAiC,EAClIzE,EAAAA,IAAC8E,EAAA,CAAO,KAAK,KAAK,QAAS6N,EAAgB,SAAU,CAACZ,EAAU,KAAA,EAAQ,UAAU,+CAA+C,SAAA,KAAA,CAAG,CAAA,CAAA,CACtI,CAAA,EAEJ,EAGAvR,EAAAA,KAAC,MAAA,CAAI,UAAU,4CACb,SAAA,CAAAR,EAAAA,IAAC,SAAA,CAAO,UAAWiT,EAAS,SAAS,EAAG,QAAS,IAAM3B,EAAO,SAAS,EAAG,SAAA,SAAA,CAAO,EACjF9Q,EAAAA,KAAC,SAAA,CAAO,UAAWyS,EAAS,UAAU,EAAG,QAAS,IAAM3B,EAAO,UAAU,EAAG,SAAA,CAAA,eAC/DzC,GAAArE,EAAK,cAAL,YAAAqE,GAAkB,SAAU,GAAK,GAAK7O,EAAAA,IAACuF,EAAA,CAAM,QAAQ,YAAY,UAAU,2BAA4B,SAAAiF,EAAK,YAAa,MAAA,CAAO,CAAA,EAC7I,EACAhK,EAAAA,KAAC,SAAA,CAAO,UAAWyS,EAAS,UAAU,EAAG,QAAS,IAAM3B,EAAO,UAAU,EAAG,SAAA,CAAA,eAC/DxC,GAAAtE,EAAK,WAAL,YAAAsE,GAAe,SAAU,GAAK,GAAK9O,EAAAA,IAACuF,EAAA,CAAM,QAAQ,YAAY,UAAU,2BAA4B,SAAAiF,EAAK,SAAU,MAAA,CAAO,CAAA,EACvI,EACAhK,EAAAA,KAAC,SAAA,CAAO,UAAWyS,EAAS,aAAa,EAAG,QAAS,IAAM3B,EAAO,aAAa,EAAG,SAAA,CAAA,kBAClEtC,GAAAxE,EAAK,cAAL,YAAAwE,GAAkB,SAAU,GAAK,GAAKhP,EAAAA,IAACuF,EAAA,CAAM,QAAQ,YAAY,UAAU,2BAA4B,SAAAiF,EAAK,YAAa,MAAA,CAAO,CAAA,CAAA,CAChJ,CAAA,EACF,EAGC6G,IAAQ,WACP7Q,OAAC,MAAA,CAAI,UAAU,YAEb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,qEAAqE,SAAA,OAAI,EACzF,CAACuR,GACA/Q,EAAAA,KAAC,SAAA,CAAO,QAAS,IAAM,CAAEkR,EAAalH,EAAK,IAAI,EAAGgH,EAAe,EAAI,CAAG,EAAG,UAAU,oFACnF,SAAA,CAAAxR,EAAAA,IAAC0L,GAAA,CAAO,UAAU,aAAA,CAAc,EAAE,OAAA,CAAA,CACpC,CAAA,EAEJ,EACC6F,EACC/Q,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAR,EAAAA,IAAC6G,GAAA,CAAS,MAAO4K,EAAW,SAAWhN,GAAMiN,EAAajN,EAAE,OAAO,KAAK,EAAG,KAAM,EAAG,UAAU,UAAU,EACxGjE,EAAAA,KAAC,MAAA,CAAI,UAAU,aACb,SAAA,CAAAR,EAAAA,IAAC8E,GAAO,KAAK,KAAK,QAASyN,GAAgB,UAAU,sCAAsC,SAAA,MAAA,CAAI,EAC/FvS,EAAAA,IAAC8E,EAAA,CAAO,KAAK,KAAK,QAAQ,QAAQ,QAAS,IAAM0M,EAAe,EAAK,EAAG,UAAU,cAAc,SAAA,QAAA,CAAM,CAAA,CAAA,CACxG,CAAA,EACF,EAEAxR,EAAAA,IAAC,IAAA,CAAE,UAAU,8DAA+D,WAAK,IAAA,CAAK,CAAA,EAE1F,EAGCwK,EAAK,UACJhK,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,qEAAqE,SAAA,WAAQ,EAC9FA,EAAAA,IAAC,IAAA,CAAE,UAAU,mCAAoC,WAAK,QAAA,CAAS,CAAA,EACjE,EAIDwK,EAAK,SAAW,YACfxK,EAAAA,IAACqQ,GAAA,CAAsB,QAAArN,EAAkB,OAAQwH,EAAK,GAAI,SAAUA,EAAK,SAAU,UAAA+F,CAAA,CAAsB,EAI1G/F,EAAK,aAAeA,EAAK,YAAY,OAAS,UAC5C,MAAA,CACC,SAAA,CAAAxK,EAAAA,IAAC,QAAA,CAAM,UAAU,qEAAqE,SAAA,eAAY,QACjG,MAAA,CAAI,UAAU,mBACZ,SAAAwK,EAAK,YAAY,IAAI,CAACyE,EAAGzN,UACvB,IAAA,CAAU,UAAU,oDAAqD,SAAAyN,CAAA,EAAlEzN,CAAoE,CAC7E,CAAA,CACH,CAAA,EACF,EAIDgJ,EAAK,YACJhK,OAAC,MAAA,CAAI,UAAU,+DACb,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,qEAAqE,SAAA,qBAAkB,EACxGQ,EAAAA,KAAC,MAAA,CAAI,UAAU,qCACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAR,EAAAA,IAAC,KAAE,UAAU,wCAAyC,WAAawK,EAAK,WAAW,KAAK,EAAE,EAC1FxK,EAAAA,IAAC,IAAA,CAAE,UAAU,oCAAoC,SAAA,OAAA,CAAK,CAAA,EACxD,SACC,MAAA,CACC,SAAA,CAAAA,EAAAA,IAAC,KAAE,UAAU,uCAAwC,WAAawK,EAAK,WAAW,KAAK,EAAE,EACzFxK,EAAAA,IAAC,IAAA,CAAE,UAAU,oCAAoC,SAAA,OAAA,CAAK,CAAA,EACxD,SACC,MAAA,CACC,SAAA,CAAAA,EAAAA,IAAC,KAAE,UAAU,uCAAwC,WAAawK,EAAK,WAAW,MAAM,EAAE,EAC1FxK,EAAAA,IAAC,IAAA,CAAE,UAAU,oCAAoC,SAAA,QAAA,CAAM,CAAA,CAAA,CACzD,CAAA,EACF,EACAQ,EAAAA,KAAC,MAAA,CAAI,UAAU,6CACb,SAAA,CAAAR,MAAC,KAAE,UAAU,yCAA0C,SAAA0C,GAAW8H,EAAK,UAAU,EAAE,EACnFxK,EAAAA,IAAC,IAAA,CAAE,UAAU,oCAAoC,SAAA,gBAAA,CAAc,CAAA,CAAA,CACjE,CAAA,EACF,EAIFQ,EAAAA,KAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAR,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,UAAO,QAC9C,IAAA,CAAE,UAAU,kBAAmB,SAAAsG,GAAWkE,EAAK,SAAS,CAAA,CAAE,CAAA,EAC7D,EACCA,EAAK,WAAahK,EAAAA,KAAC,MAAA,CAAI,SAAA,CAAAR,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,UAAO,QAAQ,IAAA,CAAE,UAAU,kBAAmB,SAAAsG,GAAWkE,EAAK,SAAS,CAAA,CAAE,CAAA,EAAI,EAC5IA,EAAK,aAAehK,EAAAA,KAAC,MAAA,CAAI,SAAA,CAAAR,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,YAAS,QAAQ,IAAA,CAAE,UAAU,kBAAmB,SAAAsG,GAAWkE,EAAK,WAAW,CAAA,CAAE,CAAA,EAAI,EAClJA,EAAK,SAAW,WAAa5I,UAAY,MAAA,CAAI,SAAA,CAAA5B,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,UAAO,EAAOA,EAAAA,IAAC,IAAA,CAAE,UAAU,iBAAkB,SAAA4B,CAAA,CAAQ,CAAA,CAAA,CAAI,CAAA,EACjJ,GAGE8M,GAAcnO,EAAS,OAAS,GAAK8R,EAAK,OAAS,IACnD7R,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,qEAAqE,SAAA,eAAY,EACjG0O,GACClO,EAAAA,KAAC,MAAA,CAAI,UAAU,kCACb,SAAA,CAAAR,EAAAA,IAAC8L,GAAA,CAAU,UAAU,+BAAA,CAAgC,EACrD9L,EAAAA,IAAC,OAAA,CAAK,UAAU,wBAAwB,SAAA,UAAO,EAC/CA,MAAC,QAAK,UAAU,2BAA4B,WAAS0O,EAAW,KAAM,EAAE,CAAA,CAAE,CAAA,EAC5E,EAED2D,EAAK,OAAS,GACb7R,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAR,EAAAA,IAAC,OAAA,CAAK,UAAU,oCAAoC,SAAA,cAAW,EAC9DqS,EAAK,IAAI7N,GACRhE,EAAAA,KAAC,MAAA,CAAe,UAAU,uCACxB,SAAA,CAAAR,EAAAA,IAACd,GAAA,CAAM,UAAU,sCAAA,CAAuC,EACxDc,EAAAA,IAAC,OAAA,CAAK,UAAWE,EAAG,WAAYsE,EAAE,SAAW,OAAS,gCAAkC,oBAAoB,EAAI,SAAAc,EAASd,EAAE,KAAM,EAAE,EAAE,QACpIe,EAAA,CAAM,QAAQ,YAAY,UAAU,wBAAyB,WAAE,MAAA,CAAO,CAAA,CAAA,EAH/Df,EAAE,EAIZ,CACD,CAAA,EACH,EAEDjE,EAAS,OAAS,GACjBC,EAAAA,KAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,KAAC,OAAA,CAAK,UAAU,oCAAoC,SAAA,CAAA,aAAWD,EAAS,OAAO,IAAA,EAAE,EAChFA,EAAS,IAAI6S,GACZ5S,EAAAA,KAAC,MAAA,CAAgB,UAAU,uCACzB,SAAA,CAAAR,EAAAA,IAAC2N,GAAA,CAAa,UAAU,sCAAA,CAAuC,EAC/D3N,EAAAA,IAAC,QAAK,UAAU,8BAA+B,WAASoT,EAAG,KAAM,EAAE,EAAE,QACpE7N,EAAA,CAAM,QAAQ,YAAY,UAAU,wBAAyB,WAAG,MAAA,CAAO,CAAA,CAAA,EAHhE6N,EAAG,EAIb,CACD,CAAA,CAAA,CACH,CAAA,EAEJ,EAID5I,EAAK,QACJhK,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,qEAAqE,SAAA,SAAM,EAC5FA,EAAAA,IAAC,MAAA,CAAI,UAAU,2DACb,SAAAA,EAAAA,IAACyL,GAAA,CAAiB,QAASjB,EAAK,OAAQ,UAAU,kCAAA,CAAmC,CAAA,CACvF,CAAA,EACF,EAIDA,EAAK,OACJhK,EAAAA,KAAC,MAAA,CACC,SAAA,CAAAR,EAAAA,IAAC,QAAA,CAAM,UAAU,qEAAqE,SAAA,QAAK,EAC3FA,EAAAA,IAAC,MAAA,CAAI,UAAU,qGAAsG,WAAK,KAAA,CAAM,CAAA,CAAA,CAClI,CAAA,EAEJ,EAIDqR,IAAQ,YACP7Q,OAAC,MAAA,CAAI,UAAU,YACX,SAAA,CAAA,CAACgK,EAAK,aAAeA,EAAK,YAAY,SAAW,EACjDxK,EAAAA,IAAC,IAAA,CAAE,UAAU,iDAAiD,SAAA,4DAAA,CAA0D,EAExHA,EAAAA,IAAC,OAAI,UAAU,oFACZ,SAAA,CAAC,GAAGwK,EAAK,WAAW,EAAE,QAAA,EAAU,IAAI,CAAC6I,EAAO7R,IAAM,QACjD,MAAM8R,EACJD,EAAM,OAAS,UAAY,KAC3BA,EAAM,OAAS,WAAa,KAC5BA,EAAM,OAAS,WAAa,KAC5BA,EAAM,OAAS,YAAc,KAC7BA,EAAM,OAAS,YAAc,IAC7BA,EAAM,OAAS,SAAW,IAC1BA,EAAM,OAAS,WAAa,IAAM,IAC9BE,EACJF,EAAM,OAAS,YAAc,mBAC7BA,EAAM,OAAS,SAAW,eAC1BA,EAAM,OAAS,WAAa,iBAC5BA,EAAM,OAAS,WAAa,kBAC5BA,EAAM,OAAS,WAAa,kBAC5B,wBACF,OACE7S,EAAAA,KAAC,MAAA,CAAY,UAAU,WACrB,SAAA,CAAAR,EAAAA,IAAC,MAAA,CAAI,UAAU,2FAAA,CAA4F,EAC3GQ,EAAAA,KAAC,MAAA,CAAI,UAAU,yBACb,SAAA,CAAAR,EAAAA,IAAC,OAAA,CAAK,UAAU,mBAAoB,SAAAsT,EAAK,EACzC9S,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACb,SAAA,CAAAR,EAAAA,IAAC,KAAE,UAAWE,EAAG,0BAA2BqT,CAAK,EAAI,WAAM,QAAQ,IAClElN,GAAAgN,EAAM,OAAN,YAAAhN,GAAY,QACXrG,EAAAA,IAAC,MAAA,CAAI,UAAU,SACX,SAAAqT,EAAM,KAAK,MAAmB,MAAM,EAAG,CAAC,EAAE,IAAI,CAACpE,GAAGuE,IAClDxT,EAAAA,IAAC,IAAA,CAAW,UAAU,0DAA2D,SAAAiP,GAAE,MAAM,GAAG,EAAE,IAAA,CAAI,EAA1FuE,CAA4F,CACrG,CAAA,CACH,CAAA,EAEJ,QACC,OAAA,CAAK,UAAU,4DAA6D,SAAA3Q,GAAQwQ,EAAM,SAAS,CAAA,CAAE,CAAA,CAAA,CACxG,CAAA,CAAA,EAfQ7R,CAgBV,CAEJ,CAAC,CAAA,CACH,EAEDgJ,EAAK,SAAW,WACfhK,EAAAA,KAAC,MAAA,CAAI,UAAU,yDACb,SAAA,CAAAR,EAAAA,IAAC,MAAA,CAAI,UAAU,iDAAA,CAAkD,EACjEA,EAAAA,IAAC,OAAA,CAAK,UAAU,4BAA4B,SAAA,sBAAmB,EAC9DwK,EAAK,UAAYxK,EAAAA,IAAC,QAAK,UAAU,mEAAoE,WAAK,QAAA,CAAS,CAAA,CAAA,CACtH,CAAA,EAEJ,EAIDqR,IAAQ,YACP7Q,OAAC,MAAA,CAAI,UAAU,YACX,SAAA,IAAAiT,GAAAjJ,EAAK,WAAL,YAAAiJ,GAAe,SAAU,KAAO,SAC/B,IAAA,CAAE,UAAU,iDAAiD,SAAA,wCAAA,CAAsC,GAErGC,GAAAlJ,EAAK,WAAL,YAAAkJ,GAAe,IAAKC,GACnBnT,EAAAA,KAAC,OAAqB,UAAWN,EAC/B,mCACAyT,EAAQ,SAAW,QAAU,4CAA8C,qCAAA,EAE3E,SAAA,CAAAnT,EAAAA,KAAC,MAAA,CAAI,UAAU,oCACb,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAR,EAAAA,IAAC,OAAA,CAAK,UAAWE,EAAG,sBAAuByT,EAAQ,SAAW,QAAU,iBAAmB,iBAAiB,EACzG,SAAAA,EAAQ,UAAA,CACX,QACC,OAAA,CAAK,UAAU,oCAAqC,SAAA9Q,GAAQ8Q,EAAQ,SAAS,CAAA,CAAE,CAAA,EAClF,EACA3T,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMyS,EAAoBkB,EAAQ,EAAE,EAAG,UAAU,8CAChE,SAAA3T,MAACW,GAAA,CAAE,UAAU,UAAU,CAAA,CACzB,CAAA,EACF,EACAX,EAAAA,IAAC,IAAA,CAAE,UAAU,iDAAkD,WAAQ,OAAA,CAAQ,CAAA,GAfvE2T,EAAQ,EAgBlB,GAIFnT,EAAAA,KAAC,MAAA,CAAI,UAAU,4CACb,SAAA,CAAAR,EAAAA,IAAC6G,GAAA,CACC,MAAO8K,EACP,SAAWlN,GAAMmN,EAAenN,EAAE,OAAO,KAAK,EAC9C,YAAY,qBACZ,KAAM,EACN,UAAU,iBACV,UAAYA,GAAM,CAAMA,EAAE,MAAQ,UAAYA,EAAE,SAAWA,EAAE,UAAU+N,GAAA,CAAoB,CAAA,CAAA,EAE7FxS,EAAAA,IAAC8E,EAAA,CACC,KAAK,KAAK,QAAS0N,GAAkB,SAAU,CAACb,EAAY,KAAA,GAAUE,EACtE,UAAU,qEAET,SAAAA,QAAqB7K,GAAA,CAAQ,UAAU,2BAA2B,EAAKhH,EAAAA,IAACoR,GAAA,CAAK,UAAU,aAAA,CAAc,CAAA,CAAA,CACxG,CAAA,CACF,CAAA,EACF,EAIDC,IAAQ,eACPrR,EAAAA,IAAC4T,IAAe,KAAApJ,EAAY,QAAAxH,EAAkB,SAAU8P,GAAwB,EAIlFtS,EAAAA,KAAC,MAAA,CAAI,UAAU,sDACX,SAAA,EAAAgK,EAAK,SAAW,WAAaA,EAAK,SAAW,UAAYA,EAAK,SAAW,WACzEhK,EAAAA,KAACsE,GAAO,KAAK,KAAK,UAAU,wDAAwD,QAAS,IAAM,CAAEiI,EAAMvC,EAAK,EAAE,EAAG0E,EAAa,EAAK,CAAG,EACxI,SAAA,CAAAlP,EAAAA,IAAC+L,GAAA,CAAK,UAAU,aAAA,CAAc,EAAE,IAAEvB,EAAK,SAAW,SAAW,QAAU,KAAA,EACzE,EAEDA,EAAK,SAAW,WACfhK,EAAAA,KAACsE,EAAA,CAAO,KAAK,KAAK,QAAQ,cAAc,UAAU,UAAU,QAAS,IAAM,CAAEkI,EAAOxC,EAAK,EAAE,EAAG0E,EAAa,EAAK,CAAG,EACjH,SAAA,CAAAlP,EAAAA,IAACX,GAAA,CAAO,UAAU,aAAA,CAAc,EAAE,OAAA,EACpC,SAEDsG,GAAA,CACC,SAAA,CAAA3F,EAAAA,IAAC4F,GAAA,CAAmB,QAAO,GACzB,SAAApF,EAAAA,KAACsE,EAAA,CAAO,KAAK,KAAK,QAAQ,QAAQ,UAAU,0CAA0C,SAAA,CAAA9E,EAAAA,IAAC6F,GAAA,CAAO,UAAU,aAAA,CAAc,EAAE,SAAA,CAAA,CAAO,CAAA,CACjI,SACCC,GAAA,CACC,SAAA,CAAAtF,OAACuF,GAAA,CACC,SAAA,CAAA/F,EAAAA,IAACgG,IAAiB,SAAA,cAAA,CAAY,EAC9BhG,EAAAA,IAACiG,IAAuB,SAAA,wCAAA,CAAsC,CAAA,EAChE,SACCC,GAAA,CACC,SAAA,CAAAlG,EAAAA,IAACmG,IAAkB,SAAA,QAAA,CAAM,EACzBnG,EAAAA,IAACoG,GAAA,CAAkB,UAAU,8BAA8B,QAAS,IAAM,CAAE6G,EAASzC,EAAK,EAAE,EAAG0E,EAAa,EAAK,CAAG,EAAG,SAAA,QAAA,CAAM,CAAA,CAAA,CAC/H,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,CAEJ,CAMA,SAAS0E,GAAe,CAAE,KAAApJ,EAAM,QAAAxH,EAAS,SAAAiK,GAAkF,SACzH,KAAM,CAAC4G,EAAWC,CAAY,EAAIhS,EAAAA,SAAwB,IAAI,EACxD,CAACiS,EAAgBC,CAAiB,EAAIlS,EAAAA,SAAiB,EAAE,EACzD,CAACmS,EAAgBC,CAAiB,EAAIpS,EAAAA,SAAS,EAAK,EAEpDqS,EAAgB,MAAOC,GAAwB,CACnD,GAAIP,IAAcO,EAAI,GAAI,CAAEN,EAAa,IAAI,EAAG,MAAQ,CACxDA,EAAaM,EAAI,EAAE,EACnBF,EAAkB,EAAI,EACtB,GAAI,CACF,MAAMjL,EAAO,MAAM1E,EAAI,OAAO,MAAM,YAAY,QAAQvB,EAASwH,EAAK,GAAI4J,EAAI,EAAE,EAChFJ,EAAkB/K,EAAK,OAAO,CAChC,MAAQ,CAAE+K,EAAkB,8BAA8B,CAAG,QAAA,CACnDE,EAAkB,EAAK,CAAG,CACtC,EAEMG,EAAkBD,GAAwB,CAC9C,MAAME,EAAM/P,EAAI,OAAO,MAAM,YAAY,YAAYvB,EAASwH,EAAK,GAAI4J,EAAI,EAAE,EACvEG,EAAI,SAAS,cAAc,GAAG,EACpCA,EAAE,KAAOD,EACTC,EAAE,SAAWH,EAAI,KACjBG,EAAE,MAAA,CACJ,EAEA,OACE/T,EAAAA,KAAC,MAAA,CAAI,UAAU,YACX,SAAA,IAAA6F,EAAAmE,EAAK,cAAL,YAAAnE,EAAkB,SAAU,KAAO,SAClC,IAAA,CAAE,UAAU,iDAAiD,SAAA,oEAAA,CAAkE,GAEjIwI,EAAArE,EAAK,cAAL,YAAAqE,EAAkB,IAAKuF,GAAQ,CAC9B,MAAMI,EAAOnT,GAAiB+S,EAAI,IAAI,GAAKjV,GACrCsV,EAAgBL,EAAI,OAAS,YAAcA,EAAI,OAAS,WACxDM,EAAUN,EAAI,OAAS,QACvBO,EAASd,IAAcO,EAAI,GAEjC,OACE5T,EAAAA,KAAC,MAAA,CAAiB,UAAU,iEAC1B,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,8BACb,SAAA,CAAAR,MAAC,OAAI,UAAWE,EACd,+DACAkU,EAAI,OAAS,WAAa,qCAC1BA,EAAI,OAAS,QAAU,mCACvB,gCAAA,EAEA,SAAApU,EAAAA,IAACwU,EAAA,CAAK,UAAU,UAAU,EAC5B,EACAhU,EAAAA,KAAC,MAAA,CAAI,UAAU,iBACb,SAAA,CAAAR,EAAAA,IAAC,IAAA,CAAE,UAAU,+CAAgD,SAAAoU,EAAI,KAAK,EACtE5T,EAAAA,KAAC,MAAA,CAAI,UAAU,4DACb,SAAA,CAAAR,EAAAA,IAAC,OAAA,CAAK,UAAU,aAAc,SAAAoU,EAAI,KAAK,EACtCA,EAAI,MAAQ,MAAQ5T,EAAAA,KAAC,OAAA,CAAO,SAAA,EAAA4T,EAAI,KAAO,MAAM,QAAQ,CAAC,EAAE,KAAA,EAAG,EAC5DpU,EAAAA,IAAC,OAAA,CAAM,SAAA6C,GAAQuR,EAAI,OAAO,EAAE,SAC3B,OAAA,CAAK,SAAA,CAAA,MAAIA,EAAI,OAAA,CAAA,CAAQ,CAAA,CAAA,CACxB,CAAA,EACF,EACA5T,EAAAA,KAAC,MAAA,CAAI,UAAU,mCACX,SAAA,EAAAiU,GAAiBC,IACjB1U,EAAAA,IAAC,SAAA,CACC,QAAS,IAAMmU,EAAcC,CAAG,EAChC,UAAWlU,EAAG,qCAAsCyU,EAAS,iCAAmC,gDAAgD,EAChJ,MAAM,UAEN,SAAA3U,EAAAA,IAAC4U,GAAA,CAAI,UAAU,aAAA,CAAc,CAAA,CAAA,EAGjC5U,EAAAA,IAAC,SAAA,CAAO,QAAS,IAAMqU,EAAeD,CAAG,EAAG,UAAU,uDAAuD,MAAM,WACjH,SAAApU,MAAC6U,GAAA,CAAS,UAAU,cAAc,EACpC,QACC,SAAA,CAAO,QAAS,IAAM5H,EAASmH,EAAI,EAAE,EAAG,UAAU,oDAAoD,MAAM,SAC3G,SAAApU,EAAAA,IAAC6F,GAAA,CAAO,UAAU,cAAc,CAAA,CAClC,CAAA,CAAA,CACF,CAAA,EACF,EAGC8O,SACE,MAAA,CAAI,UAAU,6CACZ,SAAAV,EACCjU,EAAAA,IAAC,OAAI,UAAU,2BAA2B,eAACgH,GAAA,CAAQ,UAAU,sCAAsC,CAAA,CAAE,EACnG0N,EACF1U,EAAAA,IAAC,MAAA,CAAI,UAAU,MACb,SAAAA,EAAAA,IAAC,MAAA,CACC,IAAKuE,EAAI,OAAO,MAAM,YAAY,YAAYvB,EAASwH,EAAK,GAAI4J,EAAI,EAAE,EACtE,IAAKA,EAAI,KACT,UAAU,wCAAA,CAAA,EAEd,EAEApU,EAAAA,IAAC,MAAA,CAAI,UAAU,+BACb,SAAAA,EAAAA,IAAC,MAAA,CAAI,UAAU,sDACb,eAACyL,GAAA,CAAiB,QAASsI,CAAA,CAAgB,EAC7C,EACF,CAAA,CAEJ,CAAA,CAAA,EA1DMK,EAAI,EA4Dd,CAEJ,EAAC,EACH,CAEJ,CAGA,SAAS3I,GAAiB,CAAE,QAAAqJ,GAAgC,CAC1D,MAAMC,EAAQD,EAAQ,MAAM;AAAA,CAAI,EAC1BE,EAA0B,CAAA,EAChC,IAAIC,EAAc,GACdC,EAAsB,CAAA,EAG1B,QAAS1T,EAAI,EAAGA,EAAIuT,EAAM,OAAQvT,IAAK,CACrC,MAAM2T,EAAOJ,EAAMvT,CAAC,EAEpB,GAAI2T,EAAK,WAAW,KAAK,EAAG,CACtBF,GACFD,EAAS,KACPhV,EAAAA,IAAC,MAAA,CAAY,UAAU,qEACrB,SAAAA,EAAAA,IAAC,OAAA,CAAM,SAAAkV,EAAU,KAAK;AAAA,CAAI,CAAA,CAAE,CAAA,EADpB1T,CAEV,CAAA,EAEF0T,EAAY,CAAA,EACZD,EAAc,KAEdA,EAAc,GACHE,EAAK,MAAM,CAAC,EAAE,KAAA,GAE3B,QACF,CAEA,GAAIF,EAAa,CACfC,EAAU,KAAKC,CAAI,EACnB,QACF,CAEIA,EAAK,WAAW,IAAI,EACtBH,EAAS,KAAKhV,EAAAA,IAAC,KAAA,CAAW,UAAU,8BAA+B,SAAAoV,EAAaD,EAAK,MAAM,CAAC,CAAC,CAAA,EAAtE3T,CAAwE,CAAK,EAC3F2T,EAAK,WAAW,KAAK,EAC9BH,EAAS,KAAKhV,EAAAA,IAAC,KAAA,CAAW,UAAU,oCAAqC,SAAAoV,EAAaD,EAAK,MAAM,CAAC,CAAC,CAAA,EAA5E3T,CAA8E,CAAK,EACjG2T,EAAK,WAAW,MAAM,EAC/BH,EAAS,KAAKhV,EAAAA,IAAC,KAAA,CAAW,UAAU,oCAAqC,SAAAoV,EAAaD,EAAK,MAAM,CAAC,CAAC,CAAA,EAA5E3T,CAA8E,CAAK,EACjG2T,EAAK,WAAW,IAAI,GAAKA,EAAK,WAAW,IAAI,EACtDH,EAAS,KAAKhV,EAAAA,IAAC,KAAA,CAAW,UAAU,oCAAqC,SAAAoV,EAAaD,EAAK,MAAM,CAAC,CAAC,CAAA,EAA5E3T,CAA8E,CAAK,EACjG,WAAW,KAAK2T,CAAI,EAC7BH,EAAS,KAAKhV,EAAAA,IAAC,KAAA,CAAW,UAAU,uCAAwC,SAAAoV,EAAaD,EAAK,QAAQ,WAAY,EAAE,CAAC,CAAA,EAA9F3T,CAAgG,CAAK,EACnH2T,EAAK,WAAW,IAAI,EAC7BH,EAAS,KAAKhV,EAAAA,IAAC,aAAA,CAAmB,UAAU,wEAAyE,SAAAoV,EAAaD,EAAK,MAAM,CAAC,CAAC,CAAA,EAAhH3T,CAAkH,CAAa,EACrJ2T,EAAK,KAAA,IAAW,GACzBH,EAAS,KAAKhV,EAAAA,IAAC,MAAA,CAAY,UAAU,KAAA,EAAbwB,CAAmB,CAAE,EAE7CwT,EAAS,WAAM,IAAA,CAAU,UAAU,4BAA6B,SAAAI,EAAaD,CAAI,CAAA,EAA3D3T,CAA6D,CAAI,CAE3F,CAGA,OAAIyT,GAAeC,EAAU,OAAS,GACpCF,EAAS,KACPhV,EAAAA,IAAC,MAAA,CAAmB,UAAU,qEAC5B,SAAAA,EAAAA,IAAC,OAAA,CAAM,SAAAkV,EAAU,KAAK;AAAA,CAAI,CAAA,CAAE,CAAA,EADrB,UAET,CAAA,oBAIM,SAAAF,CAAA,CAAS,CACrB,CAEA,SAASI,EAAaC,EAA+B,CAEnD,MAAMC,EAA2B,CAAA,EACjC,IAAIC,EAAYF,EACZG,EAAM,EAEV,KAAOD,EAAU,OAAS,GAAG,CAE3B,MAAME,EAAYF,EAAU,MAAM,iBAAiB,EACnD,GAAIE,EAAW,CACTA,EAAU,CAAC,GAAGH,EAAM,KAAKtV,EAAAA,IAAC,OAAA,CAAkB,SAAAyV,EAAU,CAAC,CAAA,EAAnBD,GAAqB,CAAO,EACpEF,EAAM,WAAM,OAAA,CAAiB,UAAU,oEAAqE,SAAAG,EAAU,CAAC,GAAjGD,GAAmG,CAAO,EAChID,EAAYA,EAAU,MAAME,EAAU,CAAC,EAAE,MAAM,EAC/C,QACF,CAGA,MAAMC,EAAYH,EAAU,MAAM,uBAAuB,EACzD,GAAIG,EAAW,CACTA,EAAU,CAAC,GAAGJ,EAAM,KAAKtV,EAAAA,IAAC,OAAA,CAAkB,SAAA0V,EAAU,CAAC,CAAA,EAAnBF,GAAqB,CAAO,EACpEF,EAAM,KAAKtV,MAAC,SAAA,CAAoB,WAAU,CAAC,CAAA,EAAnBwV,GAAqB,CAAS,EACtDD,EAAYA,EAAU,MAAMG,EAAU,CAAC,EAAE,MAAM,EAC/C,QACF,CAGAJ,EAAM,KAAKtV,EAAAA,IAAC,OAAA,CAAkB,SAAAuV,CAAA,EAARC,GAAkB,CAAO,EAC/C,KACF,CAEA,yBAAU,SAAAF,CAAA,CAAM,CAClB","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
|