@ottocode/web-ui 0.1.199 → 0.1.200
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import"https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600;700&display=swap";*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:IBM Plex Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:IBM Plex Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 220 25% 95%;--foreground: 220 10% 15%;--card: 220 25% 98%;--card-foreground: 220 10% 15%;--popover: 220 25% 98%;--popover-foreground: 220 10% 15%;--primary: 222.2 47.4% 11.2%;--primary-foreground: 210 40% 98%;--secondary: 220 18% 88%;--secondary-foreground: 222.2 35% 25%;--muted: 220 18% 88%;--muted-foreground: 220 15% 40%;--accent: 220 20% 86%;--accent-foreground: 222.2 35% 25%;--destructive: 0 90% 65%;--destructive-foreground: 210 40% 98%;--border: 220 15% 89%;--input: 220 15% 89%;--ring: 222.2 84% 4.9%;--chart-1: 222.2 47.4% 41.2%;--chart-2: 173 58% 39%;--chart-3: 197 37% 24%;--chart-4: 43 74% 66%;--chart-5: 27 87% 67%;--radius: .5rem;--sidebar-background: 220 25% 91%;--sidebar-foreground: 220 10% 15%;--sidebar-primary: 222.2 47.4% 11.2%;--sidebar-primary-foreground: 210 40% 98%;--sidebar-accent: 220 20% 86%;--sidebar-accent-foreground: 222.2 35% 25%;--sidebar-border: 220 15% 89%;--sidebar-ring: 222.2 84% 4.9%;--code-background: hsl(220 25% 93%);--code-foreground: hsl(220 10% 10%);--code-keyword: hsl(300 85% 42%);--code-class: hsl(120 60% 35%);--code-function: hsl(220 95% 45%);--code-string: hsl(120 60% 35%);--code-comment: hsl(220 15% 35%);--code-operator: hsl(180 85% 30%);--code-punctuation: hsl(220 15% 20%);color-scheme:light}.dark{--background: 240 10% 8%;--foreground: 0 0% 98%;--card: 240 10% 10%;--card-foreground: 0 0% 98%;--popover: 240 10% 10%;--popover-foreground: 0 0% 98%;--primary: 0 0% 98%;--primary-foreground: 240 5.9% 10%;--secondary: 240 3.7% 15.9%;--secondary-foreground: 0 0% 98%;--muted: 240 3.7% 15.9%;--muted-foreground: 240 5% 64.9%;--accent: 240 3.7% 15.9%;--accent-foreground: 0 0% 98%;--destructive: 0 75% 45%;--destructive-foreground: 0 0% 98%;--border: 240 3.7% 15.9%;--input: 240 3.7% 15.9%;--ring: 240 4.9% 83.9%;--chart-1: 220 70% 50%;--chart-2: 160 60% 45%;--chart-3: 30 80% 55%;--chart-4: 280 65% 60%;--chart-5: 340 75% 55%;--radius: .5rem;--sidebar-background: 240 10% 10%;--sidebar-foreground: 0 0% 98%;--sidebar-primary: 217.2 91.2% 59.8%;--sidebar-primary-foreground: 240 5.9% 10%;--sidebar-accent: 240 3.7% 15.9%;--sidebar-accent-foreground: 0 0% 98%;--sidebar-border: 240 3.7% 15.9%;--sidebar-ring: 217.2 91.2% 59.8%;--code-background: hsl(240 10% 10%);--code-foreground: hsl(0 0% 98%);--code-keyword: #c678dd;--code-class: #98c379;--code-function: #61afef;--code-string: #98c379;--code-comment: hsl(240 5% 64.9%);--code-operator: #56b6c2;--code-punctuation: hsl(240 5% 64.9%);color-scheme:dark}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{left:0;right:0}.-bottom-1{bottom:-.25rem}.-top-1{top:-.25rem}.-top-6{top:-1.5rem}.bottom-0{bottom:0}.bottom-24{bottom:6rem}.bottom-36{bottom:9rem}.bottom-4{bottom:1rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:.75rem}.left-4{left:1rem}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-4{right:1rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-4{top:1rem}.top-full{top:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[9999\]{z-index:9999}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.-mt-0\.5{margin-top:-.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-5{margin-left:1.25rem}.ml-6{margin-left:1.5rem}.ml-7{margin-left:1.75rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[136px\]{height:136px}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[120px\]{max-height:120px}.max-h-\[200px\]{max-height:200px}.max-h-\[300px\]{max-height:300px}.max-h-\[30rem\]{max-height:30rem}.max-h-\[70vh\]{max-height:70vh}.max-h-full{max-height:100%}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-\[110px\]{min-height:110px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[136px\]{width:136px}.w-\[2px\]{width:2px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[100px\]{min-width:100px}.min-w-\[120px\]{min-width:120px}.min-w-\[160px\]{min-width:160px}.min-w-\[60px\]{min-width:60px}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-32{max-width:8rem}.max-w-3xl{max-width:48rem}.max-w-40{max-width:10rem}.max-w-48{max-width:12rem}.max-w-7xl{max-width:80rem}.max-w-\[120px\]{max-width:120px}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[calc\(100\%-3rem\)\]{max-width:calc(100% - 3rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-full{--tw-translate-y: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1{--tw-translate-x: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-6{--tw-translate-x: 1.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.divide-border\/50>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:.75rem}.rounded-bl-md{border-bottom-left-radius:calc(var(--radius) - 2px)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-r-2{border-right-width:2px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[hsl\(var\(--border\)\)\]{border-color:hsl(var(--border))}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-blue-500\/30{border-color:#3b82f64d}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-destructive\/30{border-color:hsl(var(--destructive) / .3)}.border-emerald-500\/20{border-color:#10b98133}.border-emerald-500\/30{border-color:#10b9814d}.border-emerald-500\/50{border-color:#10b98180}.border-foreground{border-color:hsl(var(--foreground))}.border-green-500\/20{border-color:#22c55e33}.border-muted-foreground\/30{border-color:hsl(var(--muted-foreground) / .3)}.border-primary{border-color:hsl(var(--primary))}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-500\/20{border-color:#ef444433}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/50{border-color:#ef444480}.border-ring{border-color:hsl(var(--ring))}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-teal-500\/30{border-color:#14b8a64d}.border-violet-500{--tw-border-opacity: 1;border-color:rgb(139 92 246 / var(--tw-border-opacity, 1))}.border-violet-500\/30{border-color:#8b5cf64d}.border-violet-500\/50{border-color:#8b5cf680}.bg-\[hsl\(var\(--accent\)\)\]{background-color:hsl(var(--accent))}.bg-\[hsl\(var\(--muted\)\)\]{background-color:hsl(var(--muted))}.bg-\[hsl\(var\(--popover\)\)\]{background-color:hsl(var(--popover))}.bg-\[hsl\(var\(--secondary\)\)\]{background-color:hsl(var(--secondary))}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/50{background-color:hsl(var(--accent) / .5)}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/90{background-color:#f59e0be6}.bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.bg-background{background-color:hsl(var(--background))}.bg-background\/50{background-color:hsl(var(--background) / .5)}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-background\/95{background-color:hsl(var(--background) / .95)}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-black\/80{background-color:#000c}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/60{background-color:hsl(var(--card) / .6)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/20{background-color:#10b98133}.bg-emerald-500\/5{background-color:#10b9810d}.bg-foreground{background-color:hsl(var(--foreground))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/90{background-color:#22c55ee6}.bg-green-600\/20{background-color:#16a34a33}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground\/20{background-color:hsl(var(--muted-foreground) / .2)}.bg-muted\/10{background-color:hsl(var(--muted) / .1)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-orange-50{--tw-bg-opacity: 1;background-color:rgb(255 247 237 / var(--tw-bg-opacity, 1))}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary-foreground{background-color:hsl(var(--primary-foreground))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-purple-600\/20{background-color:#9333ea33}.bg-red-100\/50{background-color:#fee2e280}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-teal-500{--tw-bg-opacity: 1;background-color:rgb(20 184 166 / var(--tw-bg-opacity, 1))}.bg-teal-500\/10{background-color:#14b8a61a}.bg-teal-500\/5{background-color:#14b8a60d}.bg-transparent{background-color:transparent}.bg-violet-500\/10{background-color:#8b5cf61a}.bg-violet-500\/20{background-color:#8b5cf633}.bg-violet-600{--tw-bg-opacity: 1;background-color:rgb(124 58 237 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-background{--tw-gradient-from: hsl(var(--background)) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--background) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-background{--tw-gradient-to: hsl(var(--background) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), hsl(var(--background)) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-32{padding-bottom:8rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-64{padding-bottom:16rem}.pb-8{padding-bottom:2rem}.pl-1{padding-left:.25rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:IBM Plex Mono,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[hsl\(var\(--accent-foreground\)\)\]{color:hsl(var(--accent-foreground))}.text-\[hsl\(var\(--foreground\)\)\]{color:hsl(var(--foreground))}.text-\[hsl\(var\(--muted-foreground\)\)\]{color:hsl(var(--muted-foreground))}.text-\[hsl\(var\(--muted-foreground\)\)\]\/50{color:hsl(var(--muted-foreground) / .5)}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-background{color:hsl(var(--background))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-cyan-700{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-destructive\/80{color:hsl(var(--destructive) / .8)}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/60{color:hsl(var(--foreground) / .6)}.text-foreground\/70{color:hsl(var(--foreground) / .7)}.text-foreground\/80{color:hsl(var(--foreground) / .8)}.text-foreground\/85{color:hsl(var(--foreground) / .85)}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-600\/40{color:#16a34a66}.text-green-600\/60{color:#16a34a99}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-indigo-600{--tw-text-opacity: 1;color:rgb(79 70 229 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/30{color:hsl(var(--muted-foreground) / .3)}.text-muted-foreground\/40{color:hsl(var(--muted-foreground) / .4)}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/65{color:hsl(var(--muted-foreground) / .65)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-muted-foreground\/75{color:hsl(var(--muted-foreground) / .75)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity, 1))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.text-teal-500{--tw-text-opacity: 1;color:rgb(20 184 166 / var(--tw-text-opacity, 1))}.text-teal-600{--tw-text-opacity: 1;color:rgb(13 148 136 / var(--tw-text-opacity, 1))}.text-violet-500{--tw-text-opacity: 1;color:rgb(139 92 246 / var(--tw-text-opacity, 1))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.placeholder-\[hsl\(var\(--muted-foreground\)\)\]::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder-\[hsl\(var\(--muted-foreground\)\)\]::placeholder{color:hsl(var(--muted-foreground))}.placeholder-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.caret-\[6px\]{caret-color:6px}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-inset{--tw-ring-inset: inset}.ring-primary\/40{--tw-ring-color: hsl(var(--primary) / .4)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-\[grid-template-rows\]{transition-property:grid-template-rows;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.touch-manipulation{touch-action:manipulation}.safe-area-inset-bottom{padding-bottom:env(safe-area-inset-bottom)}.\[word-break\:break-word\]{word-break:break-word}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.animate-shimmer{animation:shimmer 2s ease-in-out infinite}body{margin:0;font-family:IBM Plex Mono,monospace;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:hsl(var(--background));color:hsl(var(--foreground));overflow:hidden;position:fixed;width:100%;height:100%;-webkit-overflow-scrolling:touch}html{overflow:hidden;position:fixed;width:100%;height:100%}code{font-family:IBM Plex Mono,monospace;color:var(--code-foreground)}button:focus,button:focus-visible{outline:none;box-shadow:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.markdown-content{max-width:100%;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}.markdown-content h1{font-size:1.875rem;font-weight:700;margin-top:1.5rem;margin-bottom:1rem;line-height:1.2}.markdown-content h2{font-size:1.5rem;font-weight:600;margin-top:1.5rem;margin-bottom:.75rem;line-height:1.3}.markdown-content h3{font-size:1.25rem;font-weight:600;margin-top:1.25rem;margin-bottom:.5rem;line-height:1.4}.markdown-content h4{font-size:1.125rem;font-weight:600;margin-top:1rem;margin-bottom:.5rem;line-height:1.4}.markdown-content p{margin-top:.75rem;margin-bottom:.75rem}.markdown-content ul,.markdown-content ol{margin-top:.75rem;margin-bottom:.75rem;padding-left:1.5rem}.markdown-content li{margin-top:.25rem;margin-bottom:.25rem}.markdown-content pre{background-color:var(--code-background);border:1px solid hsl(var(--border));border-radius:.5rem;padding:1rem;margin-top:.75rem;margin-bottom:.75rem;overflow-x:auto;color:var(--code-foreground);max-width:100%}.markdown-content code{background-color:var(--code-background);border:1px solid hsl(var(--border));border-radius:.25rem;padding:.125rem .375rem;font-size:.875rem;color:var(--code-foreground);word-break:break-all}.markdown-content pre code{background-color:transparent;border:none;padding:0;font-size:.875rem;color:inherit;word-break:normal;overflow-wrap:normal}.markdown-content blockquote{border-left:4px solid hsl(var(--border));padding-left:1rem;margin-top:.75rem;margin-bottom:.75rem;color:hsl(var(--muted-foreground));font-style:italic}.markdown-content a{color:hsl(var(--primary));text-decoration:underline;word-break:break-word}.markdown-content a:hover{color:hsl(var(--primary) / .85)}.markdown-content strong,.markdown-content b{font-weight:600}.markdown-content em,.markdown-content i{font-style:italic}.markdown-content hr{border:none;border-top:1px solid hsl(var(--border));margin-top:1.5rem;margin-bottom:1.5rem}.markdown-content table{border-collapse:collapse;margin-top:.75rem;margin-bottom:.75rem}.markdown-content th,.markdown-content td{border:1px solid hsl(var(--border));padding:.5rem;text-align:left;word-break:break-word}.markdown-content th{background-color:hsl(var(--muted));font-weight:600}.markdown-content>*:first-child{margin-top:0}.markdown-content>*:last-child{margin-bottom:0}.markdown-content>p:first-child,.markdown-content>ul:first-child,.markdown-content>ol:first-child,.markdown-content>pre:first-child,.markdown-content>blockquote:first-child{margin-top:0}.markdown-content>p:last-child,.markdown-content>ul:last-child,.markdown-content>ol:last-child,.markdown-content>pre:last-child,.markdown-content>blockquote:last-child{margin-bottom:0}.research-messages .markdown-content{font-size:.8125rem;line-height:1.5}.research-messages .markdown-content h1{font-size:1.25rem;margin-top:1rem;margin-bottom:.5rem}.research-messages .markdown-content h2{font-size:1.125rem;margin-top:.875rem;margin-bottom:.375rem}.research-messages .markdown-content h3{font-size:1rem;margin-top:.75rem;margin-bottom:.25rem}.research-messages .markdown-content pre{padding:.625rem;font-size:.75rem}.research-messages .markdown-content code{font-size:.75rem;padding:.0625rem .25rem}.code-with-line-numbers{counter-reset:line-number}.code-with-line-numbers .code-line{counter-increment:line-number;display:flex!important;align-items:flex-start}.code-with-line-numbers .code-line:before{content:counter(line-number);min-width:3em;padding-right:1em;text-align:right;color:hsl(var(--muted-foreground) / .5);font-size:.7rem;flex-shrink:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.focus-within\:border-primary\/60:focus-within{border-color:hsl(var(--primary) / .6)}.focus-within\:border-slate-400:focus-within{--tw-border-opacity: 1;border-color:rgb(148 163 184 / var(--tw-border-opacity, 1))}.focus-within\:border-teal-500\/60:focus-within{border-color:#14b8a699}.focus-within\:ring-1:focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-within\:ring-primary\/40:focus-within{--tw-ring-color: hsl(var(--primary) / .4)}.focus-within\:ring-slate-300:focus-within{--tw-ring-opacity: 1;--tw-ring-color: rgb(203 213 225 / var(--tw-ring-opacity, 1))}.focus-within\:ring-teal-500\/40:focus-within{--tw-ring-color: rgb(20 184 166 / .4)}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-border\/80:hover{border-color:hsl(var(--border) / .8)}.hover\:border-foreground\/40:hover{border-color:hsl(var(--foreground) / .4)}.hover\:bg-\[hsl\(var\(--accent\)\)\]:hover,.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-accent\/50:hover{background-color:hsl(var(--accent) / .5)}.hover\:bg-amber-700:hover{--tw-bg-opacity: 1;background-color:rgb(180 83 9 / var(--tw-bg-opacity, 1))}.hover\:bg-background\/50:hover{background-color:hsl(var(--background) / .5)}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/20:hover{background-color:hsl(var(--destructive) / .2)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/20:hover{background-color:#10b98133}.hover\:bg-foreground\/90:hover{background-color:hsl(var(--foreground) / .9)}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/20:hover{background-color:hsl(var(--muted) / .2)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-muted\/60:hover{background-color:hsl(var(--muted) / .6)}.hover\:bg-muted\/80:hover{background-color:hsl(var(--muted) / .8)}.hover\:bg-primary\/20:hover{background-color:hsl(var(--primary) / .2)}.hover\:bg-primary\/30:hover{background-color:hsl(var(--primary) / .3)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-teal-500\/10:hover{background-color:#14b8a61a}.hover\:bg-teal-600:hover{--tw-bg-opacity: 1;background-color:rgb(13 148 136 / var(--tw-bg-opacity, 1))}.hover\:bg-violet-500\/10:hover{background-color:#8b5cf61a}.hover\:bg-violet-700:hover{--tw-bg-opacity: 1;background-color:rgb(109 40 217 / var(--tw-bg-opacity, 1))}.hover\:bg-white\/20:hover{background-color:#fff3}.hover\:text-amber-600:hover{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.hover\:text-blue-600:hover{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.hover\:text-cyan-600:hover{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.hover\:text-destructive\/80:hover{color:hsl(var(--destructive) / .8)}.hover\:text-emerald-600:hover{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-foreground\/80:hover{color:hsl(var(--foreground) / .8)}.hover\:text-green-600\/80:hover{color:#16a34acc}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-purple-600:hover{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-teal-500:hover{--tw-text-opacity: 1;color:rgb(20 184 166 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:ring-2:hover{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:ring-primary\/50:hover{--tw-ring-color: hsl(var(--primary) / .5)}.focus\:border-foreground\/30:focus{border-color:hsl(var(--foreground) / .3)}.focus\:border-foreground\/40:focus{border-color:hsl(var(--foreground) / .4)}.focus\:border-ring:focus{border-color:hsl(var(--ring))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-\[hsl\(var\(--ring\)\)\]:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-primary:focus{--tw-ring-color: hsl(var(--primary))}.focus\:ring-primary\/50:focus{--tw-ring-color: hsl(var(--primary) / .5)}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.active\:bg-background\/70:active{background-color:hsl(var(--background) / .7)}.active\:bg-primary\/50:active{background-color:hsl(var(--primary) / .5)}.active\:bg-primary\/80:active{background-color:hsl(var(--primary) / .8)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group\/code:hover .group-hover\/code\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.dark\:border-amber-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-blue-500\/20:is(.dark *){border-color:#3b82f633}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-slate-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\:border-violet-500\/20:is(.dark *){border-color:#8b5cf633}.dark\:bg-amber-950\/30:is(.dark *){background-color:#451a034d}.dark\:bg-background:is(.dark *){background-color:hsl(var(--background))}.dark\:bg-blue-500\/5:is(.dark *){background-color:#3b82f60d}.dark\:bg-emerald-500\/10:is(.dark *){background-color:#10b9811a}.dark\:bg-orange-950\/20:is(.dark *){background-color:#43140733}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-red-950\/20:is(.dark *){background-color:#450a0a33}.dark\:bg-slate-900\/40:is(.dark *){background-color:#0f172a66}.dark\:bg-violet-500\/10:is(.dark *){background-color:#8b5cf61a}.dark\:bg-violet-500\/5:is(.dark *){background-color:#8b5cf60d}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-300:is(.dark *){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-foreground\/80:is(.dark *){color:hsl(var(--foreground) / .8)}.dark\:text-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-green-500:is(.dark *){--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.dark\:text-green-500\/40:is(.dark *){color:#22c55e66}.dark\:text-green-500\/60:is(.dark *){color:#22c55e99}.dark\:text-indigo-300:is(.dark *){--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.dark\:text-purple-300:is(.dark *){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-red-500:is(.dark *){--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.dark\:text-teal-300:is(.dark *){--tw-text-opacity: 1;color:rgb(94 234 212 / var(--tw-text-opacity, 1))}.dark\:text-teal-400:is(.dark *){--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-violet-400:is(.dark *){--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.dark\:focus-within\:border-slate-600:focus-within:is(.dark *){--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.dark\:focus-within\:ring-slate-700:focus-within:is(.dark *){--tw-ring-opacity: 1;--tw-ring-color: rgb(51 65 85 / var(--tw-ring-opacity, 1))}.dark\:hover\:text-amber-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:hover\:text-blue-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:hover\:text-cyan-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(165 243 252 / var(--tw-text-opacity, 1))}.dark\:hover\:text-emerald-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:hover\:text-green-500\/80:hover:is(.dark *){color:#22c55ecc}.dark\:hover\:text-purple-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:gap-8{gap:2rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pt-10{padding-top:2.5rem}.sm\:pt-8{padding-top:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:768px){.md\:relative{position:relative}.md\:col-span-2{grid-column:span 2 / span 2}.md\:block{display:block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-auto{height:auto}.md\:w-12{width:3rem}.md\:w-auto{width:auto}.md\:max-w-2xl{max-width:42rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:gap-4{gap:1rem}.md\:gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:pb-6{padding-bottom:1.5rem}.md\:pl-3{padding-left:.75rem}.md\:pr-4{padding-right:1rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:1024px){.lg\:px-12{padding-left:3rem;padding-right:3rem}.lg\:pt-12{padding-top:3rem}.lg\:pt-14{padding-top:3.5rem}.lg\:text-4xl{font-size:2.25rem;line-height:2.5rem}}.\[\&\>\*\:first-child\]\:mt-0>*:first-child{margin-top:0}.\[\&\>\*\:last-child\]\:mb-0>*:last-child{margin-bottom:0}.\[\&_\*\]\:\[word-break\:break-word\] *{word-break:break-word}
|
|
@@ -19,9 +19,9 @@ Example:
|
|
|
19
19
|
For tests, pass a Ghostty instance directly:
|
|
20
20
|
import { Ghostty, Terminal } from "ghostty-web";
|
|
21
21
|
const ghostty = await Ghostty.load();
|
|
22
|
-
const term = new Terminal({ ghostty });`);return jt}const tC={};function kB(){const e=tC?.VITE_API_BASE_URL;if(e)return e;if(typeof window<"u"){const A=window;if(A.OTTO_SERVER_URL)return A.OTTO_SERVER_URL;if(A.__OTTO_API_URL__)return A.__OTTO_API_URL__}return"http://localhost:9100"}function gC(){return kB()}const Me=kB(),QC='"JetBrainsMono NFM", monospace',sC=1500,BC=5;function oC(){if(typeof document>"u")return"#121216";const e=document.createElement("div");e.style.display="none",e.className="bg-background",document.body.appendChild(e);const A=getComputedStyle(e).backgroundColor;document.body.removeChild(e);const g=A.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(g){const Q=Number(g[1]),s=Number(g[2]),B=Number(g[3]);return`#${(1<<24|Q<<16|s<<8|B).toString(16).slice(1)}`}return"#121216"}let gs=!1;async function aC(){if(gs||typeof document>"u"||!("FontFace"in window))return;const A=[{file:"JetBrainsMonoNerdFontMono-Regular.woff2",weight:"400",style:"normal"},{file:"JetBrainsMonoNerdFontMono-Bold.woff2",weight:"700",style:"normal"},{file:"JetBrainsMonoNerdFontMono-Italic.woff2",weight:"400",style:"italic"},{file:"JetBrainsMonoNerdFontMono-BoldItalic.woff2",weight:"700",style:"italic"}].map(async g=>{try{const Q=new URL(Object.assign({"../../assets/fonts/JetBrainsMonoNerdFontMono-Bold.woff2":UE,"../../assets/fonts/JetBrainsMonoNerdFontMono-BoldItalic.woff2":SE,"../../assets/fonts/JetBrainsMonoNerdFontMono-Italic.woff2":KE,"../../assets/fonts/JetBrainsMonoNerdFontMono-Regular.woff2":JE})[`../../assets/fonts/${g.file}`],import.meta.url).href,B=await new FontFace("JetBrainsMono NFM",`url("${Q}") format("woff2")`,{weight:g.weight,style:g.style}).load();document.fonts.add(B)}catch{}});await Promise.allSettled(A),gs=!0}function iC(){const e=cA.getConfig?.();return e&&typeof e.baseURL=="string"&&e.baseURL.length>0?e.baseURL:gC()}function EC({terminalId:e,onExit:A}){const g=u.useRef(null),Q=u.useRef(null),s=u.useRef(null),B=u.useRef(null),o=u.useRef(0),a=u.useRef(null),
|
|
23
|
-
\x1B[33m[Process exited with code ${
|
|
24
|
-
`),C.current&&C.current(e))}catch{}},l.onerror=()=>{l.close(),B.current===l&&(B.current=null),o.current<BC&&(o.current++,a.current=setTimeout(()=>{Q.current&&c(Q.current,n)},sC))},l.onopen=()=>{o.current=0}},[e]);return u.useEffect(()=>{if(!g.current||!e)return;let r=!1,n=null,l=null,d=null;return i(!1),o.current=0,B.current&&(B.current.close(),B.current=null),a.current&&(clearTimeout(a.current),a.current=null),(async()=>{if(await AC(),r||!g.current)return;await aC(),await document.fonts.ready;const m=oC();if(n=new zE({theme:{background:m,foreground:"#d4d4d4",cursor:"#ffffff",cursorAccent:"#000000",selectionBackground:"#264f78",black:"#000000",red:"#cd3131",green:"#0dbc79",yellow:"#e5e510",blue:"#2472c8",magenta:"#bc3fbc",cyan:"#11a8cd",white:"#e5e5e5",brightBlack:"#666666",brightRed:"#f14c4c",brightGreen:"#23d18b",brightYellow:"#f5f543",brightBlue:"#3b8eea",brightMagenta:"#d670d6",brightCyan:"#29b8db",brightWhite:"#e5e5e5"},fontSize:13,fontFamily:QC,cursorBlink:!0,convertEol:!0,scrollback:5e3}),l=new $E,n.loadAddon(l),n.open(g.current),n.focus(),await new Promise(f=>{requestAnimationFrame(()=>{try{l?.fit()}catch{}f()})}),r)return;const h=iC(),x=(f,N)=>{fetch(`${h}/v1/terminals/${e}/resize`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cols:f,rows:N})}).catch(()=>{})};n&&x(n.cols,n.rows),c(n,h),n.onData(f=>{fetch(`${h}/v1/terminals/${e}/input`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({input:f})}).catch(()=>{})}),n.onResize(({cols:f,rows:N})=>{x(f,N)}),Q.current=n,s.current=l,d=new ResizeObserver(()=>{requestAnimationFrame(()=>{if(s.current&&!r)try{s.current.fit()}catch{}})}),d.observe(g.current),setTimeout(()=>{r||i(!0)},2e3)})().catch(m=>{console.error("[TerminalViewer] Failed to initialize:",m)}),()=>{r=!0,a.current&&(clearTimeout(a.current),a.current=null),B.current&&(B.current.close(),B.current=null),d&&d.disconnect(),n&&n.dispose(),Q.current=null,s.current=null}},[e,c]),u.useEffect(()=>{I()},[I]),t.jsx("div",{className:"flex h-full flex-col overflow-hidden bg-background","data-terminal-viewer":!0,children:t.jsxs("div",{className:"relative flex-1 min-h-0 overflow-hidden",children:[t.jsx("div",{ref:g,className:"absolute inset-0 bg-background"}),t.jsx("div",{className:"absolute inset-0 bg-background flex items-center justify-center pointer-events-none transition-opacity duration-300",style:{opacity:E?0:1},children:t.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[t.jsxs("svg",{className:"animate-spin h-4 w-4",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:[t.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),t.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})]}),t.jsx("span",{className:"text-xs",children:"Loading terminal…"})]})})]})})}const Qs=150,CC=.85,rC=u.memo(function(){const A=XA(f=>f.isOpen),g=XA(f=>f.panelHeight),Q=XA(f=>f.setPanelHeight),s=XA(f=>f.activeTabId),B=XA(f=>f.selectTab),o=XA(f=>f.closePanel),a=XA(f=>f.isMaximized),E=XA(f=>f.toggleMaximize),i=XA(f=>f.togglePanel),{data:C}=xB(),I=GE(),c=FE(),r=u.useRef(null),n=C?.terminals??[],l=u.useRef(!1),d=u.useRef(n);d.current=n,u.useEffect(()=>{A&&d.current.length>0&&(!s||!d.current.find(f=>f.id===s))&&B(d.current[0].id)},[A,n.length,s,B]),u.useEffect(()=>{A&&C&&n.length===0&&!l.current&&!I.isPending&&(l.current=!0,I.mutateAsync({command:"bash",purpose:"Manual shell"}).then(f=>{B(f.terminalId)}).catch(()=>{}).finally(()=>{l.current=!1}))},[A,C,n.length,B]);const D=u.useCallback(async()=>{try{const f=await I.mutateAsync({command:"bash",purpose:"Manual shell"});B(f.terminalId)}catch{}},[I,B]),m=u.useCallback(async f=>{try{if(await c.mutateAsync(f),s===f){const N=d.current.filter(M=>M.id!==f);N.length>0?B(N[0].id):(B(null),o())}}catch{}},[c,s,B,o]);u.useEffect(()=>{const f=N=>{N.key==="`"&&N.ctrlKey&&(N.preventDefault(),i())};return window.addEventListener("keydown",f),()=>window.removeEventListener("keydown",f)},[i]);const h=u.useCallback(f=>{f.preventDefault(),r.current={startY:f.clientY,startHeight:g};const N=k=>{if(!r.current)return;const w=r.current.startY-k.clientY,G=r.current.startHeight+w,p=window.innerHeight*CC;Q(Math.min(Math.max(Qs,G),p))},M=()=>{r.current=null,document.removeEventListener("mousemove",N),document.removeEventListener("mouseup",M),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",N),document.addEventListener("mouseup",M),document.body.style.cursor="row-resize",document.body.style.userSelect="none"},[g,Q]);if(!A)return null;const x=a?"100%":`${g}px`;return t.jsxs("div",{className:"border-t border-border bg-background flex flex-col shrink-0 relative",style:{height:x,minHeight:Qs},children:[!a&&t.jsx("div",{className:"h-2 w-full cursor-row-resize hover:bg-primary/30 active:bg-primary/50 transition-colors absolute -top-1 left-0 right-0 z-10",onMouseDown:h}),t.jsxs("div",{className:"h-9 border-b border-border flex items-center shrink-0",children:[t.jsxs("div",{className:"flex items-center gap-1.5 px-3 shrink-0 border-r border-border h-full",children:[t.jsx(Re,{className:"w-3.5 h-3.5 text-muted-foreground"}),t.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:"Terminal"}),n.length>0&&t.jsxs("span",{className:"text-[10px] text-muted-foreground/70",children:["(",n.length,")"]})]}),t.jsx(bE,{terminals:n,onNewTerminal:D,onKillTerminal:m,isCreating:I.isPending}),t.jsxs("div",{className:"ml-auto flex items-center gap-0.5 px-2 shrink-0",children:[t.jsx("button",{type:"button",className:"p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",onClick:E,title:a?"Restore":"Maximize",children:a?t.jsx($g,{className:"w-3.5 h-3.5"}):t.jsx(Ss,{className:"w-3.5 h-3.5"})}),t.jsx("button",{type:"button",className:"p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",onClick:o,title:"Close panel",children:t.jsx($A,{className:"w-3.5 h-3.5"})})]})]}),t.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:s?t.jsx(EC,{terminalId:s,onExit:m}):t.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-muted-foreground",children:[t.jsx(Re,{className:"w-8 h-8 mb-2 opacity-40"}),t.jsx("div",{className:"text-xs",children:n.length===0?"No terminals running":"Select a terminal tab"})]})})]})}),nC=u.memo(function(){const A=XA(B=>B.isOpen),g=XA(B=>B.togglePanel),{data:Q}=xB(),s=Q?.count??0;return t.jsxs("button",{type:"button",onClick:g,className:`relative h-14 w-full transition-colors touch-manipulation flex items-center justify-center ${A?"bg-muted border-r-2 border-primary":"hover:bg-muted/50"}`,title:"Terminals",children:[t.jsx(Re,{className:"w-5 h-5 text-muted-foreground mx-auto"}),s>0&&t.jsx("span",{className:"absolute top-1 right-1 w-5 h-5 bg-primary text-primary-foreground text-xs rounded-full flex items-center justify-center font-semibold",children:s>9?"9+":s})]})}),eA=u.forwardRef(({className:e="",variant:A="primary",size:g="md",...Q},s)=>{const B="inline-flex items-center justify-center rounded font-medium transition-colors focus-visible:outline-none disabled:opacity-50 disabled:cursor-not-allowed",o={primary:"bg-primary text-primary-foreground hover:bg-primary/90",secondary:"bg-muted text-foreground hover:bg-muted/80 border border-border",ghost:"text-muted-foreground hover:text-foreground hover:bg-muted/50"},a={sm:"px-3 py-1.5 text-sm",md:"px-4 py-2 text-sm",lg:"px-6 py-3 text-base",icon:"w-10 h-10 p-0"};return t.jsx("button",{ref:s,className:`${B} ${o[A]} ${a[g]} ${e}`,...Q})});eA.displayName="Button";const IC=u.forwardRef(({className:e="",children:A,...g},Q)=>t.jsx("div",{ref:Q,className:`bg-card text-card-foreground border border-border rounded-lg ${e}`,...g,children:A}));IC.displayName="Card";const lC=u.forwardRef(({className:e="",...A},g)=>t.jsx("input",{ref:g,className:`w-full px-3 py-2 bg-muted border border-border rounded text-foreground placeholder-muted-foreground outline-none ${e}`,...A}));lC.displayName="Input";const tg=u.forwardRef(({className:e="",...A},g)=>t.jsx("textarea",{ref:g,className:`w-full px-3 py-2 bg-muted border border-border rounded text-foreground placeholder-muted-foreground outline-none resize-none ${e}`,...A}));tg.displayName="Textarea";const IQ=fA(e=>({isOpen:!1,title:"Confirm Action",message:"",confirmLabel:"Confirm",cancelLabel:"Cancel",variant:"default",onConfirm:()=>{},onCancel:void 0,openConfirmation:A=>e({isOpen:!0,title:A.title||"Confirm Action",message:A.message,confirmLabel:A.confirmLabel||"Confirm",cancelLabel:A.cancelLabel||"Cancel",variant:A.variant||"default",onConfirm:A.onConfirm,onCancel:A.onCancel}),closeConfirmation:()=>e({isOpen:!1,onConfirm:()=>{},onCancel:void 0})}));function cC(){const{isOpen:e,title:A,message:g,confirmLabel:Q,cancelLabel:s,variant:B,onConfirm:o,onCancel:a,closeConfirmation:E}=IQ(),[i,C]=u.useState(!1);u.useEffect(()=>{e||C(!1)},[e]);const I=u.useCallback(async()=>{C(!0);try{await o(),E()}catch(n){console.error("Confirmation action failed:",n),C(!1)}},[o,E]),c=u.useCallback(()=>{a?.(),E()},[a,E]),r=n=>{n.target===n.currentTarget&&!i&&c()};return u.useEffect(()=>{const n=l=>{if(e&&!i){const d=l.target,D=d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.isContentEditable;(l.key==="Escape"||l.key==="q"&&!D)&&(l.preventDefault(),c()),l.key==="Enter"&&(l.preventDefault(),I())}};if(e)return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[e,i,I,c]),e?t.jsx("div",{role:"dialog","aria-modal":"true",className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",onClick:r,onKeyDown:n=>{const l=n.target,d=l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.isContentEditable;(n.key==="Escape"||n.key==="q"&&!d)&&!i&&(n.preventDefault(),c())},children:t.jsxs("div",{className:"bg-background border border-border rounded-lg shadow-lg max-w-md w-full mx-4",children:[t.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[B==="destructive"&&t.jsx(Ee,{className:"w-5 h-5 text-destructive"}),t.jsx("h2",{className:"text-lg font-semibold",children:A})]}),t.jsx("button",{type:"button",onClick:c,disabled:i,className:"p-1 hover:bg-muted rounded transition-colors disabled:opacity-50","aria-label":"Close",children:t.jsx(yA,{className:"w-5 h-5"})})]}),t.jsx("div",{className:"p-4",children:t.jsx("p",{className:"text-muted-foreground",children:g})}),t.jsxs("div",{className:"flex items-center justify-end gap-3 p-4 border-t border-border",children:[t.jsx("button",{type:"button",onClick:c,disabled:i,className:"px-4 py-2 text-sm font-medium rounded transition-colors hover:bg-muted disabled:opacity-50",children:s}),t.jsx("button",{type:"button",onClick:I,disabled:i,className:`px-4 py-2 text-sm font-medium rounded transition-colors disabled:opacity-50 ${B==="destructive"?"bg-destructive text-destructive-foreground hover:bg-destructive/90":"bg-primary text-primary-foreground hover:bg-primary/90"}`,children:i?"Processing...":Q})]})]})}):null}let dC=0;const ae=fA(e=>({toasts:[],addToast:A=>{const g=`toast-${++dC}`;return e(Q=>({toasts:[...Q.toasts,{...A,id:g}]})),g},removeToast:A=>e(g=>({toasts:g.toasts.filter(Q=>Q.id!==A)})),updateToast:(A,g)=>e(Q=>({toasts:Q.toasts.map(s=>s.id===A?{...s,...g}:s)})),clearToasts:()=>e({toasts:[]})}));function AA(e,A="default",g=4e3){const Q=ae.getState().addToast({message:e,type:A,duration:g});return g>0&&setTimeout(()=>{ae.getState().removeToast(Q)},g),Q}AA.success=(e,A=4e3)=>AA(e,"success",A);AA.error=(e,A=5e3)=>AA(e,"error",A);AA.loading=e=>AA(e,"loading",0);AA.successWithAction=(e,A,g=6e3)=>{const Q=ae.getState().addToast({message:e,type:"success",duration:g,action:A});return g>0&&setTimeout(()=>{ae.getState().removeToast(Q)},g),Q};function $e(e){window.self!==window.top?window.parent.postMessage({type:"otto-open-url",url:e},"*"):window.open(e,"_blank")}const uC={default:t.jsx(It,{className:"h-4 w-4"}),success:t.jsx(Ks,{className:"h-4 w-4 text-green-500"}),error:t.jsx(AQ,{className:"h-4 w-4 text-red-500"}),loading:t.jsx(nA,{className:"h-4 w-4 animate-spin"})};function hC({toast:e}){const[A,g]=u.useState(!1),Q=ae(B=>B.removeToast);u.useEffect(()=>{requestAnimationFrame(()=>g(!0))},[]);const s=()=>{g(!1),setTimeout(()=>Q(e.id),150)};return t.jsxs("div",{className:`
|
|
22
|
+
const term = new Terminal({ ghostty });`);return jt}const tC={};function kB(){const e=tC?.VITE_API_BASE_URL;if(e)return e;if(typeof window<"u"){const A=window;if(A.OTTO_SERVER_URL)return A.OTTO_SERVER_URL;if(A.__OTTO_API_URL__)return A.__OTTO_API_URL__}return"http://localhost:9100"}function gC(){return kB()}const Me=kB(),QC='"JetBrainsMono NFM", monospace',sC=1500,BC=5;function oC(){if(typeof document>"u")return"#121216";const e=document.createElement("div");e.style.display="none",e.className="bg-background",document.body.appendChild(e);const A=getComputedStyle(e).backgroundColor;document.body.removeChild(e);const g=A.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(g){const Q=Number(g[1]),s=Number(g[2]),B=Number(g[3]);return`#${(1<<24|Q<<16|s<<8|B).toString(16).slice(1)}`}return"#121216"}let gs=!1;async function aC(){if(gs||typeof document>"u"||!("FontFace"in window))return;const A=[{file:"JetBrainsMonoNerdFontMono-Regular.woff2",weight:"400",style:"normal"},{file:"JetBrainsMonoNerdFontMono-Bold.woff2",weight:"700",style:"normal"},{file:"JetBrainsMonoNerdFontMono-Italic.woff2",weight:"400",style:"italic"},{file:"JetBrainsMonoNerdFontMono-BoldItalic.woff2",weight:"700",style:"italic"}].map(async g=>{try{const Q=new URL(Object.assign({"../../assets/fonts/JetBrainsMonoNerdFontMono-Bold.woff2":UE,"../../assets/fonts/JetBrainsMonoNerdFontMono-BoldItalic.woff2":SE,"../../assets/fonts/JetBrainsMonoNerdFontMono-Italic.woff2":KE,"../../assets/fonts/JetBrainsMonoNerdFontMono-Regular.woff2":JE})[`../../assets/fonts/${g.file}`],import.meta.url).href,B=await new FontFace("JetBrainsMono NFM",`url("${Q}") format("woff2")`,{weight:g.weight,style:g.style}).load();document.fonts.add(B)}catch{}});await Promise.allSettled(A),gs=!0}function iC(){const e=cA.getConfig?.();return e&&typeof e.baseURL=="string"&&e.baseURL.length>0?e.baseURL:gC()}function EC({terminalId:e,onExit:A}){const g=u.useRef(null),Q=u.useRef(null),s=u.useRef(null),B=u.useRef(null),o=u.useRef(0),a=u.useRef(null),E=u.useRef(!1),[i,C]=u.useState(!1),I=u.useRef(A);I.current=A;const c=u.useCallback(()=>{if(s.current)try{s.current.fit()}catch{}},[]),r=u.useCallback((n,l,d)=>{B.current&&(B.current.close(),B.current=null);const D=`${l}/v1/terminals/${e}/output${d?"?skipHistory=true":""}`,m=new EventSource(D);B.current=m;let h=!1;m.onmessage=x=>{try{const f=JSON.parse(x.data);f.type==="data"?(n.write(f.line),E.current=!0,h||(h=!0,setTimeout(()=>C(!0),200))):f.type==="exit"&&(n.write(`\r
|
|
23
|
+
\x1B[33m[Process exited with code ${f.exitCode}]\x1B[0m\r
|
|
24
|
+
`),I.current&&I.current(e))}catch{}},m.onerror=()=>{m.close(),B.current===m&&(B.current=null),o.current<BC&&(o.current++,a.current=setTimeout(()=>{Q.current&&r(Q.current,l,!0)},sC))},m.onopen=()=>{o.current=0}},[e]);return u.useEffect(()=>{if(!g.current||!e)return;let n=!1,l=null,d=null,D=null;return C(!1),o.current=0,E.current=!1,B.current&&(B.current.close(),B.current=null),a.current&&(clearTimeout(a.current),a.current=null),(async()=>{if(await AC(),n||!g.current)return;await aC(),await document.fonts.ready;const h=oC();if(l=new zE({theme:{background:h,foreground:"#d4d4d4",cursor:"#ffffff",cursorAccent:"#000000",selectionBackground:"#264f78",black:"#000000",red:"#cd3131",green:"#0dbc79",yellow:"#e5e510",blue:"#2472c8",magenta:"#bc3fbc",cyan:"#11a8cd",white:"#e5e5e5",brightBlack:"#666666",brightRed:"#f14c4c",brightGreen:"#23d18b",brightYellow:"#f5f543",brightBlue:"#3b8eea",brightMagenta:"#d670d6",brightCyan:"#29b8db",brightWhite:"#e5e5e5"},fontSize:13,fontFamily:QC,cursorBlink:!0,convertEol:!0,scrollback:5e3}),d=new $E,l.loadAddon(d),l.open(g.current),l.focus(),await new Promise(N=>{requestAnimationFrame(()=>{try{d?.fit()}catch{}N()})}),n)return;const x=iC(),f=(N,M)=>{fetch(`${x}/v1/terminals/${e}/resize`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cols:N,rows:M})}).catch(()=>{})};l&&f(l.cols,l.rows),r(l,x,!1),l.onData(N=>{fetch(`${x}/v1/terminals/${e}/input`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({input:N})}).catch(()=>{})}),l.onResize(({cols:N,rows:M})=>{f(N,M)}),Q.current=l,s.current=d,D=new ResizeObserver(()=>{requestAnimationFrame(()=>{if(s.current&&!n)try{s.current.fit()}catch{}})}),D.observe(g.current),setTimeout(()=>{n||C(!0)},2e3)})().catch(h=>{console.error("[TerminalViewer] Failed to initialize:",h)}),()=>{n=!0,a.current&&(clearTimeout(a.current),a.current=null),B.current&&(B.current.close(),B.current=null),D&&D.disconnect(),l&&l.dispose(),Q.current=null,s.current=null}},[e,r]),u.useEffect(()=>{c()},[c]),t.jsx("div",{className:"flex h-full flex-col overflow-hidden bg-background","data-terminal-viewer":!0,children:t.jsxs("div",{className:"relative flex-1 min-h-0 overflow-hidden",children:[t.jsx("div",{ref:g,className:"absolute inset-0 bg-background"}),t.jsx("div",{className:"absolute inset-0 bg-background flex items-center justify-center pointer-events-none transition-opacity duration-300",style:{opacity:i?0:1},children:t.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[t.jsxs("svg",{className:"animate-spin h-4 w-4",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:[t.jsx("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),t.jsx("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})]}),t.jsx("span",{className:"text-xs",children:"Loading terminal…"})]})})]})})}const Qs=150,CC=.85,rC=u.memo(function(){const A=XA(f=>f.isOpen),g=XA(f=>f.panelHeight),Q=XA(f=>f.setPanelHeight),s=XA(f=>f.activeTabId),B=XA(f=>f.selectTab),o=XA(f=>f.closePanel),a=XA(f=>f.isMaximized),E=XA(f=>f.toggleMaximize),i=XA(f=>f.togglePanel),{data:C}=xB(),I=GE(),c=FE(),r=u.useRef(null),n=C?.terminals??[],l=u.useRef(!1),d=u.useRef(n);d.current=n,u.useEffect(()=>{A&&d.current.length>0&&(!s||!d.current.find(f=>f.id===s))&&B(d.current[0].id)},[A,n.length,s,B]),u.useEffect(()=>{A&&C&&n.length===0&&!l.current&&!I.isPending&&(l.current=!0,I.mutateAsync({command:"bash",purpose:"Manual shell"}).then(f=>{B(f.terminalId)}).catch(()=>{}).finally(()=>{l.current=!1}))},[A,C,n.length,B]);const D=u.useCallback(async()=>{try{const f=await I.mutateAsync({command:"bash",purpose:"Manual shell"});B(f.terminalId)}catch{}},[I,B]),m=u.useCallback(async f=>{try{if(await c.mutateAsync(f),s===f){const N=d.current.filter(M=>M.id!==f);N.length>0?B(N[0].id):(B(null),o())}}catch{}},[c,s,B,o]);u.useEffect(()=>{const f=N=>{N.key==="`"&&N.ctrlKey&&(N.preventDefault(),i())};return window.addEventListener("keydown",f),()=>window.removeEventListener("keydown",f)},[i]);const h=u.useCallback(f=>{f.preventDefault(),r.current={startY:f.clientY,startHeight:g};const N=k=>{if(!r.current)return;const w=r.current.startY-k.clientY,G=r.current.startHeight+w,p=window.innerHeight*CC;Q(Math.min(Math.max(Qs,G),p))},M=()=>{r.current=null,document.removeEventListener("mousemove",N),document.removeEventListener("mouseup",M),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",N),document.addEventListener("mouseup",M),document.body.style.cursor="row-resize",document.body.style.userSelect="none"},[g,Q]);if(!A)return null;const x=a?"100%":`${g}px`;return t.jsxs("div",{className:"border-t border-border bg-background flex flex-col shrink-0 relative",style:{height:x,minHeight:Qs},children:[!a&&t.jsx("div",{className:"h-2 w-full cursor-row-resize hover:bg-primary/30 active:bg-primary/50 transition-colors absolute -top-1 left-0 right-0 z-10",onMouseDown:h}),t.jsxs("div",{className:"h-9 border-b border-border flex items-center shrink-0",children:[t.jsxs("div",{className:"flex items-center gap-1.5 px-3 shrink-0 border-r border-border h-full",children:[t.jsx(Re,{className:"w-3.5 h-3.5 text-muted-foreground"}),t.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:"Terminal"}),n.length>0&&t.jsxs("span",{className:"text-[10px] text-muted-foreground/70",children:["(",n.length,")"]})]}),t.jsx(bE,{terminals:n,onNewTerminal:D,onKillTerminal:m,isCreating:I.isPending}),t.jsxs("div",{className:"ml-auto flex items-center gap-0.5 px-2 shrink-0",children:[t.jsx("button",{type:"button",className:"p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",onClick:E,title:a?"Restore":"Maximize",children:a?t.jsx($g,{className:"w-3.5 h-3.5"}):t.jsx(Ss,{className:"w-3.5 h-3.5"})}),t.jsx("button",{type:"button",className:"p-1 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",onClick:o,title:"Close panel",children:t.jsx($A,{className:"w-3.5 h-3.5"})})]})]}),t.jsx("div",{className:"flex-1 min-h-0 overflow-hidden",children:s?t.jsx(EC,{terminalId:s,onExit:m},s):t.jsxs("div",{className:"flex flex-col items-center justify-center h-full text-muted-foreground",children:[t.jsx(Re,{className:"w-8 h-8 mb-2 opacity-40"}),t.jsx("div",{className:"text-xs",children:n.length===0?"No terminals running":"Select a terminal tab"})]})})]})}),nC=u.memo(function(){const A=XA(B=>B.isOpen),g=XA(B=>B.togglePanel),{data:Q}=xB(),s=Q?.count??0;return t.jsxs("button",{type:"button",onClick:g,className:`relative h-14 w-full transition-colors touch-manipulation flex items-center justify-center ${A?"bg-muted border-r-2 border-primary":"hover:bg-muted/50"}`,title:"Terminals",children:[t.jsx(Re,{className:"w-5 h-5 text-muted-foreground mx-auto"}),s>0&&t.jsx("span",{className:"absolute top-1 right-1 w-5 h-5 bg-primary text-primary-foreground text-xs rounded-full flex items-center justify-center font-semibold",children:s>9?"9+":s})]})}),eA=u.forwardRef(({className:e="",variant:A="primary",size:g="md",...Q},s)=>{const B="inline-flex items-center justify-center rounded font-medium transition-colors focus-visible:outline-none disabled:opacity-50 disabled:cursor-not-allowed",o={primary:"bg-primary text-primary-foreground hover:bg-primary/90",secondary:"bg-muted text-foreground hover:bg-muted/80 border border-border",ghost:"text-muted-foreground hover:text-foreground hover:bg-muted/50"},a={sm:"px-3 py-1.5 text-sm",md:"px-4 py-2 text-sm",lg:"px-6 py-3 text-base",icon:"w-10 h-10 p-0"};return t.jsx("button",{ref:s,className:`${B} ${o[A]} ${a[g]} ${e}`,...Q})});eA.displayName="Button";const IC=u.forwardRef(({className:e="",children:A,...g},Q)=>t.jsx("div",{ref:Q,className:`bg-card text-card-foreground border border-border rounded-lg ${e}`,...g,children:A}));IC.displayName="Card";const lC=u.forwardRef(({className:e="",...A},g)=>t.jsx("input",{ref:g,className:`w-full px-3 py-2 bg-muted border border-border rounded text-foreground placeholder-muted-foreground outline-none ${e}`,...A}));lC.displayName="Input";const tg=u.forwardRef(({className:e="",...A},g)=>t.jsx("textarea",{ref:g,className:`w-full px-3 py-2 bg-muted border border-border rounded text-foreground placeholder-muted-foreground outline-none resize-none ${e}`,...A}));tg.displayName="Textarea";const IQ=fA(e=>({isOpen:!1,title:"Confirm Action",message:"",confirmLabel:"Confirm",cancelLabel:"Cancel",variant:"default",onConfirm:()=>{},onCancel:void 0,openConfirmation:A=>e({isOpen:!0,title:A.title||"Confirm Action",message:A.message,confirmLabel:A.confirmLabel||"Confirm",cancelLabel:A.cancelLabel||"Cancel",variant:A.variant||"default",onConfirm:A.onConfirm,onCancel:A.onCancel}),closeConfirmation:()=>e({isOpen:!1,onConfirm:()=>{},onCancel:void 0})}));function cC(){const{isOpen:e,title:A,message:g,confirmLabel:Q,cancelLabel:s,variant:B,onConfirm:o,onCancel:a,closeConfirmation:E}=IQ(),[i,C]=u.useState(!1);u.useEffect(()=>{e||C(!1)},[e]);const I=u.useCallback(async()=>{C(!0);try{await o(),E()}catch(n){console.error("Confirmation action failed:",n),C(!1)}},[o,E]),c=u.useCallback(()=>{a?.(),E()},[a,E]),r=n=>{n.target===n.currentTarget&&!i&&c()};return u.useEffect(()=>{const n=l=>{if(e&&!i){const d=l.target,D=d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.isContentEditable;(l.key==="Escape"||l.key==="q"&&!D)&&(l.preventDefault(),c()),l.key==="Enter"&&(l.preventDefault(),I())}};if(e)return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[e,i,I,c]),e?t.jsx("div",{role:"dialog","aria-modal":"true",className:"fixed inset-0 bg-black/50 flex items-center justify-center z-50",onClick:r,onKeyDown:n=>{const l=n.target,d=l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.isContentEditable;(n.key==="Escape"||n.key==="q"&&!d)&&!i&&(n.preventDefault(),c())},children:t.jsxs("div",{className:"bg-background border border-border rounded-lg shadow-lg max-w-md w-full mx-4",children:[t.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[B==="destructive"&&t.jsx(Ee,{className:"w-5 h-5 text-destructive"}),t.jsx("h2",{className:"text-lg font-semibold",children:A})]}),t.jsx("button",{type:"button",onClick:c,disabled:i,className:"p-1 hover:bg-muted rounded transition-colors disabled:opacity-50","aria-label":"Close",children:t.jsx(yA,{className:"w-5 h-5"})})]}),t.jsx("div",{className:"p-4",children:t.jsx("p",{className:"text-muted-foreground",children:g})}),t.jsxs("div",{className:"flex items-center justify-end gap-3 p-4 border-t border-border",children:[t.jsx("button",{type:"button",onClick:c,disabled:i,className:"px-4 py-2 text-sm font-medium rounded transition-colors hover:bg-muted disabled:opacity-50",children:s}),t.jsx("button",{type:"button",onClick:I,disabled:i,className:`px-4 py-2 text-sm font-medium rounded transition-colors disabled:opacity-50 ${B==="destructive"?"bg-destructive text-destructive-foreground hover:bg-destructive/90":"bg-primary text-primary-foreground hover:bg-primary/90"}`,children:i?"Processing...":Q})]})]})}):null}let dC=0;const ae=fA(e=>({toasts:[],addToast:A=>{const g=`toast-${++dC}`;return e(Q=>({toasts:[...Q.toasts,{...A,id:g}]})),g},removeToast:A=>e(g=>({toasts:g.toasts.filter(Q=>Q.id!==A)})),updateToast:(A,g)=>e(Q=>({toasts:Q.toasts.map(s=>s.id===A?{...s,...g}:s)})),clearToasts:()=>e({toasts:[]})}));function AA(e,A="default",g=4e3){const Q=ae.getState().addToast({message:e,type:A,duration:g});return g>0&&setTimeout(()=>{ae.getState().removeToast(Q)},g),Q}AA.success=(e,A=4e3)=>AA(e,"success",A);AA.error=(e,A=5e3)=>AA(e,"error",A);AA.loading=e=>AA(e,"loading",0);AA.successWithAction=(e,A,g=6e3)=>{const Q=ae.getState().addToast({message:e,type:"success",duration:g,action:A});return g>0&&setTimeout(()=>{ae.getState().removeToast(Q)},g),Q};function $e(e){window.self!==window.top?window.parent.postMessage({type:"otto-open-url",url:e},"*"):window.open(e,"_blank")}const uC={default:t.jsx(It,{className:"h-4 w-4"}),success:t.jsx(Ks,{className:"h-4 w-4 text-green-500"}),error:t.jsx(AQ,{className:"h-4 w-4 text-red-500"}),loading:t.jsx(nA,{className:"h-4 w-4 animate-spin"})};function hC({toast:e}){const[A,g]=u.useState(!1),Q=ae(B=>B.removeToast);u.useEffect(()=>{requestAnimationFrame(()=>g(!0))},[]);const s=()=>{g(!1),setTimeout(()=>Q(e.id),150)};return t.jsxs("div",{className:`
|
|
25
25
|
flex items-center gap-3 px-4 py-3
|
|
26
26
|
bg-card border border-border rounded-lg shadow-lg
|
|
27
27
|
transition-all duration-150 ease-out cursor-pointer
|
|
@@ -77,7 +77,7 @@ ${l.slice(d)}`;return Q(D),setTimeout(()=>{r.setSelectionRange(d,d)},0),!0}if(o=
|
|
|
77
77
|
`,d);if(h!==-1){const x=h+1;let f=l.indexOf(`
|
|
78
78
|
`,x);f===-1&&(f=l.length);const N=f-x,M=x+Math.min(m,N);r.setSelectionRange(M,M)}return!0}if(n==="k"){c.preventDefault();const l=r.value,d=r.selectionStart,D=l.lastIndexOf(`
|
|
79
79
|
`,d-1)+1;if(D>0){const m=d-D,h=D-1,x=l.lastIndexOf(`
|
|
80
|
-
`,h-1)+1,f=h-x,N=x+Math.min(m,f);r.setSelectionRange(N,N)}return!0}return!1},[o,A,g,Q,E,i,C]);return{vimMode:s,setVimMode:B,handleVimNormalMode:I}}function vr(){const[e,A]=u.useState(!1),[g,Q]=u.useState(""),[s,B]=u.useState(0),[o,a]=u.useState(),E=u.useCallback((I,c,r)=>{const n=c.current;if(!n)return;const l=n.value,d=n.selectionStart,m=l.slice(0,d).match(/@(\S*)$/);if(!m)return;const h=d-m[0].length,x=`${l.slice(0,h)}@${I} ${l.slice(d)}`;r(x),A(!1),setTimeout(()=>{const f=h+I.length+2;n.setSelectionRange(f,f),n.focus()},0)},[]),i=u.useCallback(I=>{a(I)},[]),C=u.useCallback((I,c)=>{const n=I.slice(0,c).match(/@(\S*)$/);n?(A(!0),Q(n[1]),B(0)):A(!1)},[]);return{showFileMention:e,mentionQuery:g,mentionSelectedIndex:s,currentFileToSelect:o,setShowFileMention:A,setMentionQuery:Q,setMentionSelectedIndex:B,setCurrentFileToSelect:a,handleFileSelect:E,handleEnterSelect:i,checkForMention:C}}function jr({onCommand:e,updatePreferences:A,vimModeEnabled:g,reasoningEnabled:Q,textareaRef:s,setMessage:B,setShowShortcutsModal:o,sessionId:a}){const[E,i]=u.useState(!1),[C,I]=u.useState(""),[c,r]=u.useState(0),[n,l]=u.useState(),d=u.useCallback(async h=>{const x=()=>{B(""),i(!1),s.current&&(s.current.style.height="auto"),s.current?.focus()};if(h==="help"){o(!0),x();return}if(h==="vim"){A({vimMode:!g}),x();return}if(h==="reasoning"){A({reasoningEnabled:!Q}),x();return}if(h==="stop"){if(a)try{await O.abortSession(a)}catch(f){console.error("Failed to stop generation:",f)}x();return}e&&e(h),x()},[e,g,Q,A,s,B,o,a]),D=u.useCallback(h=>{l(h)},[]),m=u.useCallback(h=>{h.startsWith("/")&&!h.includes(" ")?(i(!0),I(h.slice(1)),r(0)):i(!1)},[]);return{showCommandSuggestions:E,commandQuery:C,commandSelectedIndex:c,currentCommandToSelect:n,setShowCommandSuggestions:i,setCommandQuery:I,setCommandSelectedIndex:r,setCurrentCommandToSelect:l,handleCommandSelect:d,handleCommandEnterSelect:D,checkForCommand:m}}function Tr(e){return A=>{const{showFileMention:g,showCommandSuggestions:Q,mentionSelectedIndex:s,commandSelectedIndex:B,currentFileToSelect:o,currentCommandToSelect:a,isPlanMode:E,vimModeEnabled:i,vimMode:C,setMentionSelectedIndex:I,setCommandSelectedIndex:c,setShowFileMention:r,setShowCommandSuggestions:n,setIsPlanMode:l,setVimMode:d,handleFileSelect:D,handleCommandSelect:m,handleSend:h,handleVimNormalMode:x,onPlanModeToggle:f}=e;if(Q){const N=qB.length;A.key==="ArrowDown"||A.ctrlKey&&A.key==="j"?(A.preventDefault(),c((B+1)%N)):A.key==="ArrowUp"||A.ctrlKey&&A.key==="k"?(A.preventDefault(),c((B-1+N)%N)):A.key==="Enter"?(A.preventDefault(),a&&m(a)):A.key==="Escape"&&(A.preventDefault(),n(!1));return}if(g){A.key==="ArrowDown"||A.ctrlKey&&A.key==="j"?(A.preventDefault(),I((s+1)%20)):A.key==="ArrowUp"||A.ctrlKey&&A.key==="k"?(A.preventDefault(),I((s-1+20)%20)):A.key==="Enter"?(A.preventDefault(),o&&D(o)):A.key==="Escape"&&(A.preventDefault(),r(!1),i&&d("normal"));return}if(!(i&&C==="normal"&&x(A))){if(i&&C==="insert"&&A.key==="Escape"){A.preventDefault(),d("normal");return}if(A.key==="Tab"){A.preventDefault();const N=!E;l(N),f?.(N)}else A.key==="Enter"&&!A.shiftKey&&(!i||C==="normal")&&(A.preventDefault(),h())}}}const EA=fA(e=>({balance:null,usdcBalance:null,network:"mainnet",isPaymentPending:!1,lastPaymentAmount:null,walletAddress:null,isLoading:!1,isTopupModalOpen:!1,setBalance:A=>e({balance:A}),setUsdcBalance:A=>e({usdcBalance:A}),setNetwork:A=>e({network:A}),setPaymentPending:A=>e({isPaymentPending:A}),setLastPaymentAmount:A=>e({lastPaymentAmount:A}),setWalletAddress:A=>e({walletAddress:A}),setLoading:A=>e({isLoading:A}),openTopupModal:()=>e({isTopupModalOpen:!0}),closeTopupModal:()=>e({isTopupModalOpen:!1})})),Yr=u.memo(u.forwardRef(function({onSend:A,onCommand:g,disabled:Q,onConfigClick:s,onPlanModeToggle:B,isPlanMode:o,reasoningEnabled:a,sessionId:E,images:i=[],documents:C=[],onFileRemove:I,isDragging:c=!1,onPaste:r,visionEnabled:n=!1,attachmentEnabled:l=!1,modelName:d,providerName:D,authType:m,researchContexts:h=[],onResearchContextRemove:x,onRefreshBalance:f,isBalanceLoading:N=!1,onModelInfoClick:M,agent:k,agents:w=[],onAgentChange:G},p){const[F,y]=u.useState(""),[U,K]=u.useState(o||!1),[j,L]=u.useState(!1),[R,q]=u.useState(!1),J=u.useRef(null),H=u.useRef(null),{data:W,isLoading:tA}=qr(),{preferences:_,updatePreferences:rA}=wt(),UA=W?.files||[],Y=W?.changedFiles||[],QA=EA(X=>X.balance),NA=D==="setu";u.useEffect(()=>{if(!R)return;const X=jA=>{H.current&&!H.current.contains(jA.target)&&q(!1)};return document.addEventListener("mousedown",X),()=>document.removeEventListener("mousedown",X)},[R]);const kA=u.useRef(()=>{}),{showFileMention:OA,mentionQuery:v,mentionSelectedIndex:sA,currentFileToSelect:RA,setShowFileMention:wA,setMentionSelectedIndex:VA,setCurrentFileToSelect:GA,handleFileSelect:pe,handleEnterSelect:ce,checkForMention:se}=vr(),{showCommandSuggestions:ge,commandQuery:Fe,commandSelectedIndex:be,currentCommandToSelect:P,setShowCommandSuggestions:gA,setCommandSelectedIndex:BA,setCurrentCommandToSelect:FA,handleCommandSelect:ZA,handleCommandEnterSelect:He,checkForCommand:vA}=jr({onCommand:g,updatePreferences:rA,vimModeEnabled:_.vimMode,reasoningEnabled:_.reasoningEnabled,textareaRef:J,setMessage:y,setShowShortcutsModal:L,sessionId:E}),{vimMode:de,setVimMode:me,handleVimNormalMode:gt}=Or({enabled:_.vimMode,onSend:()=>kA.current(),textareaRef:J,setMessage:y});u.useEffect(()=>{J.current?.focus()},[]),u.useEffect(()=>{o!==void 0&&K(o)},[o]),u.useImperativeHandle(p,()=>({focus:()=>{J.current?.focus()},setValue:X=>{y(X),J.current?.focus()}}));const Qt=u.useCallback(()=>{const X=J.current;X&&(X.style.height="auto",X.style.height=`${X.scrollHeight}px`)},[]);u.useEffect(()=>{Qt()},[Qt,F]);const Cg=u.useCallback(()=>{wA(!1),GA(void 0)},[wA,GA]),rg=u.useCallback(()=>{gA(!1),FA(void 0)},[gA,FA]),st=u.useCallback(X=>{pe(X,J,y)},[pe]),xe=u.useCallback(()=>{!F.trim()||Q||(A(F),y(""),wA(!1),gA(!1),GA(void 0),FA(void 0),J.current&&(J.current.style.height="auto"),_.vimMode&&me("normal"),J.current?.focus())},[F,Q,A,_.vimMode,wA,gA,GA,FA,me]);u.useEffect(()=>{kA.current=xe},[xe]);const Bt=u.useCallback(X=>{if(_.vimMode&&de==="normal")return;const jA=X.target.value;y(jA),vA(jA),jA.startsWith("/")&&!jA.includes(" ")?(wA(!1),GA(void 0)):(gA(!1),FA(void 0),se(jA,X.target.selectionStart))},[_.vimMode,de,vA,wA,GA,gA,FA,se]),ng=u.useMemo(()=>Tr({showFileMention:OA,showCommandSuggestions:ge,mentionSelectedIndex:sA,commandSelectedIndex:be,currentFileToSelect:RA,currentCommandToSelect:P,isPlanMode:U,vimModeEnabled:_.vimMode,vimMode:de,setMentionSelectedIndex:VA,setCommandSelectedIndex:BA,setShowFileMention:wA,setShowCommandSuggestions:gA,setIsPlanMode:K,setVimMode:me,handleFileSelect:st,handleCommandSelect:ZA,handleSend:xe,handleVimNormalMode:gt,onPlanModeToggle:B}),[OA,ge,sA,be,RA,P,U,_.vimMode,de,VA,BA,wA,gA,me,st,ZA,xe,gt,B]);u.useEffect(()=>{_.vimMode||me("insert")},[_.vimMode,me]);const Ig=u.useCallback(X=>{r?.(X)},[r]),lg=i.length>0,cg=C.length>0,Pe=lg||cg;return t.jsxs(t.Fragment,{children:[c&&(()=>{const X=n||l,jA=[...n?["Images"]:[],...l?["PDF"]:[],"Markdown","Text"].join(", ");return t.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-background/80 backdrop-blur-sm pointer-events-none",children:t.jsxs("div",{className:`flex flex-col items-center gap-4 p-8 rounded-2xl border-2 border-dashed ${X?"bg-card border-primary/50":"bg-card border-muted-foreground/30"}`,children:[t.jsx("div",{className:`p-4 rounded-full ${X?"bg-primary/10":"bg-muted"}`,children:t.jsx(Ne,{className:`w-12 h-12 ${X?"text-primary":"text-muted-foreground"}`})}),t.jsxs("div",{className:"text-center",children:[t.jsx("p",{className:"text-lg font-medium text-foreground",children:"Drop files here"}),t.jsxs("p",{className:"text-sm text-muted-foreground",children:[jA," up to 10MB"]})]})]})})})(),t.jsx("div",{className:"absolute bottom-0 left-0 right-0 pt-16 pb-6 md:pb-8 px-2 md:px-4 bg-gradient-to-t from-background via-background to-transparent pointer-events-none z-20 safe-area-inset-bottom",children:t.jsxs("div",{className:"max-w-3xl mx-auto pointer-events-auto mb-2 md:mb-0 relative",children:[_.vimMode&&de==="normal"&&t.jsx("div",{className:"absolute -top-6 right-0 px-2 py-0.5 text-xs font-mono font-semibold bg-amber-500/90 text-white rounded shadow-sm",children:"NORMAL"}),_.vimMode&&de==="insert"&&t.jsx("div",{className:"absolute -top-6 right-0 px-2 py-0.5 text-xs font-mono font-semibold bg-green-500/90 text-white rounded shadow-sm",children:"INSERT"}),t.jsxs("div",{className:`relative flex flex-col rounded-3xl p-1 transition-all touch-manipulation ${U?"bg-slate-100 dark:bg-slate-900/40 border border-slate-300 dark:border-slate-700 focus-within:border-slate-400 dark:focus-within:border-slate-600 focus-within:ring-1 focus-within:ring-slate-300 dark:focus-within:ring-slate-700":"bg-card border border-border focus-within:border-primary/60 focus-within:ring-1 focus-within:ring-primary/40"}`,children:[Pe&&t.jsxs("div",{className:"flex flex-wrap gap-2 px-3 pt-2 pb-1",children:[i.map(X=>t.jsxs("div",{className:"relative group w-12 h-12 rounded-lg overflow-hidden bg-muted",children:[t.jsx("img",{src:X.preview,alt:"Attachment",className:"w-full h-full object-cover"}),t.jsx("button",{type:"button",onClick:()=>I?.(X.id),className:"absolute top-0 right-0 p-0.5 bg-black/60 rounded-bl-md opacity-0 group-hover:opacity-100 transition-opacity",children:t.jsx(yA,{className:"w-3 h-3 text-white"})})]},X.id)),C.map(X=>t.jsxs("div",{className:"relative group flex items-center gap-2 px-3 py-2 rounded-lg bg-muted max-w-[200px]",children:[X.type==="pdf"?t.jsx(Ne,{className:"w-4 h-4 text-red-500 flex-shrink-0"}):t.jsx(zt,{className:"w-4 h-4 text-blue-500 flex-shrink-0"}),t.jsx("span",{className:"text-xs truncate",children:X.name}),t.jsx("button",{type:"button",onClick:()=>I?.(X.id),className:"absolute top-0 right-0 p-0.5 bg-black/60 rounded-bl-md opacity-0 group-hover:opacity-100 transition-opacity",children:t.jsx(yA,{className:"w-3 h-3 text-white"})})]},X.id))]}),h.length>0&&t.jsx("div",{className:"flex flex-wrap gap-2 px-3 pt-2 pb-1",children:h.map(X=>t.jsxs("div",{className:"relative group flex items-center gap-2 px-3 py-2 rounded-lg bg-teal-500/10 border border-teal-500/30 max-w-[200px]",children:[t.jsx(rt,{className:"w-4 h-4 text-teal-500 flex-shrink-0"}),t.jsx("span",{className:"text-xs truncate text-teal-600 dark:text-teal-400",children:X.label}),x&&t.jsx("button",{type:"button",onClick:()=>x(X.id),className:"absolute top-0 right-0 p-0.5 bg-black/60 rounded-bl-md opacity-0 group-hover:opacity-100 transition-opacity",children:t.jsx(yA,{className:"w-3 h-3 text-white"})})]},X.id))}),t.jsxs("div",{className:"flex items-end gap-1",children:[s&&t.jsx("button",{type:"button",onClick:s,className:"flex items-center justify-center w-10 h-10 rounded-full hover:bg-background/50 active:bg-background/70 transition-colors text-muted-foreground hover:text-foreground flex-shrink-0 touch-manipulation",children:t.jsx(jo,{className:"w-4 h-4"})}),t.jsx(tg,{ref:J,value:F,onChange:Bt,onKeyDown:ng,onPaste:Ig,placeholder:U?"Plan mode - Type a message...":"Type a message...",disabled:Q,rows:1,className:`border-0 bg-transparent pl-1 pr-2 py-2 max-h-[200px] overflow-y-auto leading-normal resize-none scrollbar-hide text-base ${_.vimMode&&de==="normal"?"caret-[6px]":""}`,style:{height:"2.5rem"}}),t.jsx("button",{type:"button",onClick:xe,disabled:Q||!F.trim()&&!Pe,className:`flex items-center justify-center w-10 h-10 rounded-full transition-colors flex-shrink-0 touch-manipulation ${F.trim()||Pe?"bg-primary hover:bg-primary/90 active:bg-primary/80 text-primary-foreground":"bg-transparent text-muted-foreground"}`,children:t.jsx(qs,{className:"w-4 h-4"})})]})]}),(a||n||d||D||m||k)&&t.jsxs("div",{className:"grid grid-cols-3 items-center mt-1 px-3",children:[t.jsxs("div",{className:"justify-self-start flex-shrink-0 relative",ref:H,children:[k&&w.length>0&&t.jsxs("button",{type:"button",onClick:()=>q(!R),className:"text-[10px] text-muted-foreground flex items-center gap-1 transition-colors hover:text-foreground cursor-pointer",children:[t.jsx("span",{className:"uppercase font-medium",children:k}),t.jsx(To,{className:`h-2.5 w-2.5 transition-transform ${R?"rotate-180":""}`})]}),R&&t.jsx("div",{className:"absolute bottom-full left-0 mb-1 min-w-[120px] bg-popover border border-border rounded-md shadow-lg overflow-hidden z-50",children:w.map(X=>t.jsx("button",{type:"button",onClick:()=>{G?.(X),q(!1)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors hover:bg-accent ${X===k?"text-foreground font-medium bg-accent/50":"text-muted-foreground"}`,children:X},X))})]}),t.jsx("div",{className:"justify-self-center",children:(D||d||m)&&t.jsxs("div",{className:"text-[10px] text-muted-foreground flex items-center gap-1 px-2 py-0.5",children:[t.jsxs("button",{type:"button",onClick:M,className:"flex items-center gap-1 transition-colors hover:text-foreground cursor-pointer",children:[D&&t.jsxs(t.Fragment,{children:[t.jsx(TA,{provider:D,size:12,className:"opacity-70"}),t.jsx("span",{className:"opacity-40",children:"/"})]}),d&&t.jsx("span",{children:d}),m&&m==="oauth"&&t.jsx("span",{className:"opacity-50",children:"(pro)"})]}),NA&&QA!==null&&t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:"text-emerald-600 dark:text-emerald-400",children:["$",QA.toFixed(2)]}),f&&t.jsx("button",{type:"button",onClick:X=>{X.stopPropagation(),f()},disabled:N,className:"p-0.5 hover:bg-background/50 rounded transition-colors disabled:opacity-50",children:t.jsx(YA,{className:`h-2.5 w-2.5 text-muted-foreground ${N?"animate-spin":""}`})})]})]})}),t.jsxs("div",{className:"justify-self-end flex-shrink-0 flex items-center gap-2",children:[a&&t.jsxs("span",{className:"text-[10px] text-indigo-600 dark:text-indigo-300 flex items-center gap-1",children:[t.jsx(tQ,{className:"h-3 w-3"}),"thinking"]}),n&&t.jsxs("span",{className:"text-[10px] text-emerald-600 dark:text-emerald-400 flex items-center gap-1",children:[t.jsx(Js,{className:"h-3 w-3"}),"images"]})]})]}),OA&&!tA&&t.jsx(Er,{files:UA,changedFiles:Y,query:v,selectedIndex:sA,onSelect:st,onEnterSelect:ce,onClose:Cg}),ge&&t.jsx(wr,{query:Fe,selectedIndex:be,onSelect:ZA,onEnterSelect:He,onClose:rg,sessionId:E}),t.jsx(kr,{isOpen:j,onClose:()=>L(!1)})]})})]})})),Hr=50,De=["sessions","list"];function Pr(){return ko({queryKey:De,queryFn:({pageParam:e=0})=>O.getSessionsPage({limit:Hr,offset:e}),getNextPageParam:e=>e.nextOffset??void 0,initialPageParam:0,staleTime:3e4,refetchInterval:3e4,refetchOnWindowFocus:!1})}function gg(){const e=Pr();return{data:u.useMemo(()=>e.data?.pages?e.data.pages.flatMap(g=>g.items??[]):[],[e.data]),isLoading:e.isLoading,isError:e.isError,error:e.error,hasNextPage:e.hasNextPage,fetchNextPage:e.fetchNextPage,isFetchingNextPage:e.isFetchingNextPage}}function uQ(e){const{data:A}=gg();return A?.find(g=>g.id===e)}function Wr(){const e=CA();return uA({mutationFn:A=>O.createSession(A),onSuccess:A=>{e.setQueryData(De,g=>{if(!g)return g;const Q=g.pages[0];return Q?{...g,pages:[{...Q,items:[A,...Q.items]},...g.pages.slice(1)]}:g}),e.invalidateQueries({queryKey:De})}})}function vB(e){const A=CA();return uA({mutationFn:g=>O.updateSession(e,g),onSuccess:async()=>{await A.invalidateQueries({queryKey:De}),await A.invalidateQueries({queryKey:["session",e]})}})}function zr(){const e=CA();return uA({mutationFn:A=>O.deleteSession(A),onSuccess:()=>{e.invalidateQueries({queryKey:De})}})}function Ht(e){return JA({queryKey:["messages",e],queryFn:()=>{if(!e)throw new Error("Session ID is required");return O.getMessages(e)},enabled:!!e})}function Vr(e){const A=CA();return uA({mutationFn:g=>O.sendMessage(e,g),onSuccess:()=>{A.invalidateQueries({queryKey:["messages",e]}),A.invalidateQueries({queryKey:De})}})}function Qg(){return JA({queryKey:["config"],queryFn:()=>O.getConfig(),staleTime:3e4})}function pt(){return JA({queryKey:["models","all"],queryFn:()=>O.getAllModels()})}function Zr(){const e=CA();return uA({mutationFn:A=>O.updateDefaults(A),onSuccess:()=>{e.invalidateQueries({queryKey:["config"]})}})}const pA=fA(e=>({isExpanded:!1,selectedFile:null,isViewerOpen:!1,expandedDirs:new Set,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>{iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),e({isExpanded:!0})},collapseSidebar:()=>e({isExpanded:!1,isViewerOpen:!1,selectedFile:null}),openFile:A=>e({selectedFile:A,isViewerOpen:!0}),closeViewer:()=>e({isViewerOpen:!1,selectedFile:null}),toggleDir:A=>e(g=>{const Q=new Set(g.expandedDirs);return Q.has(A)?Q.delete(A):Q.add(A),{expandedDirs:Q}})})),oA=fA(e=>({isExpanded:!1,status:"idle",url:null,qrCode:null,error:null,progress:null,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),te.getState().collapseSidebar(),KA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>{iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),te.getState().collapseSidebar(),KA.getState().collapseSidebar(),pA.getState().collapseSidebar(),e({isExpanded:!0})},collapseSidebar:()=>e({isExpanded:!1}),setStatus:A=>e({status:A}),setUrl:A=>e({url:A}),setQrCode:A=>e({qrCode:A}),setError:A=>e({error:A}),setProgress:A=>e({progress:A}),reset:()=>e({status:"idle",url:null,qrCode:null,error:null,progress:null})})),te=fA(e=>({isExpanded:!1,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),KA.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>e({isExpanded:!0}),collapseSidebar:()=>e({isExpanded:!1})})),KA=fA((e,A)=>({isExpanded:!1,activeResearchSessionId:null,parentSessionId:null,toggleSidebar:()=>{e(g=>{const Q=!g.isExpanded;return Q&&(iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:Q}})},expandSidebar:()=>{iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar(),e({isExpanded:!0})},collapseSidebar:()=>e({isExpanded:!1}),selectResearchSession:g=>e({activeResearchSessionId:g}),setParentSessionId:g=>{A().parentSessionId!==g&&e({parentSessionId:g,activeResearchSessionId:null})},reset:()=>e({activeResearchSessionId:null,parentSessionId:null})})),hA=fA(e=>({isExpanded:!1,selectedFile:null,allOperations:[],selectedOperationIndex:0,isDiffOpen:!1,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(iA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>{iA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar(),e({isExpanded:!0})},collapseSidebar:()=>e({isExpanded:!1,isDiffOpen:!1,selectedFile:null,allOperations:[],selectedOperationIndex:0}),openDiff:(A,g)=>e({selectedFile:A,allOperations:g,selectedOperationIndex:g.length-1,isDiffOpen:!0,isExpanded:!0}),selectOperation:A=>e({selectedOperationIndex:A}),closeDiff:()=>e({isDiffOpen:!1,selectedFile:null,allOperations:[],selectedOperationIndex:0})})),iA=fA(e=>({isExpanded:!1,activeSessionId:null,selectedFile:null,selectedFileStaged:!1,isDiffOpen:!1,isCommitModalOpen:!1,commitSessionId:null,wasSessionListCollapsed:!1,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(hA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>e({isExpanded:!0}),collapseSidebar:()=>e({isExpanded:!1,isDiffOpen:!1,selectedFile:null}),openDiff:(A,g)=>e({selectedFile:A,selectedFileStaged:g,isDiffOpen:!0,isExpanded:!0}),closeDiff:()=>e({isDiffOpen:!1,selectedFile:null}),switchFile:(A,g)=>e({selectedFile:A,selectedFileStaged:g}),openCommitModal:()=>e(A=>({isCommitModalOpen:!0,commitSessionId:A.activeSessionId})),openCommitModalForSession:A=>e({isCommitModalOpen:!0,commitSessionId:A}),closeCommitModal:()=>e({isCommitModalOpen:!1,commitSessionId:null}),setActiveSessionId:A=>e({activeSessionId:A}),setSessionListCollapsed:A=>e({wasSessionListCollapsed:A})}));function sg(){const e=iA(A=>A.isExpanded);return JA({queryKey:["git","status"],queryFn:()=>O.getGitStatus(),refetchInterval:e?5e3:!1,retry:1,staleTime:3e3})}function Xr(e,A=!1){return JA({queryKey:["git","diff",e,A],queryFn:()=>e?O.getGitDiff(e,A):null,enabled:!!e,retry:1,refetchInterval:!1})}function _r(e){return uA({mutationFn:()=>O.generateCommitMessage(e??void 0)})}function Bg(){const e=CA();return uA({mutationFn:A=>O.stageFiles(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]})}})}function hQ(){const e=CA();return uA({mutationFn:A=>O.unstageFiles(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]})}})}function jB(){const e=CA();return uA({mutationFn:A=>O.restoreFiles(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]})}})}function TB(){const e=CA();return uA({mutationFn:A=>O.deleteFiles(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]})}})}function $r(){const e=CA();return uA({mutationFn:A=>O.commitChanges(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]}),e.invalidateQueries({queryKey:["git","branch"]})}})}function An(){const e=CA();return uA({mutationFn:()=>O.pushCommits(),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]}),e.invalidateQueries({queryKey:["git","branch"]})}})}function en(){const e=CA();return uA({mutationFn:()=>O.pullChanges(),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]}),e.invalidateQueries({queryKey:["git","branch"]})}})}const DQ=["image/png","image/jpeg","image/gif","image/webp"],wQ=["application/pdf"],YB=["text/plain","text/markdown","text/x-markdown","application/json","text/csv","text/xml","application/xml","text/yaml","text/x-yaml","application/x-yaml","text/html","text/css","text/javascript","application/javascript","application/typescript"],HB=[".txt",".md",".markdown",".json",".csv",".xml",".yaml",".yml",".html",".css",".js",".ts",".jsx",".tsx",".py",".rs",".go",".java",".c",".cpp",".h",".hpp",".rb",".php",".sh",".bash",".zsh",".toml",".ini",".cfg",".env",".log",".sql",".graphql",".svelte",".vue"],tn=[...DQ,...wQ,...YB];function gn(){return`file-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function Qn(e){if(DQ.includes(e.type))return"image";if(wQ.includes(e.type))return"pdf";if(YB.includes(e.type))return"text";const A=e.name.toLowerCase().slice(e.name.lastIndexOf("."));return HB.includes(A)?"text":null}function sn(e){if(tn.includes(e.type))return!0;const A=e.name.toLowerCase().slice(e.name.lastIndexOf("."));return HB.includes(A)}async function Cs(e){return new Promise((A,g)=>{const Q=new FileReader;Q.onload=()=>{const B=Q.result.split(",")[1];A(B)},Q.onerror=g,Q.readAsDataURL(e)})}async function Bn(e){return new Promise((A,g)=>{const Q=new FileReader;Q.onload=()=>A(Q.result),Q.onerror=g,Q.readAsText(e)})}async function on(e){return new Promise((A,g)=>{const Q=new FileReader;Q.onload=()=>A(Q.result),Q.onerror=g,Q.readAsDataURL(e)})}function an(e={}){const{maxFiles:A=10,maxSizeMB:g=10,pageWide:Q=!0,supportsImages:s=!0,supportsFileAttachments:B=!0,onError:o}=e,[a,E]=u.useState([]),[i,C]=u.useState(!1),[I,c]=u.useState(null),r=g*1024*1024,n=u.useCallback(w=>!s&&DQ.includes(w.type)?"This model does not support image attachments":!B&&wQ.includes(w.type)?"This model does not support PDF attachments":sn(w)?w.size>r?`File too large: ${(w.size/1024/1024).toFixed(1)}MB. Max: ${g}MB`:null:`Unsupported file type: ${w.name.slice(w.name.lastIndexOf("."))||w.type||"unknown"}`,[r,g,s,B]),l=u.useCallback(async w=>{c(null);const G=Array.from(w),p=A-a.length;if(p<=0){const U=`Maximum ${A} files allowed`;c(U),o?.(U);return}const F=G.slice(0,p),y=[];for(const U of F){const K=n(U);if(K){c(K),o?.(K);continue}const j=Qn(U);if(j)try{let L,R,q,J=U.type;if(j==="image")[L,R]=await Promise.all([on(U),Cs(U)]);else if(j==="pdf")R=await Cs(U),J="application/pdf";else if(q=await Bn(U),R=q,!J){const H=U.name.toLowerCase();J=H.endsWith(".md")||H.endsWith(".markdown")?"text/markdown":"text/plain"}y.push({id:gn(),file:U,type:j,name:U.name,preview:L,data:R,mediaType:J,textContent:q})}catch{const L=`Failed to process file: ${U.name}`;c(L),o?.(L)}}y.length>0&&E(U=>[...U,...y])},[a.length,A,n,o]),d=u.useCallback(w=>{E(G=>G.filter(p=>p.id!==w)),c(null)},[]),D=u.useCallback(()=>{E([]),c(null)},[]),m=u.useCallback(w=>{w.preventDefault(),w.stopPropagation(),w.dataTransfer.types.includes("Files")&&C(!0)},[]),h=u.useCallback(w=>{w.preventDefault(),w.stopPropagation();const G=w.currentTarget.getBoundingClientRect(),p=w.clientX,F=w.clientY;(p<G.left||p>G.right||F<G.top||F>G.bottom)&&C(!1)},[]),x=u.useCallback(w=>{w.preventDefault(),w.stopPropagation()},[]),f=u.useCallback(w=>{w.preventDefault(),w.stopPropagation(),C(!1);const G=w.dataTransfer.files;G.length>0&&l(Array.from(G))},[l]),N=u.useCallback(w=>{const G=w.clipboardData?.items;if(!G)return;const p=[];for(const F of Array.from(G))if(F.kind==="file"){const y=F.getAsFile();y&&p.push(y)}p.length>0&&(w.preventDefault(),l(p))},[l]);u.useEffect(()=>{if(!Q)return;let w=0;const G=U=>{U.preventDefault(),U.dataTransfer?.types.includes("Files")&&(w++,w===1&&C(!0))},p=U=>{U.preventDefault(),w--,w===0&&C(!1)},F=U=>{U.preventDefault()},y=U=>{U.preventDefault(),w=0,C(!1);const K=U.dataTransfer?.files;K&&K.length>0&&l(Array.from(K))};return document.addEventListener("dragenter",G),document.addEventListener("dragleave",p),document.addEventListener("dragover",F),document.addEventListener("drop",y),()=>{document.removeEventListener("dragenter",G),document.removeEventListener("dragleave",p),document.removeEventListener("dragover",F),document.removeEventListener("drop",y)}},[Q,l]);const M=a.filter(w=>w.type==="image"),k=a.filter(w=>w.type==="pdf"||w.type==="text");return{files:a,images:M,documents:k,isDragging:i,error:I,addFiles:l,removeFile:d,clearFiles:D,handleDragEnter:m,handleDragLeave:h,handleDragOver:x,handleDrop:f,handlePaste:N}}const Hg=fA((e,A)=>({pendingRestoreText:null,setPendingRestoreText:g=>e({pendingRestoreText:g}),consumeRestoreText:()=>{const g=A().pendingRestoreText;return e({pendingRestoreText:null}),g}})),Kt=fA((e,A)=>({pendingContexts:new Map,addContext:(g,Q)=>{e(s=>{const B=new Map(s.pendingContexts),o=B.get(g)||[];return o.some(a=>a.id===Q.id)||B.set(g,[...o,Q]),{pendingContexts:B}})},removeContext:(g,Q)=>{e(s=>{const B=new Map(s.pendingContexts),o=B.get(g)||[];return B.set(g,o.filter(a=>a.id!==Q)),{pendingContexts:B}})},getContexts:g=>A().pendingContexts.get(g)||[],clearContexts:g=>{e(Q=>{const s=new Map(Q.pendingContexts);return s.delete(g),{pendingContexts:s}})},consumeContexts:g=>{const Q=A().getContexts(g);return A().clearContexts(g),Q}})),En=/<research-context\s+from="([^"]+)"\s+label="([^"]+)"[^>]*>([\s\S]*?)<\/research-context>/g;function Cn(e){const A=[];let g=e;const Q=new RegExp(En);let s=Q.exec(e);for(;s!==null;){const[B,o,a,E]=s;A.push({id:o,from:o,label:a,content:E.trim()}),g=g.replace(B,""),s=Q.exec(e)}return g=g.trim(),{researchContexts:A,cleanContent:g}}function rn(e){return e.length===0?"":e.map(A=>A.content).join(`
|
|
80
|
+
`,h-1)+1,f=h-x,N=x+Math.min(m,f);r.setSelectionRange(N,N)}return!0}return!1},[o,A,g,Q,E,i,C]);return{vimMode:s,setVimMode:B,handleVimNormalMode:I}}function vr(){const[e,A]=u.useState(!1),[g,Q]=u.useState(""),[s,B]=u.useState(0),[o,a]=u.useState(),E=u.useCallback((I,c,r)=>{const n=c.current;if(!n)return;const l=n.value,d=n.selectionStart,m=l.slice(0,d).match(/@(\S*)$/);if(!m)return;const h=d-m[0].length,x=`${l.slice(0,h)}@${I} ${l.slice(d)}`;r(x),A(!1),setTimeout(()=>{const f=h+I.length+2;n.setSelectionRange(f,f),n.focus()},0)},[]),i=u.useCallback(I=>{a(I)},[]),C=u.useCallback((I,c)=>{const n=I.slice(0,c).match(/@(\S*)$/);n?(A(!0),Q(n[1]),B(0)):A(!1)},[]);return{showFileMention:e,mentionQuery:g,mentionSelectedIndex:s,currentFileToSelect:o,setShowFileMention:A,setMentionQuery:Q,setMentionSelectedIndex:B,setCurrentFileToSelect:a,handleFileSelect:E,handleEnterSelect:i,checkForMention:C}}function jr({onCommand:e,updatePreferences:A,vimModeEnabled:g,reasoningEnabled:Q,textareaRef:s,setMessage:B,setShowShortcutsModal:o,sessionId:a}){const[E,i]=u.useState(!1),[C,I]=u.useState(""),[c,r]=u.useState(0),[n,l]=u.useState(),d=u.useCallback(async h=>{const x=()=>{B(""),i(!1),s.current&&(s.current.style.height="auto"),s.current?.focus()};if(h==="help"){o(!0),x();return}if(h==="vim"){A({vimMode:!g}),x();return}if(h==="reasoning"){A({reasoningEnabled:!Q}),x();return}if(h==="stop"){if(a)try{await O.abortSession(a)}catch(f){console.error("Failed to stop generation:",f)}x();return}e&&e(h),x()},[e,g,Q,A,s,B,o,a]),D=u.useCallback(h=>{l(h)},[]),m=u.useCallback(h=>{h.startsWith("/")&&!h.includes(" ")?(i(!0),I(h.slice(1)),r(0)):i(!1)},[]);return{showCommandSuggestions:E,commandQuery:C,commandSelectedIndex:c,currentCommandToSelect:n,setShowCommandSuggestions:i,setCommandQuery:I,setCommandSelectedIndex:r,setCurrentCommandToSelect:l,handleCommandSelect:d,handleCommandEnterSelect:D,checkForCommand:m}}function Tr(e){return A=>{const{showFileMention:g,showCommandSuggestions:Q,mentionSelectedIndex:s,commandSelectedIndex:B,currentFileToSelect:o,currentCommandToSelect:a,isPlanMode:E,vimModeEnabled:i,vimMode:C,setMentionSelectedIndex:I,setCommandSelectedIndex:c,setShowFileMention:r,setShowCommandSuggestions:n,setIsPlanMode:l,setVimMode:d,handleFileSelect:D,handleCommandSelect:m,handleSend:h,handleVimNormalMode:x,onPlanModeToggle:f}=e;if(Q){const N=qB.length;A.key==="ArrowDown"||A.ctrlKey&&A.key==="j"?(A.preventDefault(),c((B+1)%N)):A.key==="ArrowUp"||A.ctrlKey&&A.key==="k"?(A.preventDefault(),c((B-1+N)%N)):A.key==="Enter"?(A.preventDefault(),a&&m(a)):A.key==="Escape"&&(A.preventDefault(),n(!1));return}if(g){A.key==="ArrowDown"||A.ctrlKey&&A.key==="j"?(A.preventDefault(),I((s+1)%20)):A.key==="ArrowUp"||A.ctrlKey&&A.key==="k"?(A.preventDefault(),I((s-1+20)%20)):A.key==="Enter"?(A.preventDefault(),o&&D(o)):A.key==="Escape"&&(A.preventDefault(),r(!1),i&&d("normal"));return}if(!(i&&C==="normal"&&x(A))){if(i&&C==="insert"&&A.key==="Escape"){A.preventDefault(),d("normal");return}if(A.key==="Tab"){A.preventDefault();const N=!E;l(N),f?.(N)}else A.key==="Enter"&&!A.shiftKey&&(!i||C==="normal")&&(A.preventDefault(),h())}}}const EA=fA(e=>({balance:null,usdcBalance:null,network:"mainnet",isPaymentPending:!1,lastPaymentAmount:null,walletAddress:null,isLoading:!1,isTopupModalOpen:!1,setBalance:A=>e({balance:A}),setUsdcBalance:A=>e({usdcBalance:A}),setNetwork:A=>e({network:A}),setPaymentPending:A=>e({isPaymentPending:A}),setLastPaymentAmount:A=>e({lastPaymentAmount:A}),setWalletAddress:A=>e({walletAddress:A}),setLoading:A=>e({isLoading:A}),openTopupModal:()=>e({isTopupModalOpen:!0}),closeTopupModal:()=>e({isTopupModalOpen:!1})})),Yr=u.memo(u.forwardRef(function({onSend:A,onCommand:g,disabled:Q,onConfigClick:s,onPlanModeToggle:B,isPlanMode:o,reasoningEnabled:a,sessionId:E,images:i=[],documents:C=[],onFileRemove:I,isDragging:c=!1,onPaste:r,visionEnabled:n=!1,attachmentEnabled:l=!1,modelName:d,providerName:D,authType:m,researchContexts:h=[],onResearchContextRemove:x,onRefreshBalance:f,isBalanceLoading:N=!1,onModelInfoClick:M,agent:k,agents:w=[],onAgentChange:G},p){const[F,y]=u.useState(""),[U,K]=u.useState(o||!1),[j,L]=u.useState(!1),[R,q]=u.useState(!1),J=u.useRef(null),H=u.useRef(null),{data:W,isLoading:tA}=qr(),{preferences:_,updatePreferences:rA}=wt(),UA=W?.files||[],Y=W?.changedFiles||[],QA=EA(X=>X.balance),NA=D==="setu";u.useEffect(()=>{if(!R)return;const X=jA=>{H.current&&!H.current.contains(jA.target)&&q(!1)};return document.addEventListener("mousedown",X),()=>document.removeEventListener("mousedown",X)},[R]);const kA=u.useRef(()=>{}),{showFileMention:OA,mentionQuery:v,mentionSelectedIndex:sA,currentFileToSelect:RA,setShowFileMention:wA,setMentionSelectedIndex:VA,setCurrentFileToSelect:GA,handleFileSelect:pe,handleEnterSelect:ce,checkForMention:se}=vr(),{showCommandSuggestions:ge,commandQuery:Fe,commandSelectedIndex:be,currentCommandToSelect:P,setShowCommandSuggestions:gA,setCommandSelectedIndex:BA,setCurrentCommandToSelect:FA,handleCommandSelect:ZA,handleCommandEnterSelect:He,checkForCommand:vA}=jr({onCommand:g,updatePreferences:rA,vimModeEnabled:_.vimMode,reasoningEnabled:_.reasoningEnabled,textareaRef:J,setMessage:y,setShowShortcutsModal:L,sessionId:E}),{vimMode:de,setVimMode:me,handleVimNormalMode:gt}=Or({enabled:_.vimMode,onSend:()=>kA.current(),textareaRef:J,setMessage:y});u.useEffect(()=>{J.current?.focus()},[]),u.useEffect(()=>{o!==void 0&&K(o)},[o]),u.useImperativeHandle(p,()=>({focus:()=>{J.current?.focus()},setValue:X=>{y(X),J.current?.focus()}}));const Qt=u.useCallback(()=>{const X=J.current;X&&(X.style.height="auto",X.style.height=`${X.scrollHeight}px`)},[]);u.useEffect(()=>{Qt()},[Qt,F]);const Cg=u.useCallback(()=>{wA(!1),GA(void 0)},[wA,GA]),rg=u.useCallback(()=>{gA(!1),FA(void 0)},[gA,FA]),st=u.useCallback(X=>{pe(X,J,y)},[pe]),xe=u.useCallback(()=>{!F.trim()||Q||(A(F),y(""),wA(!1),gA(!1),GA(void 0),FA(void 0),J.current&&(J.current.style.height="auto"),_.vimMode&&me("normal"),J.current?.focus())},[F,Q,A,_.vimMode,wA,gA,GA,FA,me]);u.useEffect(()=>{kA.current=xe},[xe]);const Bt=u.useCallback(X=>{if(_.vimMode&&de==="normal")return;const jA=X.target.value;y(jA),vA(jA),jA.startsWith("/")&&!jA.includes(" ")?(wA(!1),GA(void 0)):(gA(!1),FA(void 0),se(jA,X.target.selectionStart))},[_.vimMode,de,vA,wA,GA,gA,FA,se]),ng=u.useMemo(()=>Tr({showFileMention:OA,showCommandSuggestions:ge,mentionSelectedIndex:sA,commandSelectedIndex:be,currentFileToSelect:RA,currentCommandToSelect:P,isPlanMode:U,vimModeEnabled:_.vimMode,vimMode:de,setMentionSelectedIndex:VA,setCommandSelectedIndex:BA,setShowFileMention:wA,setShowCommandSuggestions:gA,setIsPlanMode:K,setVimMode:me,handleFileSelect:st,handleCommandSelect:ZA,handleSend:xe,handleVimNormalMode:gt,onPlanModeToggle:B}),[OA,ge,sA,be,RA,P,U,_.vimMode,de,VA,BA,wA,gA,me,st,ZA,xe,gt,B]);u.useEffect(()=>{_.vimMode||me("insert")},[_.vimMode,me]);const Ig=u.useCallback(X=>{r?.(X)},[r]),lg=i.length>0,cg=C.length>0,Pe=lg||cg;return t.jsxs(t.Fragment,{children:[c&&(()=>{const X=n||l,jA=[...n?["Images"]:[],...l?["PDF"]:[],"Markdown","Text"].join(", ");return t.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-background/80 backdrop-blur-sm pointer-events-none",children:t.jsxs("div",{className:`flex flex-col items-center gap-4 p-8 rounded-2xl border-2 border-dashed ${X?"bg-card border-primary/50":"bg-card border-muted-foreground/30"}`,children:[t.jsx("div",{className:`p-4 rounded-full ${X?"bg-primary/10":"bg-muted"}`,children:t.jsx(Ne,{className:`w-12 h-12 ${X?"text-primary":"text-muted-foreground"}`})}),t.jsxs("div",{className:"text-center",children:[t.jsx("p",{className:"text-lg font-medium text-foreground",children:"Drop files here"}),t.jsxs("p",{className:"text-sm text-muted-foreground",children:[jA," up to 10MB"]})]})]})})})(),t.jsx("div",{className:"absolute bottom-0 left-0 right-0 pt-16 pb-5 md:pb-6 px-2 md:px-4 bg-gradient-to-t from-background via-background to-transparent pointer-events-none z-20 safe-area-inset-bottom",children:t.jsxs("div",{className:"max-w-3xl mx-auto pointer-events-auto relative",children:[_.vimMode&&de==="normal"&&t.jsx("div",{className:"absolute -top-6 right-0 px-2 py-0.5 text-xs font-mono font-semibold bg-amber-500/90 text-white rounded shadow-sm",children:"NORMAL"}),_.vimMode&&de==="insert"&&t.jsx("div",{className:"absolute -top-6 right-0 px-2 py-0.5 text-xs font-mono font-semibold bg-green-500/90 text-white rounded shadow-sm",children:"INSERT"}),t.jsxs("div",{className:`relative flex flex-col rounded-3xl p-1 transition-all touch-manipulation ${U?"bg-slate-100 dark:bg-slate-900/40 border border-slate-300 dark:border-slate-700 focus-within:border-slate-400 dark:focus-within:border-slate-600 focus-within:ring-1 focus-within:ring-slate-300 dark:focus-within:ring-slate-700":"bg-card border border-border focus-within:border-primary/60 focus-within:ring-1 focus-within:ring-primary/40"}`,children:[Pe&&t.jsxs("div",{className:"flex flex-wrap gap-2 px-3 pt-2 pb-1",children:[i.map(X=>t.jsxs("div",{className:"relative group w-12 h-12 rounded-lg overflow-hidden bg-muted",children:[t.jsx("img",{src:X.preview,alt:"Attachment",className:"w-full h-full object-cover"}),t.jsx("button",{type:"button",onClick:()=>I?.(X.id),className:"absolute top-0 right-0 p-0.5 bg-black/60 rounded-bl-md opacity-0 group-hover:opacity-100 transition-opacity",children:t.jsx(yA,{className:"w-3 h-3 text-white"})})]},X.id)),C.map(X=>t.jsxs("div",{className:"relative group flex items-center gap-2 px-3 py-2 rounded-lg bg-muted max-w-[200px]",children:[X.type==="pdf"?t.jsx(Ne,{className:"w-4 h-4 text-red-500 flex-shrink-0"}):t.jsx(zt,{className:"w-4 h-4 text-blue-500 flex-shrink-0"}),t.jsx("span",{className:"text-xs truncate",children:X.name}),t.jsx("button",{type:"button",onClick:()=>I?.(X.id),className:"absolute top-0 right-0 p-0.5 bg-black/60 rounded-bl-md opacity-0 group-hover:opacity-100 transition-opacity",children:t.jsx(yA,{className:"w-3 h-3 text-white"})})]},X.id))]}),h.length>0&&t.jsx("div",{className:"flex flex-wrap gap-2 px-3 pt-2 pb-1",children:h.map(X=>t.jsxs("div",{className:"relative group flex items-center gap-2 px-3 py-2 rounded-lg bg-teal-500/10 border border-teal-500/30 max-w-[200px]",children:[t.jsx(rt,{className:"w-4 h-4 text-teal-500 flex-shrink-0"}),t.jsx("span",{className:"text-xs truncate text-teal-600 dark:text-teal-400",children:X.label}),x&&t.jsx("button",{type:"button",onClick:()=>x(X.id),className:"absolute top-0 right-0 p-0.5 bg-black/60 rounded-bl-md opacity-0 group-hover:opacity-100 transition-opacity",children:t.jsx(yA,{className:"w-3 h-3 text-white"})})]},X.id))}),t.jsxs("div",{className:"flex items-end gap-1",children:[s&&t.jsx("button",{type:"button",onClick:s,className:"flex items-center justify-center w-10 h-10 rounded-full hover:bg-background/50 active:bg-background/70 transition-colors text-muted-foreground hover:text-foreground flex-shrink-0 touch-manipulation",children:t.jsx(jo,{className:"w-4 h-4"})}),t.jsx(tg,{ref:J,value:F,onChange:Bt,onKeyDown:ng,onPaste:Ig,placeholder:U?"Plan mode - Type a message...":"Type a message...",disabled:Q,rows:1,className:`border-0 bg-transparent pl-1 pr-2 py-2 max-h-[200px] overflow-y-auto leading-normal resize-none scrollbar-hide text-base ${_.vimMode&&de==="normal"?"caret-[6px]":""}`,style:{height:"2.5rem"}}),t.jsx("button",{type:"button",onClick:xe,disabled:Q||!F.trim()&&!Pe,className:`flex items-center justify-center w-10 h-10 rounded-full transition-colors flex-shrink-0 touch-manipulation ${F.trim()||Pe?"bg-primary hover:bg-primary/90 active:bg-primary/80 text-primary-foreground":"bg-transparent text-muted-foreground"}`,children:t.jsx(qs,{className:"w-4 h-4"})})]})]}),(a||n||d||D||m||k)&&t.jsxs("div",{className:"grid grid-cols-3 items-center mt-1 px-3",children:[t.jsxs("div",{className:"justify-self-start flex-shrink-0 relative",ref:H,children:[k&&w.length>0&&t.jsxs("button",{type:"button",onClick:()=>q(!R),className:"text-[10px] text-muted-foreground flex items-center gap-1 transition-colors hover:text-foreground cursor-pointer",children:[t.jsx("span",{className:"uppercase font-medium",children:k}),t.jsx(To,{className:`h-2.5 w-2.5 transition-transform ${R?"rotate-180":""}`})]}),R&&t.jsx("div",{className:"absolute bottom-full left-0 mb-1 min-w-[120px] bg-popover border border-border rounded-md shadow-lg overflow-hidden z-50",children:w.map(X=>t.jsx("button",{type:"button",onClick:()=>{G?.(X),q(!1)},className:`w-full text-left px-3 py-1.5 text-xs transition-colors hover:bg-accent ${X===k?"text-foreground font-medium bg-accent/50":"text-muted-foreground"}`,children:X},X))})]}),t.jsx("div",{className:"justify-self-center",children:(D||d||m)&&t.jsxs("div",{className:"text-[10px] text-muted-foreground flex items-center gap-1 px-2 py-0.5",children:[t.jsxs("button",{type:"button",onClick:M,className:"flex items-center gap-1 transition-colors hover:text-foreground cursor-pointer",children:[D&&t.jsxs(t.Fragment,{children:[t.jsx(TA,{provider:D,size:12,className:"opacity-70"}),t.jsx("span",{className:"opacity-40",children:"/"})]}),d&&t.jsx("span",{children:d}),m&&m==="oauth"&&t.jsx("span",{className:"opacity-50",children:"(pro)"})]}),NA&&QA!==null&&t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:"text-emerald-600 dark:text-emerald-400",children:["$",QA.toFixed(2)]}),f&&t.jsx("button",{type:"button",onClick:X=>{X.stopPropagation(),f()},disabled:N,className:"p-0.5 hover:bg-background/50 rounded transition-colors disabled:opacity-50",children:t.jsx(YA,{className:`h-2.5 w-2.5 text-muted-foreground ${N?"animate-spin":""}`})})]})]})}),t.jsxs("div",{className:"justify-self-end flex-shrink-0 flex items-center gap-2",children:[a&&t.jsxs("span",{className:"text-[10px] text-indigo-600 dark:text-indigo-300 flex items-center gap-1",children:[t.jsx(tQ,{className:"h-3 w-3"}),"thinking"]}),n&&t.jsxs("span",{className:"text-[10px] text-emerald-600 dark:text-emerald-400 flex items-center gap-1",children:[t.jsx(Js,{className:"h-3 w-3"}),"images"]})]})]}),OA&&!tA&&t.jsx(Er,{files:UA,changedFiles:Y,query:v,selectedIndex:sA,onSelect:st,onEnterSelect:ce,onClose:Cg}),ge&&t.jsx(wr,{query:Fe,selectedIndex:be,onSelect:ZA,onEnterSelect:He,onClose:rg,sessionId:E}),t.jsx(kr,{isOpen:j,onClose:()=>L(!1)})]})})]})})),Hr=50,De=["sessions","list"];function Pr(){return ko({queryKey:De,queryFn:({pageParam:e=0})=>O.getSessionsPage({limit:Hr,offset:e}),getNextPageParam:e=>e.nextOffset??void 0,initialPageParam:0,staleTime:3e4,refetchInterval:3e4,refetchOnWindowFocus:!1})}function gg(){const e=Pr();return{data:u.useMemo(()=>e.data?.pages?e.data.pages.flatMap(g=>g.items??[]):[],[e.data]),isLoading:e.isLoading,isError:e.isError,error:e.error,hasNextPage:e.hasNextPage,fetchNextPage:e.fetchNextPage,isFetchingNextPage:e.isFetchingNextPage}}function uQ(e){const{data:A}=gg();return A?.find(g=>g.id===e)}function Wr(){const e=CA();return uA({mutationFn:A=>O.createSession(A),onSuccess:A=>{e.setQueryData(De,g=>{if(!g)return g;const Q=g.pages[0];return Q?{...g,pages:[{...Q,items:[A,...Q.items]},...g.pages.slice(1)]}:g}),e.invalidateQueries({queryKey:De})}})}function vB(e){const A=CA();return uA({mutationFn:g=>O.updateSession(e,g),onSuccess:async()=>{await A.invalidateQueries({queryKey:De}),await A.invalidateQueries({queryKey:["session",e]})}})}function zr(){const e=CA();return uA({mutationFn:A=>O.deleteSession(A),onSuccess:()=>{e.invalidateQueries({queryKey:De})}})}function Ht(e){return JA({queryKey:["messages",e],queryFn:()=>{if(!e)throw new Error("Session ID is required");return O.getMessages(e)},enabled:!!e})}function Vr(e){const A=CA();return uA({mutationFn:g=>O.sendMessage(e,g),onSuccess:()=>{A.invalidateQueries({queryKey:["messages",e]}),A.invalidateQueries({queryKey:De})}})}function Qg(){return JA({queryKey:["config"],queryFn:()=>O.getConfig(),staleTime:3e4})}function pt(){return JA({queryKey:["models","all"],queryFn:()=>O.getAllModels()})}function Zr(){const e=CA();return uA({mutationFn:A=>O.updateDefaults(A),onSuccess:()=>{e.invalidateQueries({queryKey:["config"]})}})}const pA=fA(e=>({isExpanded:!1,selectedFile:null,isViewerOpen:!1,expandedDirs:new Set,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>{iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),e({isExpanded:!0})},collapseSidebar:()=>e({isExpanded:!1,isViewerOpen:!1,selectedFile:null}),openFile:A=>e({selectedFile:A,isViewerOpen:!0}),closeViewer:()=>e({isViewerOpen:!1,selectedFile:null}),toggleDir:A=>e(g=>{const Q=new Set(g.expandedDirs);return Q.has(A)?Q.delete(A):Q.add(A),{expandedDirs:Q}})})),oA=fA(e=>({isExpanded:!1,status:"idle",url:null,qrCode:null,error:null,progress:null,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),te.getState().collapseSidebar(),KA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>{iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),te.getState().collapseSidebar(),KA.getState().collapseSidebar(),pA.getState().collapseSidebar(),e({isExpanded:!0})},collapseSidebar:()=>e({isExpanded:!1}),setStatus:A=>e({status:A}),setUrl:A=>e({url:A}),setQrCode:A=>e({qrCode:A}),setError:A=>e({error:A}),setProgress:A=>e({progress:A}),reset:()=>e({status:"idle",url:null,qrCode:null,error:null,progress:null})})),te=fA(e=>({isExpanded:!1,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),KA.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>e({isExpanded:!0}),collapseSidebar:()=>e({isExpanded:!1})})),KA=fA((e,A)=>({isExpanded:!1,activeResearchSessionId:null,parentSessionId:null,toggleSidebar:()=>{e(g=>{const Q=!g.isExpanded;return Q&&(iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:Q}})},expandSidebar:()=>{iA.getState().collapseSidebar(),hA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar(),e({isExpanded:!0})},collapseSidebar:()=>e({isExpanded:!1}),selectResearchSession:g=>e({activeResearchSessionId:g}),setParentSessionId:g=>{A().parentSessionId!==g&&e({parentSessionId:g,activeResearchSessionId:null})},reset:()=>e({activeResearchSessionId:null,parentSessionId:null})})),hA=fA(e=>({isExpanded:!1,selectedFile:null,allOperations:[],selectedOperationIndex:0,isDiffOpen:!1,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(iA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>{iA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar(),e({isExpanded:!0})},collapseSidebar:()=>e({isExpanded:!1,isDiffOpen:!1,selectedFile:null,allOperations:[],selectedOperationIndex:0}),openDiff:(A,g)=>e({selectedFile:A,allOperations:g,selectedOperationIndex:g.length-1,isDiffOpen:!0,isExpanded:!0}),selectOperation:A=>e({selectedOperationIndex:A}),closeDiff:()=>e({isDiffOpen:!1,selectedFile:null,allOperations:[],selectedOperationIndex:0})})),iA=fA(e=>({isExpanded:!1,activeSessionId:null,selectedFile:null,selectedFileStaged:!1,isDiffOpen:!1,isCommitModalOpen:!1,commitSessionId:null,wasSessionListCollapsed:!1,toggleSidebar:()=>{e(A=>{const g=!A.isExpanded;return g&&(hA.getState().collapseSidebar(),KA.getState().collapseSidebar(),te.getState().collapseSidebar(),oA.getState().collapseSidebar(),pA.getState().collapseSidebar()),{isExpanded:g}})},expandSidebar:()=>e({isExpanded:!0}),collapseSidebar:()=>e({isExpanded:!1,isDiffOpen:!1,selectedFile:null}),openDiff:(A,g)=>e({selectedFile:A,selectedFileStaged:g,isDiffOpen:!0,isExpanded:!0}),closeDiff:()=>e({isDiffOpen:!1,selectedFile:null}),switchFile:(A,g)=>e({selectedFile:A,selectedFileStaged:g}),openCommitModal:()=>e(A=>({isCommitModalOpen:!0,commitSessionId:A.activeSessionId})),openCommitModalForSession:A=>e({isCommitModalOpen:!0,commitSessionId:A}),closeCommitModal:()=>e({isCommitModalOpen:!1,commitSessionId:null}),setActiveSessionId:A=>e({activeSessionId:A}),setSessionListCollapsed:A=>e({wasSessionListCollapsed:A})}));function sg(){const e=iA(A=>A.isExpanded);return JA({queryKey:["git","status"],queryFn:()=>O.getGitStatus(),refetchInterval:e?5e3:!1,retry:1,staleTime:3e3})}function Xr(e,A=!1){return JA({queryKey:["git","diff",e,A],queryFn:()=>e?O.getGitDiff(e,A):null,enabled:!!e,retry:1,refetchInterval:!1})}function _r(e){return uA({mutationFn:()=>O.generateCommitMessage(e??void 0)})}function Bg(){const e=CA();return uA({mutationFn:A=>O.stageFiles(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]})}})}function hQ(){const e=CA();return uA({mutationFn:A=>O.unstageFiles(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]})}})}function jB(){const e=CA();return uA({mutationFn:A=>O.restoreFiles(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]})}})}function TB(){const e=CA();return uA({mutationFn:A=>O.deleteFiles(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]})}})}function $r(){const e=CA();return uA({mutationFn:A=>O.commitChanges(A),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]}),e.invalidateQueries({queryKey:["git","branch"]})}})}function An(){const e=CA();return uA({mutationFn:()=>O.pushCommits(),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]}),e.invalidateQueries({queryKey:["git","branch"]})}})}function en(){const e=CA();return uA({mutationFn:()=>O.pullChanges(),onSuccess:()=>{e.invalidateQueries({queryKey:["git","status"]}),e.invalidateQueries({queryKey:["git","branch"]})}})}const DQ=["image/png","image/jpeg","image/gif","image/webp"],wQ=["application/pdf"],YB=["text/plain","text/markdown","text/x-markdown","application/json","text/csv","text/xml","application/xml","text/yaml","text/x-yaml","application/x-yaml","text/html","text/css","text/javascript","application/javascript","application/typescript"],HB=[".txt",".md",".markdown",".json",".csv",".xml",".yaml",".yml",".html",".css",".js",".ts",".jsx",".tsx",".py",".rs",".go",".java",".c",".cpp",".h",".hpp",".rb",".php",".sh",".bash",".zsh",".toml",".ini",".cfg",".env",".log",".sql",".graphql",".svelte",".vue"],tn=[...DQ,...wQ,...YB];function gn(){return`file-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}function Qn(e){if(DQ.includes(e.type))return"image";if(wQ.includes(e.type))return"pdf";if(YB.includes(e.type))return"text";const A=e.name.toLowerCase().slice(e.name.lastIndexOf("."));return HB.includes(A)?"text":null}function sn(e){if(tn.includes(e.type))return!0;const A=e.name.toLowerCase().slice(e.name.lastIndexOf("."));return HB.includes(A)}async function Cs(e){return new Promise((A,g)=>{const Q=new FileReader;Q.onload=()=>{const B=Q.result.split(",")[1];A(B)},Q.onerror=g,Q.readAsDataURL(e)})}async function Bn(e){return new Promise((A,g)=>{const Q=new FileReader;Q.onload=()=>A(Q.result),Q.onerror=g,Q.readAsText(e)})}async function on(e){return new Promise((A,g)=>{const Q=new FileReader;Q.onload=()=>A(Q.result),Q.onerror=g,Q.readAsDataURL(e)})}function an(e={}){const{maxFiles:A=10,maxSizeMB:g=10,pageWide:Q=!0,supportsImages:s=!0,supportsFileAttachments:B=!0,onError:o}=e,[a,E]=u.useState([]),[i,C]=u.useState(!1),[I,c]=u.useState(null),r=g*1024*1024,n=u.useCallback(w=>!s&&DQ.includes(w.type)?"This model does not support image attachments":!B&&wQ.includes(w.type)?"This model does not support PDF attachments":sn(w)?w.size>r?`File too large: ${(w.size/1024/1024).toFixed(1)}MB. Max: ${g}MB`:null:`Unsupported file type: ${w.name.slice(w.name.lastIndexOf("."))||w.type||"unknown"}`,[r,g,s,B]),l=u.useCallback(async w=>{c(null);const G=Array.from(w),p=A-a.length;if(p<=0){const U=`Maximum ${A} files allowed`;c(U),o?.(U);return}const F=G.slice(0,p),y=[];for(const U of F){const K=n(U);if(K){c(K),o?.(K);continue}const j=Qn(U);if(j)try{let L,R,q,J=U.type;if(j==="image")[L,R]=await Promise.all([on(U),Cs(U)]);else if(j==="pdf")R=await Cs(U),J="application/pdf";else if(q=await Bn(U),R=q,!J){const H=U.name.toLowerCase();J=H.endsWith(".md")||H.endsWith(".markdown")?"text/markdown":"text/plain"}y.push({id:gn(),file:U,type:j,name:U.name,preview:L,data:R,mediaType:J,textContent:q})}catch{const L=`Failed to process file: ${U.name}`;c(L),o?.(L)}}y.length>0&&E(U=>[...U,...y])},[a.length,A,n,o]),d=u.useCallback(w=>{E(G=>G.filter(p=>p.id!==w)),c(null)},[]),D=u.useCallback(()=>{E([]),c(null)},[]),m=u.useCallback(w=>{w.preventDefault(),w.stopPropagation(),w.dataTransfer.types.includes("Files")&&C(!0)},[]),h=u.useCallback(w=>{w.preventDefault(),w.stopPropagation();const G=w.currentTarget.getBoundingClientRect(),p=w.clientX,F=w.clientY;(p<G.left||p>G.right||F<G.top||F>G.bottom)&&C(!1)},[]),x=u.useCallback(w=>{w.preventDefault(),w.stopPropagation()},[]),f=u.useCallback(w=>{w.preventDefault(),w.stopPropagation(),C(!1);const G=w.dataTransfer.files;G.length>0&&l(Array.from(G))},[l]),N=u.useCallback(w=>{const G=w.clipboardData?.items;if(!G)return;const p=[];for(const F of Array.from(G))if(F.kind==="file"){const y=F.getAsFile();y&&p.push(y)}p.length>0&&(w.preventDefault(),l(p))},[l]);u.useEffect(()=>{if(!Q)return;let w=0;const G=U=>{U.preventDefault(),U.dataTransfer?.types.includes("Files")&&(w++,w===1&&C(!0))},p=U=>{U.preventDefault(),w--,w===0&&C(!1)},F=U=>{U.preventDefault()},y=U=>{U.preventDefault(),w=0,C(!1);const K=U.dataTransfer?.files;K&&K.length>0&&l(Array.from(K))};return document.addEventListener("dragenter",G),document.addEventListener("dragleave",p),document.addEventListener("dragover",F),document.addEventListener("drop",y),()=>{document.removeEventListener("dragenter",G),document.removeEventListener("dragleave",p),document.removeEventListener("dragover",F),document.removeEventListener("drop",y)}},[Q,l]);const M=a.filter(w=>w.type==="image"),k=a.filter(w=>w.type==="pdf"||w.type==="text");return{files:a,images:M,documents:k,isDragging:i,error:I,addFiles:l,removeFile:d,clearFiles:D,handleDragEnter:m,handleDragLeave:h,handleDragOver:x,handleDrop:f,handlePaste:N}}const Hg=fA((e,A)=>({pendingRestoreText:null,setPendingRestoreText:g=>e({pendingRestoreText:g}),consumeRestoreText:()=>{const g=A().pendingRestoreText;return e({pendingRestoreText:null}),g}})),Kt=fA((e,A)=>({pendingContexts:new Map,addContext:(g,Q)=>{e(s=>{const B=new Map(s.pendingContexts),o=B.get(g)||[];return o.some(a=>a.id===Q.id)||B.set(g,[...o,Q]),{pendingContexts:B}})},removeContext:(g,Q)=>{e(s=>{const B=new Map(s.pendingContexts),o=B.get(g)||[];return B.set(g,o.filter(a=>a.id!==Q)),{pendingContexts:B}})},getContexts:g=>A().pendingContexts.get(g)||[],clearContexts:g=>{e(Q=>{const s=new Map(Q.pendingContexts);return s.delete(g),{pendingContexts:s}})},consumeContexts:g=>{const Q=A().getContexts(g);return A().clearContexts(g),Q}})),En=/<research-context\s+from="([^"]+)"\s+label="([^"]+)"[^>]*>([\s\S]*?)<\/research-context>/g;function Cn(e){const A=[];let g=e;const Q=new RegExp(En);let s=Q.exec(e);for(;s!==null;){const[B,o,a,E]=s;A.push({id:o,from:o,label:a,content:E.trim()}),g=g.replace(B,""),s=Q.exec(e)}return g=g.trim(),{researchContexts:A,cleanContent:g}}function rn(e){return e.length===0?"":e.map(A=>A.content).join(`
|
|
81
81
|
|
|
82
82
|
`)}function og(e){const A=EA(i=>i.setBalance),g=EA(i=>i.setUsdcBalance),Q=EA(i=>i.setWalletAddress),s=EA(i=>i.setLoading),B=EA(i=>i.balance),o=EA(i=>i.usdcBalance),a=EA(i=>i.network),E=u.useCallback(async()=>{if(e==="setu"){s(!0);try{const[i,C,I]=await Promise.all([O.getSetuBalance(),O.getSetuUsdcBalance(a),O.getSetuWallet()]);i?(A(i.balance),Q(i.walletAddress)):I?.configured&&I.publicKey&&Q(I.publicKey),C&&(g(C.usdcBalance),!i&&C.walletAddress&&Q(C.walletAddress))}catch{}finally{s(!1)}}},[e,a,A,g,Q,s]);return u.useEffect(()=>{e==="setu"&&(B===null||o===null)&&E()},[e,B,o,E]),{fetchBalance:E}}const PB=u.forwardRef(function({provider:A,model:g,onChange:Q,disabled:s=!1},B){const{data:o,isLoading:a}=pt(),[E,i]=u.useState(!1),[C,I]=u.useState(""),[c,r]=u.useState(0),n=u.useRef(null),l=u.useRef(null),d=u.useRef([]);u.useImperativeHandle(B,()=>({openAndFocus:()=>{i(!0)}}));const D=u.useMemo(()=>{if(!o)return[];const w=[];for(const[G,p]of Object.entries(o))for(const F of p.models)w.push({providerKey:G,providerLabel:p.label,modelId:F.id,modelLabel:F.label,toolCall:F.toolCall,reasoningText:F.reasoningText});return w},[o]),m=u.useMemo(()=>new Ge(D,{keys:[{name:"modelLabel",weight:2},{name:"modelId",weight:1},{name:"providerLabel",weight:.5}],threshold:.3,ignoreLocation:!0,includeScore:!0,distance:100,minMatchCharLength:1}),[D]),h=u.useMemo(()=>{if(!o)return{};if(!C.trim())return o;const G=m.search(C).sort((F,y)=>{const U=F.score??1,K=y.score??1;if(Math.abs(U-K)<.001){const j=F.item.modelLabel.toLowerCase(),L=y.item.modelLabel.toLowerCase(),R=C.toLowerCase(),q=j.indexOf(R),J=L.indexOf(R);if(q>=0&&J<0)return-1;if(J>=0&&q<0)return 1;if(q>=0&&J>=0)return q-J}return U-K}),p={};for(const F of G){const y=F.item;p[y.providerKey]||(p[y.providerKey]={label:y.providerLabel,models:[]}),p[y.providerKey].models.find(K=>K.id===y.modelId)||p[y.providerKey].models.push({id:y.modelId,label:y.modelLabel,toolCall:y.toolCall,reasoningText:y.reasoningText})}return p},[o,C,m]),x=u.useMemo(()=>{const w=[];for(const[G,p]of Object.entries(h))for(const F of p.models)w.push({providerKey:G,providerLabel:p.label,modelId:F.id,modelLabel:F.label,toolCall:F.toolCall,reasoningText:F.reasoningText});return w},[h]);u.useEffect(()=>{E&&r(0)},[E]),u.useEffect(()=>{E&&c>=0&&c<d.current.length&&d.current[c]?.scrollIntoView({block:"nearest",behavior:"smooth"})},[c,E]),u.useEffect(()=>{const w=p=>{n.current&&!n.current.contains(p.target)&&i(!1)},G=p=>{const F=p.target,y=F.tagName==="INPUT"||F.tagName==="TEXTAREA"||F.isContentEditable;(p.key==="Escape"||p.key==="q"&&!y)&&i(!1)};return E&&(document.addEventListener("mousedown",w),document.addEventListener("keydown",G),setTimeout(()=>l.current?.focus(),0)),()=>{document.removeEventListener("mousedown",w),document.removeEventListener("keydown",G)}},[E]);const f=(w,G)=>{Q(w,G),i(!1),I("")},N=w=>{if(x.length!==0){if(w.key==="ArrowDown"||w.ctrlKey&&w.key==="j")w.preventDefault(),r(G=>G<x.length-1?G+1:0);else if(w.key==="ArrowUp"||w.ctrlKey&&w.key==="k")w.preventDefault(),r(G=>G>0?G-1:x.length-1);else if(w.key==="Enter"){w.preventDefault();const G=x[c];G&&f(G.providerKey,G.modelId)}}},M=o?.[A]?.label||A,k=o?.[A]?.models.find(w=>w.id===g)?.label||g;return t.jsxs("div",{ref:n,className:"relative w-full",children:[t.jsxs("button",{type:"button",onClick:()=>!s&&i(!E),disabled:s||a,className:"w-full flex items-center justify-between px-3 py-2 bg-[hsl(var(--secondary))] border border-[hsl(var(--border))] rounded-md hover:bg-[hsl(var(--accent))] focus:outline-none focus:ring-2 focus:ring-[hsl(var(--ring))] disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:[t.jsxs("span",{className:"flex items-center gap-2 text-sm truncate",children:[t.jsx("span",{className:"text-[hsl(var(--muted-foreground))]",children:M}),t.jsx("span",{className:"text-[hsl(var(--muted-foreground))]/50",children:"/"}),t.jsx("span",{className:"text-[hsl(var(--foreground))]",children:k})]}),t.jsx($A,{className:`w-4 h-4 text-[hsl(var(--muted-foreground))] transition-transform ${E?"rotate-180":""}`})]}),E&&!a&&o&&t.jsxs("div",{className:"absolute z-50 mt-1 w-full bg-[hsl(var(--popover))] border border-[hsl(var(--border))] rounded-md shadow-lg max-h-80 overflow-hidden flex flex-col",children:[t.jsx("div",{className:"p-2 border-b border-[hsl(var(--border))]",children:t.jsxs("div",{className:"relative",children:[t.jsx(lt,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[hsl(var(--muted-foreground))]"}),t.jsx("input",{ref:l,type:"text",value:C,onChange:w=>I(w.target.value),onKeyDown:N,placeholder:"Search providers and models...",className:"w-full pl-9 pr-3 py-2 bg-[hsl(var(--secondary))] border border-[hsl(var(--border))] rounded text-sm text-[hsl(var(--foreground))] placeholder-[hsl(var(--muted-foreground))] focus:outline-none focus:ring-2 focus:ring-[hsl(var(--ring))]"})]})}),t.jsx("div",{className:"overflow-y-auto",children:Object.keys(h).length===0?t.jsx("div",{className:"p-4 text-center text-[hsl(var(--muted-foreground))] text-sm",children:"No models found"}):Object.entries(h).map(([w,G])=>t.jsxs("div",{className:"border-b border-[hsl(var(--border))] last:border-0",children:[t.jsx("div",{className:"sticky top-0 px-3 py-2 text-xs font-semibold text-[hsl(var(--muted-foreground))] uppercase tracking-wider bg-[hsl(var(--muted))] z-10",children:G.label}),t.jsx("div",{children:G.models.map(p=>{const F=w===A&&p.id===g,y=x.findIndex(K=>K.providerKey===w&&K.modelId===p.id),U=y===c;return t.jsxs("button",{ref:K=>{y>=0&&(d.current[y]=K)},type:"button",onClick:()=>f(w,p.id),onMouseEnter:()=>r(y),className:`w-full text-left px-4 py-2 text-sm flex items-center justify-between transition-colors ${U?"bg-[hsl(var(--accent))]":"hover:bg-[hsl(var(--accent))]"} ${F?"text-[hsl(var(--accent-foreground))] font-medium":"text-[hsl(var(--foreground))]"}`,children:[t.jsx("span",{className:"truncate",children:p.label}),(p.toolCall||p.reasoningText)&&t.jsxs("div",{className:"flex gap-1 ml-2 flex-shrink-0",children:[p.toolCall&&t.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-green-600/20 text-green-400 rounded",children:"Tools"}),p.reasoningText&&t.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-purple-600/20 text-purple-400 rounded",children:"Reasoning"})]})]},p.id)})})]},w))})]})]})}),nn=u.forwardRef(function({agent:A,agents:g,onChange:Q,disabled:s=!1},B){const[o,a]=u.useState(!1),[E,i]=u.useState(""),[C,I]=u.useState(0),c=u.useRef(null),r=u.useRef(null),n=u.useRef([]);u.useImperativeHandle(B,()=>({openAndFocus:()=>{a(!0)}}));const l=u.useMemo(()=>new Ge(g,{threshold:.4,ignoreLocation:!0}),[g]),d=u.useMemo(()=>E.trim()?l.search(E).map(x=>x.item):g,[g,E,l]);u.useEffect(()=>{o&&I(0)},[o]),u.useEffect(()=>{o&&C>=0&&C<n.current.length&&n.current[C]?.scrollIntoView({block:"nearest",behavior:"smooth"})},[C,o]),u.useEffect(()=>{const h=f=>{c.current&&!c.current.contains(f.target)&&a(!1)},x=f=>{const N=f.target,M=N.tagName==="INPUT"||N.tagName==="TEXTAREA"||N.isContentEditable;(f.key==="Escape"||f.key==="q"&&!M)&&a(!1)};return o&&(document.addEventListener("mousedown",h),document.addEventListener("keydown",x),setTimeout(()=>r.current?.focus(),0)),()=>{document.removeEventListener("mousedown",h),document.removeEventListener("keydown",x)}},[o]);const D=h=>{Q(h),a(!1),i("")},m=h=>{if(d.length!==0){if(h.key==="ArrowDown"||h.ctrlKey&&h.key==="j")h.preventDefault(),I(x=>x<d.length-1?x+1:0);else if(h.key==="ArrowUp"||h.ctrlKey&&h.key==="k")h.preventDefault(),I(x=>x>0?x-1:d.length-1);else if(h.key==="Enter"){h.preventDefault();const x=d[C];x&&D(x)}}};return t.jsxs("div",{ref:c,className:"relative w-full",children:[t.jsxs("button",{type:"button",onClick:()=>!s&&a(!o),disabled:s,className:"w-full flex items-center justify-between px-3 py-2 bg-[hsl(var(--secondary))] border border-[hsl(var(--border))] rounded-md hover:bg-[hsl(var(--accent))] focus:outline-none focus:ring-2 focus:ring-[hsl(var(--ring))] disabled:opacity-50 disabled:cursor-not-allowed transition-colors",children:[t.jsx("span",{className:"text-sm text-[hsl(var(--foreground))] truncate",children:A}),t.jsx($A,{className:`w-4 h-4 text-[hsl(var(--muted-foreground))] transition-transform ${o?"rotate-180":""}`})]}),o&&t.jsxs("div",{className:"absolute z-50 mt-1 w-full bg-[hsl(var(--popover))] border border-[hsl(var(--border))] rounded-md shadow-lg max-h-80 overflow-hidden flex flex-col",children:[t.jsx("div",{className:"p-2 border-b border-[hsl(var(--border))]",children:t.jsxs("div",{className:"relative",children:[t.jsx(lt,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-[hsl(var(--muted-foreground))]"}),t.jsx("input",{ref:r,type:"text",value:E,onChange:h=>i(h.target.value),onKeyDown:m,placeholder:"Search agents...",className:"w-full pl-9 pr-3 py-2 bg-[hsl(var(--secondary))] border border-[hsl(var(--border))] rounded text-sm text-[hsl(var(--foreground))] placeholder-[hsl(var(--muted-foreground))] focus:outline-none focus:ring-2 focus:ring-[hsl(var(--ring))]"})]})}),t.jsx("div",{className:"overflow-y-auto",children:d.length===0?t.jsx("div",{className:"p-4 text-center text-[hsl(var(--muted-foreground))] text-sm",children:"No agents found"}):d.map((h,x)=>{const f=h===A,N=x===C;return t.jsx("button",{ref:M=>{n.current[x]=M},type:"button",onClick:()=>D(h),onMouseEnter:()=>I(x),className:`w-full text-left px-4 py-2 text-sm transition-colors ${N?"bg-[hsl(var(--accent))]":"hover:bg-[hsl(var(--accent))]"} ${f?"text-[hsl(var(--accent-foreground))] font-medium":"text-[hsl(var(--foreground))]"}`,children:t.jsx("span",{className:"truncate",children:h})},h)})})]})]})});function In({isOpen:e,onClose:A,initialFocus:g,chatInputRef:Q,agent:s,provider:B,model:o,modelSupportsReasoning:a,onAgentChange:E,onProviderChange:i,onModelChange:C,onModelSelectorChange:I}){const{data:c,isLoading:r}=Qg(),{preferences:n,updatePreferences:l}=wt(),d=u.useRef(null),D=u.useRef(null);u.useEffect(()=>{e&&g&&setTimeout(()=>{g==="agent"?d.current?.openAndFocus():g==="model"&&D.current?.openAndFocus()},100)},[e,g]);const m=()=>{A(),setTimeout(()=>{Q?.current?.focus()},100)},h=(x,f)=>{I?I(x,f):(i(x),C(f))};return t.jsx(Ye,{isOpen:e,onClose:m,title:"Configuration",closeOnEscape:!0,closeOnBackdropClick:!0,children:r?t.jsx("div",{className:"text-center text-muted-foreground py-8",children:"Loading configuration..."}):c?t.jsxs("div",{className:"space-y-4",children:[t.jsxs("div",{children:[t.jsx("div",{className:"block text-sm font-medium text-foreground mb-2",children:"Agent"}),t.jsx(nn,{ref:d,agent:s,agents:c.agents,onChange:E})]}),t.jsxs("div",{children:[t.jsx("div",{className:"block text-sm font-medium text-foreground mb-2",children:"Provider / Model"}),t.jsx(PB,{ref:D,provider:B,model:o,onChange:h})]}),a&&t.jsxs("div",{className:"flex items-center justify-between py-2",children:[t.jsxs("div",{children:[t.jsx("div",{className:"text-sm font-medium text-foreground",children:"Extended Thinking"}),t.jsx("div",{className:"text-xs text-muted-foreground",children:"Enable reasoning for deeper analysis"})]}),t.jsx("button",{type:"button",role:"switch","aria-checked":n.reasoningEnabled,onClick:()=>l({reasoningEnabled:!n.reasoningEnabled}),className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 ${n.reasoningEnabled?"bg-primary":"bg-muted"}`,children:t.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full transition-transform ${n.reasoningEnabled?"translate-x-6":"translate-x-1"} ${n.reasoningEnabled?"bg-primary-foreground":"bg-foreground"}`})})]})]}):null})}const ln=u.memo(u.forwardRef(function({sessionId:A,userContext:g,onNewSession:Q,onDeleteSession:s},B){const o=uQ(A),[a,E]=u.useState(""),[i,C]=u.useState(""),[I,c]=u.useState(""),[r,n]=u.useState(!1),[l,d]=u.useState(null),[D,m]=u.useState(0),h=u.useRef(null),x=Vr(A);Ht(A);const f=vB(A),N=zr(),{data:M}=pt(),{data:k}=Qg(),{preferences:w}=wt(),{data:G}=sg(),p=Bg(),F=iA(P=>P.openCommitModalForSession),y=iA(P=>P.setActiveSessionId),U=CA(),K=M?.[i]?.models?.find(P=>P.id===I)?.reasoningText,j=M?.[i]?.models?.find(P=>P.id===I)?.vision,L=M?.[i]?.models?.find(P=>P.id===I)?.attachment,{images:R,documents:q,isDragging:J,removeFile:H,clearFiles:W,handlePaste:tA}=an({supportsImages:!!j,supportsFileAttachments:!!L,onError:AA.error}),_=Kt(P=>P.pendingContexts),rA=Kt(P=>P.removeContext),UA=Kt(P=>P.consumeContexts),Y=_.get(A)||[],QA=u.useMemo(()=>Y.map(P=>({id:P.id,label:P.label})),[Y]),NA=u.useCallback(P=>{rA(A,P)},[A,rA]),kA=M?.[i]?.authType,{fetchBalance:OA}=og(i),v=EA(P=>P.isLoading);u.useEffect(()=>{o&&(E(o.agent),C(o.provider),c(o.model))},[o]),u.useEffect(()=>(y(A),()=>y(null)),[A,y]),u.useEffect(()=>{m(P=>P+1)},[]);const sA=Hg(P=>P.pendingRestoreText),RA=Hg(P=>P.consumeRestoreText);u.useEffect(()=>{if(sA){const P=RA();P&&h.current?.setValue(P)}},[sA,RA]),u.useImperativeHandle(B,()=>({focus:()=>{h.current?.focus()}}));const wA=u.useCallback(async P=>{try{const gA=UA(A),BA=rn(gA),FA=BA?`${BA}
|
|
83
83
|
|
|
@@ -110,7 +110,7 @@ Please help me fix this.`:`I got a git error:
|
|
|
110
110
|
|
|
111
111
|
${w.message}
|
|
112
112
|
|
|
113
|
-
Please help me fix this.`;d(w.id),A?.(G)},[A,d]);if(!g)return null;const f=[...B?.conflicted||[],...B?.staged||[],...B?.unstaged||[],...B?.untracked||[]].length,N=B&&B.ahead>0,M=B&&B.behind>0,k=C.isPending||I.isPending;return t.jsxs("div",{className:"border-l border-border bg-background flex h-full relative",style:{width:s},children:[t.jsx(At,{panelKey:Ds,side:"right",minWidth:YI,maxWidth:HI,defaultWidth:ws}),t.jsxs("div",{className:"flex-1 flex flex-col h-full min-w-0 w-full",children:[t.jsxs("div",{className:"h-14 border-b border-border px-3 flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[t.jsx(Ae,{className:"w-4 h-4 text-muted-foreground"}),t.jsxs("span",{className:"font-medium text-foreground",children:["Git Changes",f>0&&t.jsxs("span",{className:"ml-2 text-xs text-muted-foreground",children:["(",f,")"]})]})]}),t.jsx(eA,{variant:"ghost",size:"icon",onClick:Q,title:"Close sidebar",children:t.jsx(xA,{className:"w-4 h-4"})})]}),t.jsx("div",{className:"flex-1 overflow-y-auto",children:o?t.jsx("div",{className:"p-4 text-sm text-muted-foreground",children:"Loading git status..."}):a?t.jsx("div",{className:"p-3 text-sm text-muted-foreground",children:t.jsxs("div",{className:"flex flex-col gap-2",children:[t.jsx("span",{className:"text-orange-500",children:a instanceof Error?a.message:"Failed to load git status"}),t.jsx(eA,{variant:"secondary",size:"sm",onClick:n,children:"Retry"})]})}):!B||f===0?t.jsx("div",{className:"p-3 text-sm text-muted-foreground",children:"No changes detected"}):t.jsx(TI,{status:B})}),c.length>0&&t.jsx("div",{className:"border-t border-border",children:c.map(w=>t.jsxs("div",{className:"px-3 py-2 text-xs border-b border-border last:border-b-0 bg-orange-50 dark:bg-orange-950/20 flex items-start gap-2",children:[t.jsx("span",{className:"text-orange-500 flex-1 min-w-0 break-words",children:w.message}),t.jsxs("div",{className:"flex items-center gap-1 flex-shrink-0",children:[A&&t.jsxs("button",{type:"button",onClick:()=>h(w),className:"flex items-center gap-1 text-[10px] px-1.5 py-0.5 rounded bg-primary/10 text-primary hover:bg-primary/20 transition-colors",title:"Fix with AI",children:[t.jsx(Le,{className:"w-3 h-3"}),"Fix"]}),t.jsx("button",{type:"button",onClick:()=>d(w.id),className:"text-muted-foreground hover:text-foreground transition-colors p-0.5",title:"Dismiss",children:t.jsx(yA,{className:"w-3 h-3"})})]})]},w.id))}),t.jsxs("div",{className:"h-12 border-t border-border flex items-center gap-1 px-2",children:[t.jsxs(eA,{variant:"secondary",size:"sm",onClick:m,disabled:k,title:M?`Pull ${B?.behind} commit(s) from remote`:"Pull from remote",className:"flex-1 h-8 text-xs gap-1.5",children:[t.jsx(ta,{className:`w-3.5 h-3.5 ${I.isPending?"animate-pulse":""}`}),"Pull",M&&t.jsxs("span",{className:"text-orange-500",children:["↓",B?.behind]})]}),t.jsxs(eA,{variant:"secondary",size:"sm",onClick:D,disabled:!N||k,title:N?`Push ${B?.ahead} commit(s) to remote`:"Nothing to push",className:"flex-1 h-8 text-xs gap-1.5",children:[t.jsx(ga,{className:`w-3.5 h-3.5 ${C.isPending?"animate-pulse":""}`}),"Push",N&&t.jsxs("span",{className:"text-green-500",children:["↑",B?.ahead]})]})]}),t.jsxs("div",{className:"h-
|
|
113
|
+
Please help me fix this.`;d(w.id),A?.(G)},[A,d]);if(!g)return null;const f=[...B?.conflicted||[],...B?.staged||[],...B?.unstaged||[],...B?.untracked||[]].length,N=B&&B.ahead>0,M=B&&B.behind>0,k=C.isPending||I.isPending;return t.jsxs("div",{className:"border-l border-border bg-background flex h-full relative",style:{width:s},children:[t.jsx(At,{panelKey:Ds,side:"right",minWidth:YI,maxWidth:HI,defaultWidth:ws}),t.jsxs("div",{className:"flex-1 flex flex-col h-full min-w-0 w-full",children:[t.jsxs("div",{className:"h-14 border-b border-border px-3 flex items-center justify-between",children:[t.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[t.jsx(Ae,{className:"w-4 h-4 text-muted-foreground"}),t.jsxs("span",{className:"font-medium text-foreground",children:["Git Changes",f>0&&t.jsxs("span",{className:"ml-2 text-xs text-muted-foreground",children:["(",f,")"]})]})]}),t.jsx(eA,{variant:"ghost",size:"icon",onClick:Q,title:"Close sidebar",children:t.jsx(xA,{className:"w-4 h-4"})})]}),t.jsx("div",{className:"flex-1 overflow-y-auto",children:o?t.jsx("div",{className:"p-4 text-sm text-muted-foreground",children:"Loading git status..."}):a?t.jsx("div",{className:"p-3 text-sm text-muted-foreground",children:t.jsxs("div",{className:"flex flex-col gap-2",children:[t.jsx("span",{className:"text-orange-500",children:a instanceof Error?a.message:"Failed to load git status"}),t.jsx(eA,{variant:"secondary",size:"sm",onClick:n,children:"Retry"})]})}):!B||f===0?t.jsx("div",{className:"p-3 text-sm text-muted-foreground",children:"No changes detected"}):t.jsx(TI,{status:B})}),c.length>0&&t.jsx("div",{className:"border-t border-border",children:c.map(w=>t.jsxs("div",{className:"px-3 py-2 text-xs border-b border-border last:border-b-0 bg-orange-50 dark:bg-orange-950/20 flex items-start gap-2",children:[t.jsx("span",{className:"text-orange-500 flex-1 min-w-0 break-words",children:w.message}),t.jsxs("div",{className:"flex items-center gap-1 flex-shrink-0",children:[A&&t.jsxs("button",{type:"button",onClick:()=>h(w),className:"flex items-center gap-1 text-[10px] px-1.5 py-0.5 rounded bg-primary/10 text-primary hover:bg-primary/20 transition-colors",title:"Fix with AI",children:[t.jsx(Le,{className:"w-3 h-3"}),"Fix"]}),t.jsx("button",{type:"button",onClick:()=>d(w.id),className:"text-muted-foreground hover:text-foreground transition-colors p-0.5",title:"Dismiss",children:t.jsx(yA,{className:"w-3 h-3"})})]})]},w.id))}),t.jsxs("div",{className:"h-12 border-t border-border flex items-center gap-1 px-2",children:[t.jsxs(eA,{variant:"secondary",size:"sm",onClick:m,disabled:k,title:M?`Pull ${B?.behind} commit(s) from remote`:"Pull from remote",className:"flex-1 h-8 text-xs gap-1.5",children:[t.jsx(ta,{className:`w-3.5 h-3.5 ${I.isPending?"animate-pulse":""}`}),"Pull",M&&t.jsxs("span",{className:"text-orange-500",children:["↓",B?.behind]})]}),t.jsxs(eA,{variant:"secondary",size:"sm",onClick:D,disabled:!N||k,title:N?`Push ${B?.ahead} commit(s) to remote`:"Nothing to push",className:"flex-1 h-8 text-xs gap-1.5",children:[t.jsx(ga,{className:`w-3.5 h-3.5 ${C.isPending?"animate-pulse":""}`}),"Push",N&&t.jsxs("span",{className:"text-green-500",children:["↑",B?.ahead]})]})]}),t.jsxs("div",{className:"h-12 px-4 border-t border-border text-xs text-muted-foreground flex items-center justify-between gap-2",children:[t.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[t.jsx(Ae,{className:"w-3 h-3 flex-shrink-0"}),B?.branch&&t.jsx("span",{className:"truncate",children:B.branch})]}),t.jsx(eA,{variant:"ghost",size:"icon",onClick:n,title:"Refresh git status",className:"h-6 w-6 flex-shrink-0",disabled:o,children:t.jsx(YA,{className:`w-3 h-3 ${o?"animate-spin":""}`})})]})]})]})}),WI=u.memo(function(){const A=iA(B=>B.isExpanded),g=iA(B=>B.toggleSidebar),{data:Q}=sg(),s=(Q?.staged?.length??0)+(Q?.unstaged?.length??0)+(Q?.untracked?.length??0);return t.jsxs("button",{type:"button",onClick:g,className:`relative h-14 w-full transition-colors touch-manipulation flex items-center justify-center ${A?"bg-muted border-r-2 border-primary":"hover:bg-muted/50"}`,title:"Git",children:[t.jsx(Ae,{className:"w-5 h-5 text-muted-foreground mx-auto"}),s>0&&t.jsx("span",{className:"absolute top-1 right-1 w-5 h-5 bg-primary text-primary-foreground text-xs rounded-full flex items-center justify-center font-semibold",children:s>9?"9+":s})]})}),je=fA()(MB(e=>({isCollapsed:!1,toggleCollapse:()=>e(A=>({isCollapsed:!A.isCollapsed})),setCollapsed:A=>e({isCollapsed:A})}),{name:"sidebar-storage"}));function Qo(e,A=!0){return JA({queryKey:["files","tree",e],queryFn:()=>O.getFileTree(e),enabled:A,staleTime:1e4,retry:1})}function zI(e){return JA({queryKey:["files","read",e],queryFn:()=>e?O.readFileContent(e):null,enabled:!!e,staleTime:5e3,retry:1})}function VI(e,A=!1,g=!1){return JA({queryKey:["git","diff","fullFile",e,A],queryFn:()=>e?O.getGitDiffFullFile(e,A):null,enabled:g&&!!e,retry:1,refetchInterval:!1})}const ZI=u.memo(function(){const A=iA(d=>d.isDiffOpen),g=iA(d=>d.selectedFile),Q=iA(d=>d.selectedFileStaged),s=iA(d=>d.closeDiff),B=je(d=>d.setCollapsed),o=u.useRef(null),a=u.useRef(!1),{data:E,isLoading:i}=Xr(g,Q),[C,I]=u.useState(!1),{data:c,isLoading:r}=VI(g,Q,C),n=C&&c?c:E,l=C?r:i;return u.useEffect(()=>{if(A||I(!1),A&&!a.current){const{isCollapsed:d}=je.getState();o.current=d,B(!0)}else!A&&a.current&&o.current!==null&&(B(o.current),o.current=null);a.current=A},[A,B]),u.useEffect(()=>{const d=D=>{const m=D.target,h=m.tagName==="INPUT"||m.tagName==="TEXTAREA"||m.isContentEditable;(D.key==="Escape"||D.key==="q"&&!h)&&A&&s()};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[A,s]),!A||!g?null:t.jsxs("div",{className:"absolute inset-0 bg-background z-50 flex flex-col animate-in slide-in-from-left duration-300",children:[t.jsxs("div",{className:"h-14 border-b border-border px-4 flex items-center gap-3",children:[t.jsx(eA,{variant:"ghost",size:"icon",onClick:s,title:"Close diff viewer (ESC)",children:t.jsx(yA,{className:"w-4 h-4"})}),t.jsxs("div",{className:"flex-1 flex items-center gap-2 min-w-0",children:[t.jsx("span",{className:"text-sm font-medium text-foreground font-mono truncate",title:`${g}
|
|
114
114
|
${n?.absPath||""}`,children:g}),Q&&t.jsx("span",{className:"text-xs px-2 py-0.5 rounded bg-primary/10 text-primary flex-shrink-0",children:"Staged"})]}),t.jsxs(eA,{variant:C?"secondary":"ghost",size:"sm",onClick:()=>I(d=>!d),title:C?"Show diff only":"Show full file with diff",className:"flex items-center gap-1.5 text-xs h-7",children:[C?t.jsx($g,{className:"w-3.5 h-3.5"}):t.jsx(Ss,{className:"w-3.5 h-3.5"}),C?"Diff":"Full File"]})]}),t.jsx("div",{className:"flex-1 overflow-auto",children:l?t.jsx("div",{className:"h-full flex items-center justify-center text-muted-foreground",children:"Loading diff..."}):n?t.jsx(vI,{diff:n}):t.jsx("div",{className:"h-full flex items-center justify-center text-muted-foreground",children:"No diff available"})})]})});function XI(){const{isCommitModalOpen:e,closeCommitModal:A}=iA(),g=iA(I=>I.commitSessionId),Q=$r(),s=_r(g),[B,o]=u.useState(""),a=u.useId(),E=u.useCallback(async()=>{if(B.trim())try{await Q.mutateAsync(B),o(""),A()}catch(I){console.error("Failed to commit:",I)}},[B,Q,A]),i=()=>{o(""),A()},C=u.useCallback(async()=>{try{const I=await s.mutateAsync();o(I.message)}catch(I){console.error("Failed to generate commit message:",I)}},[s]);return u.useEffect(()=>{if(!e)return;const I=c=>{(c.metaKey||c.ctrlKey)&&c.key==="Enter"&&(c.preventDefault(),c.stopPropagation(),B.trim()&&!Q.isPending&&E()),(c.metaKey||c.ctrlKey)&&c.key==="g"&&(c.preventDefault(),c.stopPropagation(),C())};return document.addEventListener("keydown",I),()=>document.removeEventListener("keydown",I)},[e,B,Q.isPending,E,C]),t.jsx(Ye,{isOpen:e,onClose:i,title:t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(qt,{className:"w-5 h-5"}),t.jsx("span",{children:"Commit Changes"})]}),maxWidth:"2xl",children:t.jsxs("div",{className:"space-y-4",children:[t.jsxs("div",{className:"space-y-2",children:[t.jsx("label",{htmlFor:a,className:"text-sm font-medium text-foreground",children:"Commit Message"}),t.jsx(tg,{id:a,value:B,onChange:I=>o(I.target.value),placeholder:"Enter commit message...",rows:6,className:"w-full resize-none",autoFocus:!0,disabled:s.isPending})]}),t.jsx(eA,{variant:"secondary",onClick:C,className:"w-full",disabled:s.isPending,children:s.isPending?t.jsxs(t.Fragment,{children:[t.jsx(nA,{className:"w-4 h-4 mr-2 animate-spin"}),"Generating..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Le,{className:"w-4 h-4 mr-2"}),"Generate commit message"," ",t.jsx("span",{className:"text-muted-foreground ml-1",children:"(⌘G)"})]})}),s.isError&&t.jsx("div",{className:"text-sm text-red-600 dark:text-red-400 bg-red-500/10 border border-red-500/20 rounded px-3 py-2",children:s.error?.message||"Failed to generate commit message"}),t.jsxs("div",{className:"flex items-center justify-end gap-2 pt-4 border-t border-border",children:[t.jsxs(eA,{variant:"ghost",onClick:i,children:["Cancel ",t.jsx("span",{className:"text-muted-foreground ml-1",children:"(Esc)"})]}),t.jsx(eA,{variant:"primary",onClick:E,disabled:!B.trim()||Q.isPending,children:Q.isPending?t.jsx("span",{children:"Committing..."}):t.jsxs(t.Fragment,{children:[t.jsx(qt,{className:"w-4 h-4 mr-2"}),"Commit ",t.jsx("span",{className:"text-muted-foreground ml-1",children:"(⌘↵)"})]})})]}),Q.isError&&t.jsx("div",{className:"text-sm text-red-600 dark:text-red-400 bg-red-500/10 border border-red-500/20 rounded px-3 py-2",children:Q.error?.message||"Failed to commit changes"})]})})}function so(e){const A=hA(g=>g.isExpanded);return JA({queryKey:["session",e,"files"],queryFn:()=>e?O.getSessionFiles(e):null,enabled:!!e,refetchInterval:A?5e3:!1,retry:1,staleTime:3e3})}const ps="session-files",ms=320,_I=320,$I=600;function Al(e){switch(e){case"write":return t.jsx(Vs,{className:"w-3 h-3 text-green-500"});case"patch":return t.jsx(Oe,{className:"w-3 h-3 text-blue-500"});case"edit":return t.jsx(eQ,{className:"w-3 h-3 text-yellow-500"});default:return t.jsx(Oe,{className:"w-3 h-3 text-muted-foreground"})}}function el(e){return e.split("/").pop()||e}function tl(e){if(e.artifact?.summary)return{additions:e.artifact.summary.additions,deletions:e.artifact.summary.deletions};const A=e.artifact?.patch||e.patch;if(A){let g=0,Q=0;const s=A.split(`
|
|
115
115
|
`);for(const B of s)B.startsWith("+")&&!B.startsWith("+++")?g++:B.startsWith("-")&&!B.startsWith("---")&&Q++;return{additions:g,deletions:Q}}return e.content?{additions:e.content.split(`
|
|
116
116
|
`).length,deletions:0}:{additions:0,deletions:0}}function gl({file:e}){const A=hA(E=>E.openDiff),Q=hA(E=>E.selectedFile)===e.path,s=e.operations[e.operations.length-1],{totalAdditions:B,totalDeletions:o}=u.useMemo(()=>{let E=0,i=0;for(const C of e.operations){const I=tl(C);E+=I.additions,i+=I.deletions}return{totalAdditions:E,totalDeletions:i}},[e.operations]),a=()=>{e.operations.length>0&&A(e.path,e.operations)};return t.jsx("button",{type:"button",onClick:a,className:`w-full text-left px-3 py-2 hover:bg-muted/50 transition-colors ${Q?"bg-muted":""}`,children:t.jsxs("div",{className:"flex items-center gap-2",children:[Al(s?.operation||"write"),t.jsx("div",{className:"flex-1 min-w-0",children:t.jsx("div",{className:"text-sm font-medium truncate",children:el(e.path)})}),t.jsxs("div",{className:"flex items-center gap-1 text-xs shrink-0",children:[e.operationCount>1&&t.jsxs("span",{className:"bg-muted text-muted-foreground px-1 rounded mr-1",children:[e.operationCount,"x"]}),t.jsxs("span",{className:"text-green-500",children:["+",B]}),t.jsxs("span",{className:"text-red-500",children:["-",o]})]})]})})}const Ql=u.memo(function({sessionId:A}){const g=hA(i=>i.isExpanded),Q=hA(i=>i.collapseSidebar),s=ke(i=>i.widths[ps]??ms),{data:B,isLoading:o,error:a,refetch:E}=so(A);return g?t.jsxs("div",{className:"border-l border-border bg-background flex h-full relative",style:{width:s},children:[t.jsx(At,{panelKey:ps,side:"right",minWidth:_I,maxWidth:$I,defaultWidth:ms}),t.jsxs("div",{className:"flex-1 flex flex-col h-full min-w-0",children:[t.jsxs("div",{className:"h-14 border-b border-border px-3 flex items-center justify-between shrink-0",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(Oe,{className:"w-4 h-4 text-muted-foreground"}),t.jsx("span",{className:"font-medium",children:"Session Files"}),B&&B.totalFiles>0&&t.jsxs("span",{className:"text-xs text-muted-foreground",children:["(",B.totalFiles,")"]})]}),t.jsx(eA,{variant:"ghost",size:"icon",onClick:Q,children:t.jsx(xA,{className:"w-4 h-4"})})]}),t.jsx("div",{className:"flex-1 overflow-y-auto",children:o?t.jsx("div",{className:"p-4 text-sm text-muted-foreground",children:"Loading session files..."}):a?t.jsx("div",{className:"p-4 text-sm text-orange-500",children:a instanceof Error?a.message:"Failed to load files"}):!B||B.totalFiles===0?t.jsx("div",{className:"p-4 text-sm text-muted-foreground",children:"No files modified in this session"}):t.jsx("div",{className:"divide-y divide-border",children:B.files.map(i=>t.jsx(gl,{file:i},i.path))})}),t.jsxs("div",{className:"h-12 px-4 border-t border-border text-xs text-muted-foreground flex items-center justify-between gap-2",children:[t.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-1",children:[t.jsx(Oe,{className:"w-3 h-3 flex-shrink-0"}),B&&B.totalOperations>0?t.jsxs("span",{className:"truncate",children:[B.totalFiles," file",B.totalFiles!==1?"s":""," •"," ",B.totalOperations," op",B.totalOperations!==1?"s":""]}):t.jsx("span",{className:"truncate",children:"No changes"})]}),t.jsx("div",{className:"flex items-center gap-1 flex-shrink-0",children:t.jsx(eA,{variant:"ghost",size:"icon",onClick:()=>E(),title:"Refresh session files",className:"h-6 w-6 transition-transform duration-200 hover:scale-110",disabled:o,children:t.jsx(YA,{className:`w-3 h-3 ${o?"animate-spin":""}`})})})]})]})]}):null}),sl=u.memo(function({sessionId:A}){const g=hA(o=>o.isExpanded),Q=hA(o=>o.toggleSidebar),{data:s}=so(A),B=s?.totalFiles??0;return t.jsxs("button",{type:"button",onClick:Q,className:`relative p-3 w-full transition-colors touch-manipulation ${g?"bg-muted border-r-2 border-primary":"hover:bg-muted/50"}`,title:"Session Files",children:[t.jsx(Oe,{className:"w-5 h-5 text-muted-foreground mx-auto"}),B>0&&t.jsx("span",{className:"absolute top-1 right-1 w-5 h-5 bg-primary text-primary-foreground text-xs rounded-full flex items-center justify-center font-semibold",children:B>9?"9+":B})]})});function Bl(e){const A=e.split(`
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
.app-loader-spinner{width:24px;height:24px;border:2px solid hsl(240,5%,25%);border-top-color:hsl(240,5%,65%);border-radius:50%;animation:spin .6s linear infinite}
|
|
19
19
|
@keyframes spin{to{transform:rotate(360deg)}}
|
|
20
20
|
</style>
|
|
21
|
-
<script type="module" crossorigin src="/assets/index-
|
|
21
|
+
<script type="module" crossorigin src="/assets/index-Yk-_f4ae.js"></script>
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/react-C7bPzU82.js">
|
|
23
23
|
<link rel="modulepreload" crossorigin href="/assets/router-1c3griYn.js">
|
|
24
24
|
<link rel="modulepreload" crossorigin href="/assets/icons-BVDEgRvd.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assets/markdown-DZTI3WvM.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/syntax-COWumqTl.js">
|
|
27
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
27
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Bc6hLcWL.css">
|
|
28
28
|
</head>
|
|
29
29
|
<body>
|
|
30
30
|
<div id="root"><div class="app-loader"><div class="app-loader-spinner"></div></div></div>
|