@hienlh/ppm 0.9.82 → 0.9.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/web/assets/{chat-tab-bS86TsT5.js → chat-tab-CT2XUgsc.js} +1 -1
- package/dist/web/assets/{code-editor-BaNaQ33b.js → code-editor-DQiPtcNd.js} +1 -1
- package/dist/web/assets/{database-viewer-C5MVw8cJ.js → database-viewer-Camu01H4.js} +1 -1
- package/dist/web/assets/{diff-viewer-CUbFMWVo.js → diff-viewer-CTwcVIP_.js} +1 -1
- package/dist/web/assets/{extension-webview-CwGufYEP.js → extension-webview-pU1xJyoc.js} +1 -1
- package/dist/web/assets/{git-graph-BD7A7MLo.js → git-graph-BnFbmpom.js} +1 -1
- package/dist/web/assets/{index-CpzkPHOC.js → index-CP9KnaGh.js} +9 -9
- package/dist/web/assets/index-Cxz7oGXY.css +2 -0
- package/dist/web/assets/keybindings-store-DdhEeehv.js +1 -0
- package/dist/web/assets/{markdown-renderer-C19IsITh.js → markdown-renderer-BjYurPV4.js} +1 -1
- package/dist/web/assets/{port-forwarding-tab-BF79F1iL.js → port-forwarding-tab-Bgr8dmsw.js} +1 -1
- package/dist/web/assets/{postgres-viewer-_nYiO_wp.js → postgres-viewer-BQdPMowm.js} +1 -1
- package/dist/web/assets/{settings-tab-C1SQMbSu.js → settings-tab-BNoboN6E.js} +1 -1
- package/dist/web/assets/{sql-query-editor-6OFvxxuN.js → sql-query-editor-CY61vWBg.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-SNVYFXvB.js → sqlite-viewer-srSbGg1D.js} +1 -1
- package/dist/web/assets/{terminal-tab-BJEkmrDt.js → terminal-tab-TIJmxHl6.js} +1 -1
- package/dist/web/assets/{use-monaco-theme-r8FzlCWr.js → use-monaco-theme-BHn-LEm7.js} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/src/cli/commands/cloud.ts +1 -0
- package/src/providers/claude-agent-sdk.ts +116 -11
- package/src/server/routes/port-forwarding.ts +118 -67
- package/src/server/routes/settings.ts +6 -3
- package/src/services/cloud.service.ts +35 -4
- package/src/services/supervisor.ts +8 -1
- package/src/web/components/git/git-status-panel.tsx +7 -1
- package/src/web/components/layout/sidebar.tsx +11 -1
- package/src/web/hooks/use-url-sync.ts +6 -4
- package/src/web/stores/git-status-store.ts +55 -0
- package/dist/web/assets/index-BYXjCNlK.css +0 -2
- package/dist/web/assets/keybindings-store-DsaANvBz.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/api-settings-Bn-bIxD1.js","assets/chunk-CFjPhJqf.js","assets/api-client-BfBM3I7n.js","assets/terminal-tab-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/api-settings-Bn-bIxD1.js","assets/chunk-CFjPhJqf.js","assets/api-client-BfBM3I7n.js","assets/terminal-tab-TIJmxHl6.js","assets/utils-BNytJOb1.js","assets/jsx-runtime-kMwlnEGE.js","assets/react-nm2Ru1Pt.js","assets/terminal-tab-BrP-ENHg.css","assets/chat-tab-CT2XUgsc.js","assets/preload-helper-Bf_JiD2A.js","assets/dist-CSJdAyA9.js","assets/dist-DIV6WgAG.js","assets/react-dom-Bpkvzu3U.js","assets/chunk-PU5JKC2W-ek7k4QVB.js","assets/src-BqX54PbV.js","assets/chunk-GEFDOKGD-D-pKjlVd.js","assets/math-069Z4SuC.js","assets/chunk-7R4GIKGN-Dv-4cAYn.js","assets/isArrayLikeObject-B_v2FtYn.js","assets/markdown-renderer-BjYurPV4.js","assets/isEmpty-bnrF3Qbc.js","assets/createLucideIcon-PuMiQgHl.js","assets/chunk-GLR3WWYH-DKikpoJM.js","assets/chunk-KYZI473N-Bb0MCaIO.js","assets/chunk-PQ6SQG4A-TF58UVMU.js","assets/chunk-YBOYWFTD-rQG3QH5s.js","assets/rough.esm-JX0wREDd.js","assets/chunk-O4XLMI2P-nDhi_cVu.js","assets/line-CVvo3dRu.js","assets/path-6uRLdFF7.js","assets/array-B9UHiPd-.js","assets/chunk-MX3YWQON-BpS_PtKp.js","assets/chunk-HHEYEP7N-C7vxA5i9.js","assets/chunk-XPW4576I-BPQQBakK.js","assets/arrow-up-BYhx9ckd.js","assets/x-D2_KzIET.js","assets/chevron-right-4zq1jPv6.js","assets/columns-2-BoZAN-iw.js","assets/square-oPKIkJiw.js","assets/tag-CXMT0QB6.js","assets/code-editor-DQiPtcNd.js","assets/use-monaco-theme-BHn-LEm7.js","assets/table-DFevCOMd.js","assets/text-wrap-BWNOVswA.js","assets/sql-completion-provider-DM9Qov6L.js","assets/database-viewer-Camu01H4.js","assets/sql-query-editor-CY61vWBg.js","assets/csv-parser-CNNw2RVA.js","assets/sqlite-viewer-srSbGg1D.js","assets/lib-DurwGtQO.js","assets/postgres-viewer-BQdPMowm.js","assets/git-graph-BnFbmpom.js","assets/diff-viewer-CTwcVIP_.js","assets/settings-tab-BNoboN6E.js","assets/port-forwarding-tab-Bgr8dmsw.js","assets/extension-webview-pU1xJyoc.js","assets/keybindings-store-DdhEeehv.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{o as e,t}from"./chunk-CFjPhJqf.js";import{t as n}from"./react-nm2Ru1Pt.js";import{t as r}from"./react-dom-Bpkvzu3U.js";import{t as i}from"./createLucideIcon-PuMiQgHl.js";import{n as a,t as o}from"./x-D2_KzIET.js";import{t as s}from"./chevron-right-4zq1jPv6.js";import{t as c}from"./react-SKk5z-bm.js";import{t as l}from"./preload-helper-Bf_JiD2A.js";import{t as u}from"./jsx-runtime-kMwlnEGE.js";import{C as d,D as f,E as p,O as m,S as h,T as g,_,a as v,b as y,c as b,d as x,f as S,g as C,h as w,i as T,k as E,l as D,m as O,n as k,o as A,p as j,r as ee,s as te,t as M,u as N,v as P,w as F,x as ne,y as I}from"./dist-DIV6WgAG.js";import{i as re,n as L,r as R,t as ie}from"./utils-BNytJOb1.js";import{a as ae,i as z,r as oe,t as B}from"./api-client-BfBM3I7n.js";import{_ as se,a as ce,d as le,h as ue}from"./api-settings-Bn-bIxD1.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var de=t((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0<n;){var r=n-1>>>1,a=e[r];if(0<i(a,t))e[r]=t,e[n]=a,n=r;else break a}}function n(e){return e.length===0?null:e[0]}function r(e){if(e.length===0)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;a:for(var r=0,a=e.length,o=a>>>1;r<o;){var s=2*(r+1)-1,c=e[s],l=s+1,u=e[l];if(0>i(c,n))l<a&&0>i(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(l<a&&0>i(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&j(x,t.startTime-e)}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-T<w)}function D(){if(g=!1,S){var t=e.unstable_now();T=t;var i=!0;try{a:{m=!1,h&&(h=!1,v(C),C=-1),p=!0;var a=f;try{b:{for(b(t),d=n(c);d!==null&&!(d.expirationTime>t&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&j(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,A=k.port2;k.port1.onmessage=D,O=function(){A.postMessage(null)}}else O=function(){_(D,0)};function j(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125<e?console.error(`forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported`):w=0<e?Math.floor(1e3/e):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},e.unstable_requestPaint=function(){g=!0},e.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},e.unstable_scheduleCallback=function(r,i,a){var o=e.unstable_now();switch(typeof a==`object`&&a?(a=a.delay,a=typeof a==`number`&&0<a?o+a:o):a=o,r){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,r={id:u++,callback:i,priorityLevel:r,startTime:a,expirationTime:s,sortIndex:-1},a>o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,j(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),fe=t(((e,t)=>{t.exports=de()})),pe=t((e=>{var t=fe(),i=n(),a=r();function o(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function s(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function c(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function l(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function u(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function d(e){if(c(e)!==e)throw Error(o(188))}function f(e){var t=e.alternate;if(!t){if(t=c(e),t===null)throw Error(o(188));return t===e?e:null}for(var n=e,r=t;;){var i=n.return;if(i===null)break;var a=i.alternate;if(a===null){if(r=i.return,r!==null){n=r;continue}break}if(i.child===a.child){for(a=i.child;a;){if(a===n)return d(i),e;if(a===r)return d(i),t;a=a.sibling}throw Error(o(188))}if(n.return!==r.return)n=i,r=a;else{for(var s=!1,l=i.child;l;){if(l===n){s=!0,n=i,r=a;break}if(l===r){s=!0,r=i,n=a;break}l=l.sibling}if(!s){for(l=a.child;l;){if(l===n){s=!0,n=a,r=i;break}if(l===r){s=!0,r=a,n=i;break}l=l.sibling}if(!s)throw Error(o(189))}}if(n.alternate!==r)throw Error(o(190))}if(n.tag!==3)throw Error(o(188));return n.stateNode.current===n?e:t}function p(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=p(e),t!==null)return t;e=e.sibling}return null}var m=Object.assign,h=Symbol.for(`react.element`),g=Symbol.for(`react.transitional.element`),_=Symbol.for(`react.portal`),v=Symbol.for(`react.fragment`),y=Symbol.for(`react.strict_mode`),b=Symbol.for(`react.profiler`),x=Symbol.for(`react.consumer`),S=Symbol.for(`react.context`),C=Symbol.for(`react.forward_ref`),w=Symbol.for(`react.suspense`),T=Symbol.for(`react.suspense_list`),E=Symbol.for(`react.memo`),D=Symbol.for(`react.lazy`),O=Symbol.for(`react.activity`),k=Symbol.for(`react.memo_cache_sentinel`),A=Symbol.iterator;function j(e){return typeof e!=`object`||!e?null:(e=A&&e[A]||e[`@@iterator`],typeof e==`function`?e:null)}var ee=Symbol.for(`react.client.reference`);function te(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===ee?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case v:return`Fragment`;case b:return`Profiler`;case y:return`StrictMode`;case w:return`Suspense`;case T:return`SuspenseList`;case O:return`Activity`}if(typeof e==`object`)switch(e.$$typeof){case _:return`Portal`;case S:return e.displayName||`Context`;case x:return(e._context.displayName||`Context`)+`.Consumer`;case C:var t=e.render;return e=e.displayName,e||=(e=t.displayName||t.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case E:return t=e.displayName||null,t===null?te(e.type)||`Memo`:t;case D:t=e._payload,e=e._init;try{return te(e(t))}catch{}}return null}var M=Array.isArray,N=i.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,P=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,F={pending:!1,data:null,method:null,action:null},ne=[],I=-1;function re(e){return{current:e}}function L(e){0>I||(e.current=ne[I],ne[I]=null,I--)}function R(e,t){I++,ne[I]=e.current,e.current=t}var ie=re(null),ae=re(null),z=re(null),oe=re(null);function B(e,t){switch(R(z,t),R(ae,e),R(ie,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Ud(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Ud(t),e=Wd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}L(ie),R(ie,e)}function se(){L(ie),L(ae),L(z)}function ce(e){e.memoizedState!==null&&R(oe,e);var t=ie.current,n=Wd(t,e.type);t!==n&&(R(ae,e),R(ie,n))}function le(e){ae.current===e&&(L(ie),L(ae)),oe.current===e&&(L(oe),Q._currentValue=F)}var ue,de;function pe(e){if(ue===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);ue=t&&t[1]||``,de=-1<e.stack.indexOf(`
|
|
3
3
|
at`)?` (<anonymous>)`:-1<e.stack.indexOf(`@`)?`@unknown:0:0`:``}return`
|
|
4
4
|
`+ue+e+de}var me=!1;function he(e,t){if(!e||me)return``;me=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var r={DetermineComponentFrameRoot:function(){try{if(t){var n=function(){throw Error()};if(Object.defineProperty(n.prototype,`props`,{set:function(){throw Error()}}),typeof Reflect==`object`&&Reflect.construct){try{Reflect.construct(n,[])}catch(e){var r=e}Reflect.construct(e,[],n)}else{try{n.call()}catch(e){r=e}e.call(n.prototype)}}else{try{throw Error()}catch(e){r=e}(n=e())&&typeof n.catch==`function`&&n.catch(function(){})}}catch(e){if(e&&r&&typeof e.stack==`string`)return[e.stack,r.stack]}return[null,null]}};r.DetermineComponentFrameRoot.displayName=`DetermineComponentFrameRoot`;var i=Object.getOwnPropertyDescriptor(r.DetermineComponentFrameRoot,`name`);i&&i.configurable&&Object.defineProperty(r.DetermineComponentFrameRoot,`name`,{value:`DetermineComponentFrameRoot`});var a=r.DetermineComponentFrameRoot(),o=a[0],s=a[1];if(o&&s){var c=o.split(`
|
|
@@ -11,20 +11,20 @@ Error generating stack: `+e.message+`
|
|
|
11
11
|
|
|
12
12
|
If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
|
|
13
13
|
|
|
14
|
-
For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return H.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},Or=`DialogDescriptionWarning`,kr=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Er(Or).contentName}}.`;return H.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},Ar=tr,jr=rr,Mr=sr,Nr=lr,Pr=pr,Fr=vr,Ir=br,Lr=Sr;function Rr(e){let t=H.useRef({value:e,previous:e});return H.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var zr=`rovingFocusGroup.onEntryFocus`,Br={bubbles:!1,cancelable:!0},Vr=`RovingFocusGroup`,[Hr,Ur,Wr]=y(Vr),[Gr,Kr]=h(Vr,[Wr]),[qr,Jr]=Gr(Vr),Yr=H.forwardRef((e,t)=>(0,W.jsx)(Hr.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,W.jsx)(Hr.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,W.jsx)(Xr,{...e,ref:t})})}));Yr.displayName=Vr;var Xr=H.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:l,preventScrollOnEntryFocus:u=!1,...f}=e,p=H.useRef(null),m=E(t,p),h=O(a),[g,v]=_({prop:o,defaultProp:s??null,onChange:c,caller:Vr}),[y,b]=H.useState(!1),x=j(l),S=Ur(n),C=H.useRef(!1),[w,T]=H.useState(0);return H.useEffect(()=>{let e=p.current;if(e)return e.addEventListener(zr,x),()=>e.removeEventListener(zr,x)},[x]),(0,W.jsx)(qr,{scope:n,orientation:r,dir:h,loop:i,currentTabStopId:g,onItemFocus:H.useCallback(e=>v(e),[v]),onItemShiftTab:H.useCallback(()=>b(!0),[]),onFocusableItemAdd:H.useCallback(()=>T(e=>e+1),[]),onFocusableItemRemove:H.useCallback(()=>T(e=>e-1),[]),children:(0,W.jsx)(d.div,{tabIndex:y||w===0?-1:0,"data-orientation":r,...f,ref:m,style:{outline:`none`,...e.style},onMouseDown:I(e.onMouseDown,()=>{C.current=!0}),onFocus:I(e.onFocus,e=>{let t=!C.current;if(e.target===e.currentTarget&&t&&!y){let t=new CustomEvent(zr,Br);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=S().filter(e=>e.focusable);ni([e.find(e=>e.active),e.find(e=>e.id===g),...e].filter(Boolean).map(e=>e.ref.current),u)}}C.current=!1}),onBlur:I(e.onBlur,()=>b(!1))})})}),Zr=`RovingFocusGroupItem`,Qr=H.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,c=w(),l=a||c,u=Jr(Zr,n),f=u.currentTabStopId===l,p=Ur(n),{onFocusableItemAdd:m,onFocusableItemRemove:h,currentTabStopId:g}=u;return H.useEffect(()=>{if(r)return m(),()=>h()},[r,m,h]),(0,W.jsx)(Hr.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:(0,W.jsx)(d.span,{tabIndex:f?0:-1,"data-orientation":u.orientation,...s,ref:t,onMouseDown:I(e.onMouseDown,e=>{r?u.onItemFocus(l):e.preventDefault()}),onFocus:I(e.onFocus,()=>u.onItemFocus(l)),onKeyDown:I(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){u.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=ti(e,u.orientation,u.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=p().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=u.loop?ri(n,r+1):n.slice(r+1)}setTimeout(()=>ni(n))}}),children:typeof o==`function`?o({isCurrentTabStop:f,hasTabStop:g!=null}):o})})});Qr.displayName=Zr;var $r={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function ei(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function ti(e,t,n){let r=ei(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return $r[r]}function ni(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function ri(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var ii=Yr,ai=Qr,oi=[`Enter`,` `],si=[`ArrowDown`,`PageUp`,`Home`],ci=[`ArrowUp`,`PageDown`,`End`],li=[...si,...ci],ui={ltr:[...oi,`ArrowRight`],rtl:[...oi,`ArrowLeft`]},di={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},fi=`Menu`,[pi,mi,hi]=y(fi),[gi,_i]=h(fi,[hi,v,Kr]),vi=v(),yi=Kr(),[bi,xi]=gi(fi),[Si,Ci]=gi(fi),wi=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=vi(t),[c,l]=H.useState(null),u=H.useRef(!1),d=j(a),f=O(i);return H.useEffect(()=>{let e=()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},t=()=>u.current=!1;return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),(0,W.jsx)(T,{...s,children:(0,W.jsx)(bi,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,W.jsx)(Si,{scope:t,onClose:H.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};wi.displayName=fi;var Ti=`MenuAnchor`,Ei=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=vi(n);return(0,W.jsx)(M,{...i,...r,ref:t})});Ei.displayName=Ti;var Di=`MenuPortal`,[Oi,G]=gi(Di,{forceMount:void 0}),ki=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=xi(Di,t);return(0,W.jsx)(Oi,{scope:t,forceMount:n,children:(0,W.jsx)(C,{present:n||a.open,children:(0,W.jsx)(N,{asChild:!0,container:i,children:r})})})};ki.displayName=Di;var Ai=`MenuContent`,[ji,Mi]=gi(Ai),Ni=H.forwardRef((e,t)=>{let n=G(Ai,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=xi(Ai,e.__scopeMenu),o=Ci(Ai,e.__scopeMenu);return(0,W.jsx)(pi.Provider,{scope:e.__scopeMenu,children:(0,W.jsx)(C,{present:r||a.open,children:(0,W.jsx)(pi.Slot,{scope:e.__scopeMenu,children:o.modal?(0,W.jsx)(Pi,{...i,ref:t}):(0,W.jsx)(Fi,{...i,ref:t})})})})}),Pi=H.forwardRef((e,t)=>{let n=xi(Ai,e.__scopeMenu),r=H.useRef(null),i=E(t,r);return H.useEffect(()=>{let e=r.current;if(e)return te(e)},[]),(0,W.jsx)(Li,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:I(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Fi=H.forwardRef((e,t)=>{let n=xi(Ai,e.__scopeMenu);return(0,W.jsx)(Li,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Ii=p(`MenuContent.ScrollLock`),Li=H.forwardRef((e,t)=>{let{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:o,disableOutsidePointerEvents:s,onEntryFocus:c,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,disableOutsideScroll:m,...h}=e,g=xi(Ai,n),_=Ci(Ai,n),v=vi(n),y=yi(n),C=mi(n),[w,T]=H.useState(null),O=H.useRef(null),k=E(t,O,g.onContentChange),A=H.useRef(0),j=H.useRef(``),te=H.useRef(0),M=H.useRef(null),N=H.useRef(`right`),P=H.useRef(0),F=m?b:H.Fragment,ne=m?{as:Ii,allowPinchZoom:!0}:void 0,re=e=>{let t=j.current+e,n=C().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=xa(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){j.current=t,window.clearTimeout(A.current),t!==``&&(A.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};H.useEffect(()=>()=>window.clearTimeout(A.current),[]),D();let L=H.useCallback(e=>N.current===M.current?.side&&Ca(e,M.current?.area),[]);return(0,W.jsx)(ji,{scope:n,searchRef:j,onItemEnter:H.useCallback(e=>{L(e)&&e.preventDefault()},[L]),onItemLeave:H.useCallback(e=>{L(e)||(O.current?.focus(),T(null))},[L]),onTriggerLeave:H.useCallback(e=>{L(e)&&e.preventDefault()},[L]),pointerGraceTimerRef:te,onPointerGraceIntentChange:H.useCallback(e=>{M.current=e},[]),children:(0,W.jsx)(F,{...ne,children:(0,W.jsx)(x,{asChild:!0,trapped:i,onMountAutoFocus:I(a,e=>{e.preventDefault(),O.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:(0,W.jsx)(S,{asChild:!0,disableOutsidePointerEvents:s,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,children:(0,W.jsx)(ii,{asChild:!0,...y,dir:_.dir,orientation:`vertical`,loop:r,currentTabStopId:w,onCurrentTabStopIdChange:T,onEntryFocus:I(c,e=>{_.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,W.jsx)(ee,{role:`menu`,"aria-orientation":`vertical`,"data-state":ga(g.open),"data-radix-menu-content":``,dir:_.dir,...v,...h,ref:k,style:{outline:`none`,...h.style},onKeyDown:I(h.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&re(e.key));let i=O.current;if(e.target!==i||!li.includes(e.key))return;e.preventDefault();let a=C().filter(e=>!e.disabled).map(e=>e.ref.current);ci.includes(e.key)&&a.reverse(),ya(a)}),onBlur:I(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(A.current),j.current=``)}),onPointerMove:I(e.onPointerMove,wa(e=>{let t=e.target,n=P.current!==e.clientX;e.currentTarget.contains(t)&&n&&(N.current=e.clientX>P.current?`right`:`left`,P.current=e.clientX)}))})})})})})})});Ni.displayName=Ai;var Ri=`MenuGroup`,zi=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,W.jsx)(d.div,{role:`group`,...r,ref:t})});zi.displayName=Ri;var Bi=`MenuLabel`,Vi=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,W.jsx)(d.div,{...r,ref:t})});Vi.displayName=Bi;var Hi=`MenuItem`,Ui=`menu.itemSelect`,Wi=H.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:r,...i}=e,a=H.useRef(null),o=Ci(Hi,e.__scopeMenu),s=Mi(Hi,e.__scopeMenu),c=E(t,a),l=H.useRef(!1),u=()=>{let e=a.current;if(!n&&e){let t=new CustomEvent(Ui,{bubbles:!0,cancelable:!0});e.addEventListener(Ui,e=>r?.(e),{once:!0}),F(e,t),t.defaultPrevented?l.current=!1:o.onClose()}};return(0,W.jsx)(Gi,{...i,ref:c,disabled:n,onClick:I(e.onClick,u),onPointerDown:t=>{e.onPointerDown?.(t),l.current=!0},onPointerUp:I(e.onPointerUp,e=>{l.current||e.currentTarget?.click()}),onKeyDown:I(e.onKeyDown,e=>{let t=s.searchRef.current!==``;n||t&&e.key===` `||oi.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});Wi.displayName=Hi;var Gi=H.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:i,...a}=e,o=Mi(Hi,n),s=yi(n),c=H.useRef(null),l=E(t,c),[u,f]=H.useState(!1),[p,m]=H.useState(``);return H.useEffect(()=>{let e=c.current;e&&m((e.textContent??``).trim())},[a.children]),(0,W.jsx)(pi.ItemSlot,{scope:n,disabled:r,textValue:i??p,children:(0,W.jsx)(ai,{asChild:!0,...s,focusable:!r,children:(0,W.jsx)(d.div,{role:`menuitem`,"data-highlighted":u?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...a,ref:l,onPointerMove:I(e.onPointerMove,wa(e=>{r?o.onItemLeave(e):(o.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:I(e.onPointerLeave,wa(e=>o.onItemLeave(e))),onFocus:I(e.onFocus,()=>f(!0)),onBlur:I(e.onBlur,()=>f(!1))})})})}),Ki=`MenuCheckboxItem`,qi=H.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,W.jsx)(ta,{scope:e.__scopeMenu,checked:n,children:(0,W.jsx)(Wi,{role:`menuitemcheckbox`,"aria-checked":_a(n)?`mixed`:n,...i,ref:t,"data-state":va(n),onSelect:I(i.onSelect,()=>r?.(_a(n)?!0:!n),{checkForDefaultPrevented:!1})})})});qi.displayName=Ki;var Ji=`MenuRadioGroup`,[Yi,Xi]=gi(Ji,{value:void 0,onValueChange:()=>{}}),Zi=H.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=j(r);return(0,W.jsx)(Yi,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,W.jsx)(zi,{...i,ref:t})})});Zi.displayName=Ji;var Qi=`MenuRadioItem`,$i=H.forwardRef((e,t)=>{let{value:n,...r}=e,i=Xi(Qi,e.__scopeMenu),a=n===i.value;return(0,W.jsx)(ta,{scope:e.__scopeMenu,checked:a,children:(0,W.jsx)(Wi,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":va(a),onSelect:I(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});$i.displayName=Qi;var ea=`MenuItemIndicator`,[ta,na]=gi(ea,{checked:!1}),ra=H.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...i}=e,a=na(ea,n);return(0,W.jsx)(C,{present:r||_a(a.checked)||a.checked===!0,children:(0,W.jsx)(d.span,{...i,ref:t,"data-state":va(a.checked)})})});ra.displayName=ea;var ia=`MenuSeparator`,aa=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,W.jsx)(d.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});aa.displayName=ia;var oa=`MenuArrow`,sa=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=vi(n);return(0,W.jsx)(k,{...i,...r,ref:t})});sa.displayName=oa;var ca=`MenuSub`,[la,ua]=gi(ca),da=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=xi(ca,t),o=vi(t),[s,c]=H.useState(null),[l,u]=H.useState(null),d=j(i);return H.useEffect(()=>(a.open===!1&&d(!1),()=>d(!1)),[a.open,d]),(0,W.jsx)(T,{...o,children:(0,W.jsx)(bi,{scope:t,open:r,onOpenChange:d,content:l,onContentChange:u,children:(0,W.jsx)(la,{scope:t,contentId:w(),triggerId:w(),trigger:s,onTriggerChange:c,children:n})})})};da.displayName=ca;var fa=`MenuSubTrigger`,pa=H.forwardRef((e,t)=>{let n=xi(fa,e.__scopeMenu),r=Ci(fa,e.__scopeMenu),i=ua(fa,e.__scopeMenu),a=Mi(fa,e.__scopeMenu),o=H.useRef(null),{pointerGraceTimerRef:s,onPointerGraceIntentChange:c}=a,l={__scopeMenu:e.__scopeMenu},u=H.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return H.useEffect(()=>u,[u]),H.useEffect(()=>{let e=s.current;return()=>{window.clearTimeout(e),c(null)}},[s,c]),(0,W.jsx)(Ei,{asChild:!0,...l,children:(0,W.jsx)(Gi,{id:i.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":i.contentId,"data-state":ga(n.open),...e,ref:m(t,i.onTriggerChange),onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:I(e.onPointerMove,wa(t=>{a.onItemEnter(t),!t.defaultPrevented&&!e.disabled&&!n.open&&!o.current&&(a.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{n.onOpenChange(!0),u()},100))})),onPointerLeave:I(e.onPointerLeave,wa(e=>{u();let t=n.content?.getBoundingClientRect();if(t){let r=n.content?.dataset.side,i=r===`right`,o=i?-5:5,c=t[i?`left`:`right`],l=t[i?`right`:`left`];a.onPointerGraceIntentChange({area:[{x:e.clientX+o,y:e.clientY},{x:c,y:t.top},{x:l,y:t.top},{x:l,y:t.bottom},{x:c,y:t.bottom}],side:r}),window.clearTimeout(s.current),s.current=window.setTimeout(()=>a.onPointerGraceIntentChange(null),300)}else{if(a.onTriggerLeave(e),e.defaultPrevented)return;a.onPointerGraceIntentChange(null)}})),onKeyDown:I(e.onKeyDown,t=>{let i=a.searchRef.current!==``;e.disabled||i&&t.key===` `||ui[r.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});pa.displayName=fa;var ma=`MenuSubContent`,ha=H.forwardRef((e,t)=>{let n=G(Ai,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=xi(Ai,e.__scopeMenu),o=Ci(Ai,e.__scopeMenu),s=ua(ma,e.__scopeMenu),c=H.useRef(null),l=E(t,c);return(0,W.jsx)(pi.Provider,{scope:e.__scopeMenu,children:(0,W.jsx)(C,{present:r||a.open,children:(0,W.jsx)(pi.Slot,{scope:e.__scopeMenu,children:(0,W.jsx)(Li,{id:s.contentId,"aria-labelledby":s.triggerId,...i,ref:l,align:`start`,side:o.dir===`rtl`?`left`:`right`,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{o.isUsingKeyboardRef.current&&c.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:I(e.onFocusOutside,e=>{e.target!==s.trigger&&a.onOpenChange(!1)}),onEscapeKeyDown:I(e.onEscapeKeyDown,e=>{o.onClose(),e.preventDefault()}),onKeyDown:I(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=di[o.dir].includes(e.key);t&&n&&(a.onOpenChange(!1),s.trigger?.focus(),e.preventDefault())})})})})})});ha.displayName=ma;function ga(e){return e?`open`:`closed`}function _a(e){return e===`indeterminate`}function va(e){return _a(e)?`indeterminate`:e?`checked`:`unchecked`}function ya(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function ba(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function xa(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=ba(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Sa(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function Ca(e,t){return t?Sa({x:e.clientX,y:e.clientY},t):!1}function wa(e){return t=>t.pointerType===`mouse`?e(t):void 0}var Ta=wi,Ea=Ei,Da=ki,Oa=Ni,ka=zi,Aa=Vi,ja=Wi,Ma=qi,Na=Zi,Pa=$i,Fa=ra,Ia=aa,La=sa,Ra=da,za=pa,Ba=ha,Va=`ContextMenu`,[Ha,Ua]=h(Va,[_i]),Wa=_i(),[Ga,Ka]=Ha(Va),qa=e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,dir:i,modal:a=!0}=e,[o,s]=H.useState(!1),c=Wa(t),l=j(r),u=H.useCallback(e=>{s(e),l(e)},[l]);return(0,W.jsx)(Ga,{scope:t,open:o,onOpenChange:u,modal:a,children:(0,W.jsx)(Ta,{...c,dir:i,open:o,onOpenChange:u,modal:a,children:n})})};qa.displayName=Va;var Ja=`ContextMenuTrigger`,Ya=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,disabled:r=!1,...i}=e,a=Ka(Ja,n),o=Wa(n),s=H.useRef({x:0,y:0}),c=H.useRef({getBoundingClientRect:()=>DOMRect.fromRect({width:0,height:0,...s.current})}),l=H.useRef(0),u=H.useCallback(()=>window.clearTimeout(l.current),[]),f=e=>{s.current={x:e.clientX,y:e.clientY},a.onOpenChange(!0)};return H.useEffect(()=>u,[u]),H.useEffect(()=>void(r&&u()),[r,u]),(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Ea,{...o,virtualRef:c}),(0,W.jsx)(d.span,{"data-state":a.open?`open`:`closed`,"data-disabled":r?``:void 0,...i,ref:t,style:{WebkitTouchCallout:`none`,...e.style},onContextMenu:r?e.onContextMenu:I(e.onContextMenu,e=>{u(),f(e),e.preventDefault()}),onPointerDown:r?e.onPointerDown:I(e.onPointerDown,wo(e=>{u(),l.current=window.setTimeout(()=>f(e),700)})),onPointerMove:r?e.onPointerMove:I(e.onPointerMove,wo(u)),onPointerCancel:r?e.onPointerCancel:I(e.onPointerCancel,wo(u)),onPointerUp:r?e.onPointerUp:I(e.onPointerUp,wo(u))})]})});Ya.displayName=Ja;var Xa=`ContextMenuPortal`,Za=e=>{let{__scopeContextMenu:t,...n}=e,r=Wa(t);return(0,W.jsx)(Da,{...r,...n})};Za.displayName=Xa;var Qa=`ContextMenuContent`,$a=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ka(Qa,n),a=Wa(n),o=H.useRef(!1);return(0,W.jsx)(Oa,{...a,...r,ref:t,side:`right`,sideOffset:2,align:`start`,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),!t.defaultPrevented&&o.current&&t.preventDefault(),o.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),!t.defaultPrevented&&!i.modal&&(o.current=!0)},style:{...e.style,"--radix-context-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-context-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-context-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-context-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-context-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});$a.displayName=Qa;var eo=`ContextMenuGroup`,to=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(ka,{...i,...r,ref:t})});to.displayName=eo;var no=`ContextMenuLabel`,ro=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Aa,{...i,...r,ref:t})});ro.displayName=no;var io=`ContextMenuItem`,ao=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(ja,{...i,...r,ref:t})});ao.displayName=io;var oo=`ContextMenuCheckboxItem`,K=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Ma,{...i,...r,ref:t})});K.displayName=oo;var so=`ContextMenuRadioGroup`,co=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Na,{...i,...r,ref:t})});co.displayName=so;var lo=`ContextMenuRadioItem`,uo=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Pa,{...i,...r,ref:t})});uo.displayName=lo;var fo=`ContextMenuItemIndicator`,po=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Fa,{...i,...r,ref:t})});po.displayName=fo;var mo=`ContextMenuSeparator`,ho=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Ia,{...i,...r,ref:t})});ho.displayName=mo;var go=`ContextMenuArrow`,_o=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(La,{...i,...r,ref:t})});_o.displayName=go;var vo=`ContextMenuSub`,yo=e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,open:i,defaultOpen:a}=e,o=Wa(t),[s,c]=_({prop:i,defaultProp:a??!1,onChange:r,caller:vo});return(0,W.jsx)(Ra,{...o,open:s,onOpenChange:c,children:n})};yo.displayName=vo;var bo=`ContextMenuSubTrigger`,xo=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(za,{...i,...r,ref:t})});xo.displayName=bo;var So=`ContextMenuSubContent`,Co=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Ba,{...i,...r,ref:t,style:{...e.style,"--radix-context-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-context-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-context-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-context-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-context-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Co.displayName=So;function wo(e){return t=>t.pointerType===`mouse`?void 0:e(t)}var To=qa,Eo=Ya,Do=Za,Oo=$a,ko=ao,Ao=ho,jo=`DropdownMenu`,[Mo,No]=h(jo,[_i]),Po=_i(),[Fo,Io]=Mo(jo),Lo=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=Po(t),l=H.useRef(null),[u,d]=_({prop:i,defaultProp:a??!1,onChange:o,caller:jo});return(0,W.jsx)(Fo,{scope:t,triggerId:w(),triggerRef:l,contentId:w(),open:u,onOpenChange:d,onOpenToggle:H.useCallback(()=>d(e=>!e),[d]),modal:s,children:(0,W.jsx)(Ta,{...c,open:u,onOpenChange:d,dir:r,modal:s,children:n})})};Lo.displayName=jo;var Ro=`DropdownMenuTrigger`,zo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:r=!1,...i}=e,a=Io(Ro,n),o=Po(n);return(0,W.jsx)(Ea,{asChild:!0,...o,children:(0,W.jsx)(d.button,{type:`button`,id:a.triggerId,"aria-haspopup":`menu`,"aria-expanded":a.open,"aria-controls":a.open?a.contentId:void 0,"data-state":a.open?`open`:`closed`,"data-disabled":r?``:void 0,disabled:r,...i,ref:m(t,a.triggerRef),onPointerDown:I(e.onPointerDown,e=>{!r&&e.button===0&&e.ctrlKey===!1&&(a.onOpenToggle(),a.open||e.preventDefault())}),onKeyDown:I(e.onKeyDown,e=>{r||([`Enter`,` `].includes(e.key)&&a.onOpenToggle(),e.key===`ArrowDown`&&a.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});zo.displayName=Ro;var Bo=`DropdownMenuPortal`,Vo=e=>{let{__scopeDropdownMenu:t,...n}=e,r=Po(t);return(0,W.jsx)(Da,{...r,...n})};Vo.displayName=Bo;var Ho=`DropdownMenuContent`,Uo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Io(Ho,n),a=Po(n),o=H.useRef(!1);return(0,W.jsx)(Oa,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:I(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:I(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Uo.displayName=Ho;var Wo=`DropdownMenuGroup`,Go=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(ka,{...i,...r,ref:t})});Go.displayName=Wo;var Ko=`DropdownMenuLabel`,qo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Aa,{...i,...r,ref:t})});qo.displayName=Ko;var Jo=`DropdownMenuItem`,Yo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(ja,{...i,...r,ref:t})});Yo.displayName=Jo;var Xo=`DropdownMenuCheckboxItem`,Zo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Ma,{...i,...r,ref:t})});Zo.displayName=Xo;var Qo=`DropdownMenuRadioGroup`,$o=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Na,{...i,...r,ref:t})});$o.displayName=Qo;var es=`DropdownMenuRadioItem`,ts=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Pa,{...i,...r,ref:t})});ts.displayName=es;var ns=`DropdownMenuItemIndicator`,rs=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Fa,{...i,...r,ref:t})});rs.displayName=ns;var is=`DropdownMenuSeparator`,as=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Ia,{...i,...r,ref:t})});as.displayName=is;var os=`DropdownMenuArrow`,ss=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(La,{...i,...r,ref:t})});ss.displayName=os;var cs=e=>{let{__scopeDropdownMenu:t,children:n,open:r,onOpenChange:i,defaultOpen:a}=e,o=Po(t),[s,c]=_({prop:r,defaultProp:a??!1,onChange:i,caller:`DropdownMenuSub`});return(0,W.jsx)(Ra,{...o,open:s,onOpenChange:c,children:n})},ls=`DropdownMenuSubTrigger`,us=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(za,{...i,...r,ref:t})});us.displayName=ls;var ds=`DropdownMenuSubContent`,fs=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Ba,{...i,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});fs.displayName=ds;var ps=Lo,ms=zo,hs=Vo,gs=Uo,_s=Yo,vs=cs,ys=us,bs=fs,xs=`Label`,Ss=H.forwardRef((e,t)=>(0,W.jsx)(d.label,{...e,ref:t,onMouseDown:t=>{t.target.closest(`button, input, select, textarea`)||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));Ss.displayName=xs;var Cs=Ss;function ws(e,[t,n]){return Math.min(n,Math.max(t,e))}function Ts(e,t){return H.useReducer((e,n)=>t[e][n]??e,e)}var Es=`ScrollArea`,[Ds,Os]=h(Es),[ks,As]=Ds(Es),js=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,type:r=`hover`,dir:i,scrollHideDelay:a=600,...o}=e,[s,c]=H.useState(null),[l,u]=H.useState(null),[f,p]=H.useState(null),[m,h]=H.useState(null),[g,_]=H.useState(null),[v,y]=H.useState(0),[b,x]=H.useState(0),[S,C]=H.useState(!1),[w,T]=H.useState(!1),D=E(t,e=>c(e)),k=O(i);return(0,W.jsx)(ks,{scope:n,type:r,dir:k,scrollHideDelay:a,scrollArea:s,viewport:l,onViewportChange:u,content:f,onContentChange:p,scrollbarX:m,onScrollbarXChange:h,scrollbarXEnabled:S,onScrollbarXEnabledChange:C,scrollbarY:g,onScrollbarYChange:_,scrollbarYEnabled:w,onScrollbarYEnabledChange:T,onCornerWidthChange:y,onCornerHeightChange:x,children:(0,W.jsx)(d.div,{dir:k,...o,ref:D,style:{position:`relative`,"--radix-scroll-area-corner-width":v+`px`,"--radix-scroll-area-corner-height":b+`px`,...e.style}})})});js.displayName=Es;var Ms=`ScrollAreaViewport`,Ns=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,children:r,nonce:i,...a}=e,o=As(Ms,n),s=E(t,H.useRef(null),o.onViewportChange);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:i}),(0,W.jsx)(d.div,{"data-radix-scroll-area-viewport":``,...a,ref:s,style:{overflowX:o.scrollbarXEnabled?`scroll`:`hidden`,overflowY:o.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,W.jsx)(`div`,{ref:o.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})});Ns.displayName=Ms;var Ps=`ScrollAreaScrollbar`,Fs=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=As(Ps,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return H.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,W.jsx)(Is,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,W.jsx)(Ls,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,W.jsx)(Rs,{...r,ref:t,forceMount:n}):i.type===`always`?(0,W.jsx)(zs,{...r,ref:t}):null});Fs.displayName=Ps;var Is=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=As(Ps,e.__scopeScrollArea),[a,o]=H.useState(!1);return H.useEffect(()=>{let e=i.scrollArea,t=0;if(e){let n=()=>{window.clearTimeout(t),o(!0)},r=()=>{t=window.setTimeout(()=>o(!1),i.scrollHideDelay)};return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[i.scrollArea,i.scrollHideDelay]),(0,W.jsx)(C,{present:n||a,children:(0,W.jsx)(Rs,{"data-state":a?`visible`:`hidden`,...r,ref:t})})}),Ls=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=As(Ps,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=ac(()=>c(`SCROLL_END`),100),[s,c]=Ts(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return H.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),H.useEffect(()=>{let e=i.viewport,t=a?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=()=>{let r=e[t];n!==r&&(c(`SCROLL`),o()),n=r};return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[i.viewport,a,c,o]),(0,W.jsx)(C,{present:n||s!==`hidden`,children:(0,W.jsx)(zs,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:I(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:I(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})}),Rs=H.forwardRef((e,t)=>{let n=As(Ps,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=H.useState(!1),s=e.orientation===`horizontal`,c=ac(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return oc(n.viewport,c),oc(n.content,c),(0,W.jsx)(C,{present:r||a,children:(0,W.jsx)(zs,{"data-state":a?`visible`:`hidden`,...i,ref:t})})}),zs=H.forwardRef((e,t)=>{let{orientation:n=`vertical`,...r}=e,i=As(Ps,e.__scopeScrollArea),a=H.useRef(null),o=H.useRef(0),[s,c]=H.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=Qs(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:e=>a.current=e,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:e=>o.current=e};function d(e,t){return ec(e,o.current,s,t)}return n===`horizontal`?(0,W.jsx)(Bs,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=tc(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,W.jsx)(Vs,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=tc(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null}),Bs=H.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=As(Ps,e.__scopeScrollArea),[o,s]=H.useState(),c=H.useRef(null),l=E(t,c,a.onScrollbarXChange);return H.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,W.jsx)(Ws,{"data-orientation":`horizontal`,...i,ref:l,sizes:n,style:{bottom:0,left:a.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:a.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":$s(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),rc(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollWidth,viewport:a.viewport.offsetWidth,scrollbar:{size:c.current.clientWidth,paddingStart:Zs(o.paddingLeft),paddingEnd:Zs(o.paddingRight)}})}})}),Vs=H.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=As(Ps,e.__scopeScrollArea),[o,s]=H.useState(),c=H.useRef(null),l=E(t,c,a.onScrollbarYChange);return H.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,W.jsx)(Ws,{"data-orientation":`vertical`,...i,ref:l,sizes:n,style:{top:0,right:a.dir===`ltr`?0:void 0,left:a.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":$s(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),rc(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollHeight,viewport:a.viewport.offsetHeight,scrollbar:{size:c.current.clientHeight,paddingStart:Zs(o.paddingTop),paddingEnd:Zs(o.paddingBottom)}})}})}),[Hs,Us]=Ds(Ps),Ws=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,sizes:r,hasThumb:i,onThumbChange:a,onThumbPointerUp:o,onThumbPointerDown:s,onThumbPositionChange:c,onDragScroll:l,onWheelScroll:u,onResize:f,...p}=e,m=As(Ps,n),[h,g]=H.useState(null),_=E(t,e=>g(e)),v=H.useRef(null),y=H.useRef(``),b=m.viewport,x=r.content-r.viewport,S=j(u),C=j(c),w=ac(f,10);function T(e){v.current&&l({x:e.clientX-v.current.left,y:e.clientY-v.current.top})}return H.useEffect(()=>{let e=e=>{let t=e.target;h?.contains(t)&&S(e,x)};return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[b,h,x,S]),H.useEffect(C,[r,C]),oc(h,w),oc(m.content,w),(0,W.jsx)(Hs,{scope:n,scrollbar:h,hasThumb:i,onThumbChange:j(a),onThumbPointerUp:j(o),onThumbPositionChange:C,onThumbPointerDown:j(s),children:(0,W.jsx)(d.div,{...p,ref:_,style:{position:`absolute`,...p.style},onPointerDown:I(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),v.current=h.getBoundingClientRect(),y.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,m.viewport&&(m.viewport.style.scrollBehavior=`auto`),T(e))}),onPointerMove:I(e.onPointerMove,T),onPointerUp:I(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=y.current,m.viewport&&(m.viewport.style.scrollBehavior=``),v.current=null})})})}),Gs=`ScrollAreaThumb`,Ks=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=Us(Gs,e.__scopeScrollArea);return(0,W.jsx)(C,{present:n||i.hasThumb,children:(0,W.jsx)(qs,{ref:t,...r})})}),qs=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,style:r,...i}=e,a=As(Gs,n),o=Us(Gs,n),{onThumbPositionChange:s}=o,c=E(t,e=>o.onThumbChange(e)),l=H.useRef(void 0),u=ac(()=>{l.current&&=(l.current(),void 0)},100);return H.useEffect(()=>{let e=a.viewport;if(e){let t=()=>{u(),l.current||(l.current=ic(e,s),s())};return s(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[a.viewport,u,s]),(0,W.jsx)(d.div,{"data-state":o.hasThumb?`visible`:`hidden`,...i,ref:c,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:I(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;o.onThumbPointerDown({x:n,y:r})}),onPointerUp:I(e.onPointerUp,o.onThumbPointerUp)})});Ks.displayName=Gs;var Js=`ScrollAreaCorner`,Ys=H.forwardRef((e,t)=>{let n=As(Js,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,W.jsx)(Xs,{...e,ref:t}):null});Ys.displayName=Js;var Xs=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,...r}=e,i=As(Js,n),[a,o]=H.useState(0),[s,c]=H.useState(0),l=!!(a&&s);return oc(i.scrollbarX,()=>{let e=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(e),c(e)}),oc(i.scrollbarY,()=>{let e=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(e),o(e)}),l?(0,W.jsx)(d.div,{...r,ref:t,style:{width:a,height:s,position:`absolute`,right:i.dir===`ltr`?0:void 0,left:i.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null});function Zs(e){return e?parseInt(e,10):0}function Qs(e,t){let n=e/t;return isNaN(n)?0:n}function $s(e){let t=Qs(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function ec(e,t,n,r=`ltr`){let i=$s(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return nc([c,l],d)(e)}function tc(e,t,n=`ltr`){let r=$s(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=ws(e,n===`ltr`?[0,o]:[o*-1,0]);return nc([0,o],[0,s])(c)}function nc(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function rc(e,t){return e>0&&e<t}var ic=(e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(r)};function ac(e,t){let n=j(e),r=H.useRef(0);return H.useEffect(()=>()=>window.clearTimeout(r.current),[]),H.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function oc(e,t){let n=j(t);P(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}var sc=js,cc=Ns,lc=Ys,uc=[` `,`Enter`,`ArrowUp`,`ArrowDown`],dc=[` `,`Enter`],fc=`Select`,[pc,mc,hc]=y(fc),[gc,_c]=h(fc,[hc,v]),vc=v(),[yc,bc]=gc(fc),[xc,Sc]=gc(fc),Cc=e=>{let{__scopeSelect:t,children:n,open:r,defaultOpen:i,onOpenChange:a,value:o,defaultValue:s,onValueChange:c,dir:l,name:u,autoComplete:d,disabled:f,required:p,form:m}=e,h=vc(t),[g,v]=H.useState(null),[y,b]=H.useState(null),[x,S]=H.useState(!1),C=O(l),[E,D]=_({prop:r,defaultProp:i??!1,onChange:a,caller:fc}),[k,A]=_({prop:o,defaultProp:s,onChange:c,caller:fc}),j=H.useRef(null),ee=g?m||!!g.closest(`form`):!0,[te,M]=H.useState(new Set),N=Array.from(te).map(e=>e.props.value).join(`;`);return(0,W.jsx)(T,{...h,children:(0,W.jsxs)(yc,{required:p,scope:t,trigger:g,onTriggerChange:v,valueNode:y,onValueNodeChange:b,valueNodeHasChildren:x,onValueNodeHasChildrenChange:S,contentId:w(),value:k,onValueChange:A,open:E,onOpenChange:D,dir:C,triggerPointerDownPosRef:j,disabled:f,children:[(0,W.jsx)(pc.Provider,{scope:t,children:(0,W.jsx)(xc,{scope:e.__scopeSelect,onNativeOptionAdd:H.useCallback(e=>{M(t=>new Set(t).add(e))},[]),onNativeOptionRemove:H.useCallback(e=>{M(t=>{let n=new Set(t);return n.delete(e),n})},[]),children:n})}),ee?(0,W.jsxs)(vl,{"aria-hidden":!0,required:p,tabIndex:-1,name:u,autoComplete:d,value:k,onChange:e=>A(e.target.value),disabled:f,form:m,children:[k===void 0?(0,W.jsx)(`option`,{value:``}):null,Array.from(te)]},N):null]})})};Cc.displayName=fc;var wc=`SelectTrigger`,Tc=H.forwardRef((e,t)=>{let{__scopeSelect:n,disabled:r=!1,...i}=e,a=vc(n),o=bc(wc,n),s=o.disabled||r,c=E(t,o.onTriggerChange),l=mc(n),u=H.useRef(`touch`),[f,p,m]=bl(e=>{let t=l().filter(e=>!e.disabled),n=xl(t,e,t.find(e=>e.value===o.value));n!==void 0&&o.onValueChange(n.value)}),h=e=>{s||(o.onOpenChange(!0),m()),e&&(o.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})};return(0,W.jsx)(M,{asChild:!0,...a,children:(0,W.jsx)(d.button,{type:`button`,role:`combobox`,"aria-controls":o.contentId,"aria-expanded":o.open,"aria-required":o.required,"aria-autocomplete":`none`,dir:o.dir,"data-state":o.open?`open`:`closed`,disabled:s,"data-disabled":s?``:void 0,"data-placeholder":yl(o.value)?``:void 0,...i,ref:c,onClick:I(i.onClick,e=>{e.currentTarget.focus(),u.current!==`mouse`&&h(e)}),onPointerDown:I(i.onPointerDown,e=>{u.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&e.pointerType===`mouse`&&(h(e),e.preventDefault())}),onKeyDown:I(i.onKeyDown,e=>{let t=f.current!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&p(e.key),!(t&&e.key===` `)&&uc.includes(e.key)&&(h(),e.preventDefault())})})})});Tc.displayName=wc;var Ec=`SelectValue`,Dc=H.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,children:a,placeholder:o=``,...s}=e,c=bc(Ec,n),{onValueNodeHasChildrenChange:l}=c,u=a!==void 0,f=E(t,c.onValueNodeChange);return P(()=>{l(u)},[l,u]),(0,W.jsx)(d.span,{...s,ref:f,style:{pointerEvents:`none`},children:yl(c.value)?(0,W.jsx)(W.Fragment,{children:o}):a})});Dc.displayName=Ec;var Oc=`SelectIcon`,kc=H.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,...i}=e;return(0,W.jsx)(d.span,{"aria-hidden":!0,...i,ref:t,children:r||`▼`})});kc.displayName=Oc;var Ac=`SelectPortal`,jc=e=>(0,W.jsx)(N,{asChild:!0,...e});jc.displayName=Ac;var Mc=`SelectContent`,Nc=H.forwardRef((e,t)=>{let n=bc(Mc,e.__scopeSelect),[r,i]=H.useState();if(P(()=>{i(new DocumentFragment)},[]),!n.open){let t=r;return t?sn.createPortal((0,W.jsx)(Fc,{scope:e.__scopeSelect,children:(0,W.jsx)(pc.Slot,{scope:e.__scopeSelect,children:(0,W.jsx)(`div`,{children:e.children})})}),t):null}return(0,W.jsx)(zc,{...e,ref:t})});Nc.displayName=Mc;var Pc=10,[Fc,Ic]=gc(Mc),Lc=`SelectContentImpl`,Rc=p(`SelectContent.RemoveScroll`),zc=H.forwardRef((e,t)=>{let{__scopeSelect:n,position:r=`item-aligned`,onCloseAutoFocus:i,onEscapeKeyDown:a,onPointerDownOutside:o,side:s,sideOffset:c,align:l,alignOffset:u,arrowPadding:d,collisionBoundary:f,collisionPadding:p,sticky:m,hideWhenDetached:h,avoidCollisions:g,..._}=e,v=bc(Mc,n),[y,C]=H.useState(null),[w,T]=H.useState(null),O=E(t,e=>C(e)),[k,A]=H.useState(null),[j,ee]=H.useState(null),M=mc(n),[N,P]=H.useState(!1),F=H.useRef(!1);H.useEffect(()=>{if(y)return te(y)},[y]),D();let ne=H.useCallback(e=>{let[t,...n]=M().map(e=>e.ref.current),[r]=n.slice(-1),i=document.activeElement;for(let n of e)if(n===i||(n?.scrollIntoView({block:`nearest`}),n===t&&w&&(w.scrollTop=0),n===r&&w&&(w.scrollTop=w.scrollHeight),n?.focus(),document.activeElement!==i))return},[M,w]),re=H.useCallback(()=>ne([k,y]),[ne,k,y]);H.useEffect(()=>{N&&re()},[N,re]);let{onOpenChange:L,triggerPointerDownPosRef:R}=v;H.useEffect(()=>{if(y){let e={x:0,y:0},t=t=>{e={x:Math.abs(Math.round(t.pageX)-(R.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(R.current?.y??0))}},n=n=>{e.x<=10&&e.y<=10?n.preventDefault():y.contains(n.target)||L(!1),document.removeEventListener(`pointermove`,t),R.current=null};return R.current!==null&&(document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n,{capture:!0,once:!0})),()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n,{capture:!0})}}},[y,L,R]),H.useEffect(()=>{let e=()=>L(!1);return window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e)}},[L]);let[ie,ae]=bl(e=>{let t=M().filter(e=>!e.disabled),n=xl(t,e,t.find(e=>e.ref.current===document.activeElement));n&&setTimeout(()=>n.ref.current.focus())}),z=H.useCallback((e,t,n)=>{let r=!F.current&&!n;(v.value!==void 0&&v.value===t||r)&&(A(e),r&&(F.current=!0))},[v.value]),oe=H.useCallback(()=>y?.focus(),[y]),B=H.useCallback((e,t,n)=>{let r=!F.current&&!n;(v.value!==void 0&&v.value===t||r)&&ee(e)},[v.value]),se=r===`popper`?Uc:Vc,ce=se===Uc?{side:s,sideOffset:c,align:l,alignOffset:u,arrowPadding:d,collisionBoundary:f,collisionPadding:p,sticky:m,hideWhenDetached:h,avoidCollisions:g}:{};return(0,W.jsx)(Fc,{scope:n,content:y,viewport:w,onViewportChange:T,itemRefCallback:z,selectedItem:k,onItemLeave:oe,itemTextRefCallback:B,focusSelectedItem:re,selectedItemText:j,position:r,isPositioned:N,searchRef:ie,children:(0,W.jsx)(b,{as:Rc,allowPinchZoom:!0,children:(0,W.jsx)(x,{asChild:!0,trapped:v.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:I(i,e=>{v.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,W.jsx)(S,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>v.onOpenChange(!1),children:(0,W.jsx)(se,{role:`listbox`,id:v.contentId,"data-state":v.open?`open`:`closed`,dir:v.dir,onContextMenu:e=>e.preventDefault(),..._,...ce,onPlaced:()=>P(!0),ref:O,style:{display:`flex`,flexDirection:`column`,outline:`none`,..._.style},onKeyDown:I(_.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&ae(e.key),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=M().filter(e=>!e.disabled).map(e=>e.ref.current);if([`ArrowUp`,`End`].includes(e.key)&&(t=t.slice().reverse()),[`ArrowUp`,`ArrowDown`].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>ne(t)),e.preventDefault()}})})})})})})});zc.displayName=Lc;var Bc=`SelectItemAlignedPosition`,Vc=H.forwardRef((e,t)=>{let{__scopeSelect:n,onPlaced:r,...i}=e,a=bc(Mc,n),o=Ic(Mc,n),[s,c]=H.useState(null),[l,u]=H.useState(null),f=E(t,e=>u(e)),p=mc(n),m=H.useRef(!1),h=H.useRef(!0),{viewport:g,selectedItem:_,selectedItemText:v,focusSelectedItem:y}=o,b=H.useCallback(()=>{if(a.trigger&&a.valueNode&&s&&l&&g&&_&&v){let e=a.trigger.getBoundingClientRect(),t=l.getBoundingClientRect(),n=a.valueNode.getBoundingClientRect(),i=v.getBoundingClientRect();if(a.dir!==`rtl`){let r=i.left-t.left,a=n.left-r,o=e.left-a,c=e.width+o,l=Math.max(c,t.width),u=window.innerWidth-Pc,d=ws(a,[Pc,Math.max(Pc,u-l)]);s.style.minWidth=c+`px`,s.style.left=d+`px`}else{let r=t.right-i.right,a=window.innerWidth-n.right-r,o=window.innerWidth-e.right-a,c=e.width+o,l=Math.max(c,t.width),u=window.innerWidth-Pc,d=ws(a,[Pc,Math.max(Pc,u-l)]);s.style.minWidth=c+`px`,s.style.right=d+`px`}let o=p(),c=window.innerHeight-Pc*2,u=g.scrollHeight,d=window.getComputedStyle(l),f=parseInt(d.borderTopWidth,10),h=parseInt(d.paddingTop,10),y=parseInt(d.borderBottomWidth,10),b=parseInt(d.paddingBottom,10),x=f+h+u+b+y,S=Math.min(_.offsetHeight*5,x),C=window.getComputedStyle(g),w=parseInt(C.paddingTop,10),T=parseInt(C.paddingBottom,10),E=e.top+e.height/2-Pc,D=c-E,O=_.offsetHeight/2,k=_.offsetTop+O,A=f+h+k,j=x-A;if(A<=E){let e=o.length>0&&_===o[o.length-1].ref.current;s.style.bottom=`0px`;let t=l.clientHeight-g.offsetTop-g.offsetHeight,n=A+Math.max(D,O+(e?T:0)+t+y);s.style.height=n+`px`}else{let e=o.length>0&&_===o[0].ref.current;s.style.top=`0px`;let t=Math.max(E,f+g.offsetTop+(e?w:0)+O)+j;s.style.height=t+`px`,g.scrollTop=A-E+g.offsetTop}s.style.margin=`${Pc}px 0`,s.style.minHeight=S+`px`,s.style.maxHeight=c+`px`,r?.(),requestAnimationFrame(()=>m.current=!0)}},[p,a.trigger,a.valueNode,s,l,g,_,v,a.dir,r]);P(()=>b(),[b]);let[x,S]=H.useState();return P(()=>{l&&S(window.getComputedStyle(l).zIndex)},[l]),(0,W.jsx)(Wc,{scope:n,contentWrapper:s,shouldExpandOnScrollRef:m,onScrollButtonChange:H.useCallback(e=>{e&&h.current===!0&&(b(),y?.(),h.current=!1)},[b,y]),children:(0,W.jsx)(`div`,{ref:c,style:{display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:x},children:(0,W.jsx)(d.div,{...i,ref:f,style:{boxSizing:`border-box`,maxHeight:`100%`,...i.style}})})})});Vc.displayName=Bc;var Hc=`SelectPopperPosition`,Uc=H.forwardRef((e,t)=>{let{__scopeSelect:n,align:r=`start`,collisionPadding:i=Pc,...a}=e,o=vc(n);return(0,W.jsx)(ee,{...o,...a,ref:t,align:r,collisionPadding:i,style:{boxSizing:`border-box`,...a.style,"--radix-select-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-select-content-available-width":`var(--radix-popper-available-width)`,"--radix-select-content-available-height":`var(--radix-popper-available-height)`,"--radix-select-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-select-trigger-height":`var(--radix-popper-anchor-height)`}})});Uc.displayName=Hc;var[Wc,Gc]=gc(Mc,{}),Kc=`SelectViewport`,qc=H.forwardRef((e,t)=>{let{__scopeSelect:n,nonce:r,...i}=e,a=Ic(Kc,n),o=Gc(Kc,n),s=E(t,a.onViewportChange),c=H.useRef(0);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`},nonce:r}),(0,W.jsx)(pc.Slot,{scope:n,children:(0,W.jsx)(d.div,{"data-radix-select-viewport":``,role:`presentation`,...i,ref:s,style:{position:`relative`,flex:1,overflow:`hidden auto`,...i.style},onScroll:I(i.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=o;if(r?.current&&n){let e=Math.abs(c.current-t.scrollTop);if(e>0){let r=window.innerHeight-Pc*2,i=parseFloat(n.style.minHeight),a=parseFloat(n.style.height),o=Math.max(i,a);if(o<r){let i=o+e,a=Math.min(r,i),s=i-a;n.style.height=a+`px`,n.style.bottom===`0px`&&(t.scrollTop=s>0?s:0,n.style.justifyContent=`flex-end`)}}}c.current=t.scrollTop})})})]})});qc.displayName=Kc;var Jc=`SelectGroup`,[Yc,Xc]=gc(Jc),Zc=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=w();return(0,W.jsx)(Yc,{scope:n,id:i,children:(0,W.jsx)(d.div,{role:`group`,"aria-labelledby":i,...r,ref:t})})});Zc.displayName=Jc;var Qc=`SelectLabel`,$c=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=Xc(Qc,n);return(0,W.jsx)(d.div,{id:i.id,...r,ref:t})});$c.displayName=Qc;var el=`SelectItem`,[tl,nl]=gc(el),rl=H.forwardRef((e,t)=>{let{__scopeSelect:n,value:r,disabled:i=!1,textValue:a,...o}=e,s=bc(el,n),c=Ic(el,n),l=s.value===r,[u,f]=H.useState(a??``),[p,m]=H.useState(!1),h=E(t,e=>c.itemRefCallback?.(e,r,i)),g=w(),_=H.useRef(`touch`),v=()=>{i||(s.onValueChange(r),s.onOpenChange(!1))};if(r===``)throw Error(`A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.`);return(0,W.jsx)(tl,{scope:n,value:r,disabled:i,textId:g,isSelected:l,onItemTextChange:H.useCallback(e=>{f(t=>t||(e?.textContent??``).trim())},[]),children:(0,W.jsx)(pc.ItemSlot,{scope:n,value:r,disabled:i,textValue:u,children:(0,W.jsx)(d.div,{role:`option`,"aria-labelledby":g,"data-highlighted":p?``:void 0,"aria-selected":l&&p,"data-state":l?`checked`:`unchecked`,"aria-disabled":i||void 0,"data-disabled":i?``:void 0,tabIndex:i?void 0:-1,...o,ref:h,onFocus:I(o.onFocus,()=>m(!0)),onBlur:I(o.onBlur,()=>m(!1)),onClick:I(o.onClick,()=>{_.current!==`mouse`&&v()}),onPointerUp:I(o.onPointerUp,()=>{_.current===`mouse`&&v()}),onPointerDown:I(o.onPointerDown,e=>{_.current=e.pointerType}),onPointerMove:I(o.onPointerMove,e=>{_.current=e.pointerType,i?c.onItemLeave?.():_.current===`mouse`&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:I(o.onPointerLeave,e=>{e.currentTarget===document.activeElement&&c.onItemLeave?.()}),onKeyDown:I(o.onKeyDown,e=>{c.searchRef?.current!==``&&e.key===` `||(dc.includes(e.key)&&v(),e.key===` `&&e.preventDefault())})})})})});rl.displayName=el;var il=`SelectItemText`,al=H.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,...a}=e,o=bc(il,n),s=Ic(il,n),c=nl(il,n),l=Sc(il,n),[u,f]=H.useState(null),p=E(t,e=>f(e),c.onItemTextChange,e=>s.itemTextRefCallback?.(e,c.value,c.disabled)),m=u?.textContent,h=H.useMemo(()=>(0,W.jsx)(`option`,{value:c.value,disabled:c.disabled,children:m},c.value),[c.disabled,c.value,m]),{onNativeOptionAdd:g,onNativeOptionRemove:_}=l;return P(()=>(g(h),()=>_(h)),[g,_,h]),(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(d.span,{id:c.textId,...a,ref:p}),c.isSelected&&o.valueNode&&!o.valueNodeHasChildren?sn.createPortal(a.children,o.valueNode):null]})});al.displayName=il;var ol=`SelectItemIndicator`,sl=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return nl(ol,n).isSelected?(0,W.jsx)(d.span,{"aria-hidden":!0,...r,ref:t}):null});sl.displayName=ol;var cl=`SelectScrollUpButton`,ll=H.forwardRef((e,t)=>{let n=Ic(cl,e.__scopeSelect),r=Gc(cl,e.__scopeSelect),[i,a]=H.useState(!1),o=E(t,r.onScrollButtonChange);return P(()=>{if(n.viewport&&n.isPositioned){let e=function(){a(t.scrollTop>0)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,W.jsx)(fl,{...e,ref:o,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop-=t.offsetHeight)}}):null});ll.displayName=cl;var ul=`SelectScrollDownButton`,dl=H.forwardRef((e,t)=>{let n=Ic(ul,e.__scopeSelect),r=Gc(ul,e.__scopeSelect),[i,a]=H.useState(!1),o=E(t,r.onScrollButtonChange);return P(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight;a(Math.ceil(t.scrollTop)<e)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,W.jsx)(fl,{...e,ref:o,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop+=t.offsetHeight)}}):null});dl.displayName=ul;var fl=H.forwardRef((e,t)=>{let{__scopeSelect:n,onAutoScroll:r,...i}=e,a=Ic(`SelectScrollButton`,n),o=H.useRef(null),s=mc(n),c=H.useCallback(()=>{o.current!==null&&(window.clearInterval(o.current),o.current=null)},[]);return H.useEffect(()=>()=>c(),[c]),P(()=>{s().find(e=>e.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:`nearest`})},[s]),(0,W.jsx)(d.div,{"aria-hidden":!0,...i,ref:t,style:{flexShrink:0,...i.style},onPointerDown:I(i.onPointerDown,()=>{o.current===null&&(o.current=window.setInterval(r,50))}),onPointerMove:I(i.onPointerMove,()=>{a.onItemLeave?.(),o.current===null&&(o.current=window.setInterval(r,50))}),onPointerLeave:I(i.onPointerLeave,()=>{c()})})}),pl=`SelectSeparator`,ml=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return(0,W.jsx)(d.div,{"aria-hidden":!0,...r,ref:t})});ml.displayName=pl;var hl=`SelectArrow`,gl=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=vc(n),a=bc(hl,n),o=Ic(hl,n);return a.open&&o.position===`popper`?(0,W.jsx)(k,{...i,...r,ref:t}):null});gl.displayName=hl;var _l=`SelectBubbleInput`,vl=H.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{let i=H.useRef(null),a=E(r,i),o=Rr(t);return H.useEffect(()=>{let e=i.current;if(!e)return;let n=window.HTMLSelectElement.prototype,r=Object.getOwnPropertyDescriptor(n,`value`).set;if(o!==t&&r){let n=new Event(`change`,{bubbles:!0});r.call(e,t),e.dispatchEvent(n)}},[o,t]),(0,W.jsx)(d.select,{...n,style:{...Kn,...n.style},ref:a,defaultValue:t})});vl.displayName=_l;function yl(e){return e===``||e===void 0}function bl(e){let t=j(e),n=H.useRef(``),r=H.useRef(0),i=H.useCallback(e=>{let i=n.current+e;t(i),(function e(t){n.current=t,window.clearTimeout(r.current),t!==``&&(r.current=window.setTimeout(()=>e(``),1e3))})(i)},[t]),a=H.useCallback(()=>{n.current=``,window.clearTimeout(r.current)},[]);return H.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,a]}function xl(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=Sl(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.textValue.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Sl(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Cl=Cc,wl=Tc,Tl=Dc,El=kc,Dl=jc,Ol=Nc,kl=qc,Al=rl,jl=al,Ml=sl,Nl=ll,Pl=dl,Fl=`Separator`,Il=`horizontal`,Ll=[`horizontal`,`vertical`],q=H.forwardRef((e,t)=>{let{decorative:n,orientation:r=Il,...i}=e,a=Rl(r)?r:Il,o=a===`vertical`?a:void 0,s=n?{role:`none`}:{"aria-orientation":o,role:`separator`};return(0,W.jsx)(d.div,{"data-orientation":a,...s,...i,ref:t})});q.displayName=Fl;function Rl(e){return Ll.includes(e)}var J=q,Y=`Switch`,[zl,Bl]=h(Y),[Vl,Hl]=zl(Y),Ul=H.forwardRef((e,t)=>{let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c=`on`,onCheckedChange:l,form:u,...f}=e,[p,m]=H.useState(null),h=E(t,e=>m(e)),g=H.useRef(!1),v=p?u||!!p.closest(`form`):!0,[y,b]=_({prop:i,defaultProp:a??!1,onChange:l,caller:Y});return(0,W.jsxs)(Vl,{scope:n,checked:y,disabled:s,children:[(0,W.jsx)(d.button,{type:`button`,role:`switch`,"aria-checked":y,"aria-required":o,"data-state":Jl(y),"data-disabled":s?``:void 0,disabled:s,value:c,...f,ref:h,onClick:I(e.onClick,e=>{b(e=>!e),v&&(g.current=e.isPropagationStopped(),g.current||e.stopPropagation())})}),v&&(0,W.jsx)(ql,{control:p,bubbles:!g.current,name:r,value:c,checked:y,required:o,disabled:s,form:u,style:{transform:`translateX(-100%)`}})]})});Ul.displayName=Y;var Wl=`SwitchThumb`,Gl=H.forwardRef((e,t)=>{let{__scopeSwitch:n,...r}=e,i=Hl(Wl,n);return(0,W.jsx)(d.span,{"data-state":Jl(i.checked),"data-disabled":i.disabled?``:void 0,...r,ref:t})});Gl.displayName=Wl;var Kl=`SwitchBubbleInput`,ql=H.forwardRef(({__scopeSwitch:e,control:t,checked:n,bubbles:r=!0,...i},a)=>{let o=H.useRef(null),s=E(o,a),c=Rr(n),l=A(t);return H.useEffect(()=>{let e=o.current;if(!e)return;let t=window.HTMLInputElement.prototype,i=Object.getOwnPropertyDescriptor(t,`checked`).set;if(c!==n&&i){let t=new Event(`click`,{bubbles:r});i.call(e,n),e.dispatchEvent(t)}},[c,n,r]),(0,W.jsx)(`input`,{type:`checkbox`,"aria-hidden":!0,defaultChecked:n,...i,tabIndex:-1,ref:s,style:{...i.style,...l,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0}})});ql.displayName=Kl;function Jl(e){return e?`checked`:`unchecked`}var Yl=Ul,Xl=Gl,[Zl,Ql]=h(`Tooltip`,[v]),$l=v(),eu=`TooltipProvider`,tu=700,nu=`tooltip.open`,[ru,iu]=Zl(eu),au=e=>{let{__scopeTooltip:t,delayDuration:n=tu,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=H.useRef(!0),s=H.useRef(!1),c=H.useRef(0);return H.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,W.jsx)(ru,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:H.useCallback(()=>{window.clearTimeout(c.current),o.current=!1},[]),onClose:H.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:H.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})};au.displayName=eu;var ou=`Tooltip`,[su,cu]=Zl(ou),lu=e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,c=iu(ou,e.__scopeTooltip),l=$l(t),[u,d]=H.useState(null),f=w(),p=H.useRef(0),m=o??c.disableHoverableContent,h=s??c.delayDuration,g=H.useRef(!1),[v,y]=_({prop:r,defaultProp:i??!1,onChange:e=>{e?(c.onOpen(),document.dispatchEvent(new CustomEvent(nu))):c.onClose(),a?.(e)},caller:ou}),b=H.useMemo(()=>v?g.current?`delayed-open`:`instant-open`:`closed`,[v]),x=H.useCallback(()=>{window.clearTimeout(p.current),p.current=0,g.current=!1,y(!0)},[y]),S=H.useCallback(()=>{window.clearTimeout(p.current),p.current=0,y(!1)},[y]),C=H.useCallback(()=>{window.clearTimeout(p.current),p.current=window.setTimeout(()=>{g.current=!0,y(!0),p.current=0},h)},[h,y]);return H.useEffect(()=>()=>{p.current&&=(window.clearTimeout(p.current),0)},[]),(0,W.jsx)(T,{...l,children:(0,W.jsx)(su,{scope:t,contentId:f,open:v,stateAttribute:b,trigger:u,onTriggerChange:d,onTriggerEnter:H.useCallback(()=>{c.isOpenDelayedRef.current?C():x()},[c.isOpenDelayedRef,C,x]),onTriggerLeave:H.useCallback(()=>{m?S():(window.clearTimeout(p.current),p.current=0)},[S,m]),onOpen:x,onClose:S,disableHoverableContent:m,children:n})})};lu.displayName=ou;var uu=`TooltipTrigger`,du=H.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=cu(uu,n),a=iu(uu,n),o=$l(n),s=E(t,H.useRef(null),i.onTriggerChange),c=H.useRef(!1),l=H.useRef(!1),u=H.useCallback(()=>c.current=!1,[]);return H.useEffect(()=>()=>document.removeEventListener(`pointerup`,u),[u]),(0,W.jsx)(M,{asChild:!0,...o,children:(0,W.jsx)(d.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:s,onPointerMove:I(e.onPointerMove,e=>{e.pointerType!==`touch`&&!l.current&&!a.isPointerInTransitRef.current&&(i.onTriggerEnter(),l.current=!0)}),onPointerLeave:I(e.onPointerLeave,()=>{i.onTriggerLeave(),l.current=!1}),onPointerDown:I(e.onPointerDown,()=>{i.open&&i.onClose(),c.current=!0,document.addEventListener(`pointerup`,u,{once:!0})}),onFocus:I(e.onFocus,()=>{c.current||i.onOpen()}),onBlur:I(e.onBlur,i.onClose),onClick:I(e.onClick,i.onClose)})})});du.displayName=uu;var fu=`TooltipPortal`,[pu,mu]=Zl(fu,{forceMount:void 0}),hu=e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=cu(fu,t);return(0,W.jsx)(pu,{scope:t,forceMount:n,children:(0,W.jsx)(C,{present:n||a.open,children:(0,W.jsx)(N,{asChild:!0,container:i,children:r})})})};hu.displayName=fu;var gu=`TooltipContent`,_u=H.forwardRef((e,t)=>{let n=mu(gu,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=cu(gu,e.__scopeTooltip);return(0,W.jsx)(C,{present:r||o.open,children:o.disableHoverableContent?(0,W.jsx)(Su,{side:i,...a,ref:t}):(0,W.jsx)(vu,{side:i,...a,ref:t})})}),vu=H.forwardRef((e,t)=>{let n=cu(gu,e.__scopeTooltip),r=iu(gu,e.__scopeTooltip),i=H.useRef(null),a=E(t,i),[o,s]=H.useState(null),{trigger:c,onClose:l}=n,u=i.current,{onPointerInTransitChange:d}=r,f=H.useCallback(()=>{s(null),d(!1)},[d]),p=H.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=Eu(r,Tu(r,n.getBoundingClientRect())),a=Du(t.getBoundingClientRect());s(ku([...i,...a])),d(!0)},[d]);return H.useEffect(()=>()=>f(),[f]),H.useEffect(()=>{if(c&&u){let e=e=>p(e,u),t=e=>p(e,c);return c.addEventListener(`pointerleave`,e),u.addEventListener(`pointerleave`,t),()=>{c.removeEventListener(`pointerleave`,e),u.removeEventListener(`pointerleave`,t)}}},[c,u,p,f]),H.useEffect(()=>{if(o){let e=e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=c?.contains(t)||u?.contains(t),i=!Ou(n,o);r?f():i&&(f(),l())};return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[c,u,o,l,f]),(0,W.jsx)(Su,{...e,ref:a})}),[yu,bu]=Zl(ou,{isInside:!1}),xu=f(`TooltipContent`),Su=H.forwardRef((e,t)=>{let{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:a,onPointerDownOutside:o,...s}=e,c=cu(gu,n),l=$l(n),{onClose:u}=c;return H.useEffect(()=>(document.addEventListener(nu,u),()=>document.removeEventListener(nu,u)),[u]),H.useEffect(()=>{if(c.trigger){let e=e=>{e.target?.contains(c.trigger)&&u()};return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[c.trigger,u]),(0,W.jsx)(S,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:u,children:(0,W.jsxs)(ee,{"data-state":c.stateAttribute,...l,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,W.jsx)(xu,{children:r}),(0,W.jsx)(yu,{scope:n,isInside:!0,children:(0,W.jsx)(Yn,{id:c.contentId,role:`tooltip`,children:i||r})})]})})});_u.displayName=gu;var Cu=`TooltipArrow`,wu=H.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=$l(n);return bu(Cu,n).isInside?null:(0,W.jsx)(k,{...i,...r,ref:t})});wu.displayName=Cu;function Tu(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}function Eu(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function Du(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}function Ou(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function ku(e){let t=e.slice();return t.sort((e,t)=>e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:e.y>t.y?1:0),Au(t)}function Au(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var ju=au,Mu=lu,Nu=du,Pu=hu,Fu=_u,Iu=wu;function Lu({delayDuration:e=0,...t}){return(0,W.jsx)(ju,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function Ru({...e}){return(0,W.jsx)(Mu,{"data-slot":`tooltip`,...e})}function zu({...e}){return(0,W.jsx)(Nu,{"data-slot":`tooltip-trigger`,...e})}function Bu({className:e,sideOffset:t=0,children:n,...r}){return(0,W.jsx)(Pu,{children:(0,W.jsxs)(Fu,{"data-slot":`tooltip-content`,sideOffset:t,className:L(`z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95`,e),...r,children:[n,(0,W.jsx)(Iu,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}function Vu(e,t){let n=getComputedStyle(e);return t*parseFloat(n.fontSize)}function Hu(e,t){let n=getComputedStyle(e.ownerDocument.body);return t*parseFloat(n.fontSize)}function Uu(e){return e/100*window.innerHeight}function Wu(e){return e/100*window.innerWidth}function Gu(e){switch(typeof e){case`number`:return[e,`px`];case`string`:{let t=parseFloat(e);return e.endsWith(`%`)?[t,`%`]:e.endsWith(`px`)?[t,`px`]:e.endsWith(`rem`)?[t,`rem`]:e.endsWith(`em`)?[t,`em`]:e.endsWith(`vh`)?[t,`vh`]:e.endsWith(`vw`)?[t,`vw`]:[t,`%`]}}}function X({groupSize:e,panelElement:t,styleProp:n}){let r,[i,a]=Gu(n);switch(a){case`%`:r=i/100*e;break;case`px`:r=i;break;case`rem`:r=Hu(t,i);break;case`em`:r=Vu(t,i);break;case`vh`:r=Uu(i);break;case`vw`:r=Wu(i);break}return r}function Ku(e){return parseFloat(e.toFixed(3))}function qu({group:e}){let{orientation:t,panels:n}=e;return n.reduce((e,n)=>(e+=t===`horizontal`?n.element.offsetWidth:n.element.offsetHeight,e),0)}function Ju(e){let{panels:t}=e,n=qu({group:e});return n===0?t.map(e=>({groupResizeBehavior:e.panelConstraints.groupResizeBehavior,collapsedSize:0,collapsible:e.panelConstraints.collapsible===!0,defaultSize:void 0,disabled:e.panelConstraints.disabled,minSize:0,maxSize:100,panelId:e.id})):t.map(e=>{let{element:t,panelConstraints:r}=e,i=0;r.collapsedSize!==void 0&&(i=Ku(X({groupSize:n,panelElement:t,styleProp:r.collapsedSize})/n*100));let a;r.defaultSize!==void 0&&(a=Ku(X({groupSize:n,panelElement:t,styleProp:r.defaultSize})/n*100));let o=0;r.minSize!==void 0&&(o=Ku(X({groupSize:n,panelElement:t,styleProp:r.minSize})/n*100));let s=100;return r.maxSize!==void 0&&(s=Ku(X({groupSize:n,panelElement:t,styleProp:r.maxSize})/n*100)),{groupResizeBehavior:r.groupResizeBehavior,collapsedSize:i,collapsible:r.collapsible===!0,defaultSize:a,disabled:r.disabled,minSize:o,maxSize:s,panelId:e.id}})}function Yu(e,t=`Assertion error`){if(!e)throw Error(t)}function Xu(e,t){return Array.from(t).sort(e===`horizontal`?Zu:Qu)}function Zu(e,t){let n=e.element.offsetLeft-t.element.offsetLeft;return n===0?e.element.offsetWidth-t.element.offsetWidth:n}function Qu(e,t){let n=e.element.offsetTop-t.element.offsetTop;return n===0?e.element.offsetHeight-t.element.offsetHeight:n}function $u(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.ELEMENT_NODE}function ed(e,t){return{x:e.x>=t.left&&e.x<=t.right?0:Math.min(Math.abs(e.x-t.left),Math.abs(e.x-t.right)),y:e.y>=t.top&&e.y<=t.bottom?0:Math.min(Math.abs(e.y-t.top),Math.abs(e.y-t.bottom))}}function td({orientation:e,rects:t,targetRect:n}){let r={x:n.x+n.width/2,y:n.y+n.height/2},i,a=Number.MAX_VALUE;for(let n of t){let{x:t,y:o}=ed(r,n),s=e===`horizontal`?t:o;s<a&&(a=s,i=n)}return Yu(i,`No rect found`),i}var nd;function rd(){return nd===void 0&&(nd=typeof matchMedia==`function`?!!matchMedia(`(pointer:coarse)`).matches:!1),nd}function id(e){let{element:t,orientation:n,panels:r,separators:i}=e,a=Xu(n,Array.from(t.children).filter($u).map(e=>({element:e}))).map(({element:e})=>e),o=[],s=!1,c=!1,l=-1,u=-1,d=0,f,p=[];{let e=-1;for(let t of a)t.hasAttribute(`data-panel`)&&(e++,t.ariaDisabled===null&&(d++,l===-1&&(l=e),u=e))}if(d>1){let t=-1;for(let d of a)if(d.hasAttribute(`data-panel`)){t++;let i=r.find(e=>e.element===d);if(i){if(f){let r=f.element.getBoundingClientRect(),a=d.getBoundingClientRect(),m;if(c){let e=n===`horizontal`?new DOMRect(r.right,r.top,0,r.height):new DOMRect(r.left,r.bottom,r.width,0),t=n===`horizontal`?new DOMRect(a.left,a.top,0,a.height):new DOMRect(a.left,a.top,a.width,0);switch(p.length){case 0:m=[e,t];break;case 1:{let i=p[0];m=[i,td({orientation:n,rects:[r,a],targetRect:i.element.getBoundingClientRect()})===r?t:e];break}default:m=p;break}}else m=p.length?p:[n===`horizontal`?new DOMRect(r.right,a.top,a.left-r.right,a.height):new DOMRect(a.left,r.bottom,a.width,a.top-r.bottom)];for(let n of m){let r=`width`in n?n:n.element.getBoundingClientRect(),a=rd()?e.resizeTargetMinimumSize.coarse:e.resizeTargetMinimumSize.fine;if(r.width<a){let e=a-r.width;r=new DOMRect(r.x-e/2,r.y,r.width+e,r.height)}if(r.height<a){let e=a-r.height;r=new DOMRect(r.x,r.y-e/2,r.width,r.height+e)}!s&&!(t<=l||t>u)&&o.push({group:e,groupSize:qu({group:e}),panels:[f,i],separator:`width`in n?void 0:n,rect:r}),s=!1}}c=!1,f=i,p=[]}}else if(d.hasAttribute(`data-separator`)){d.ariaDisabled!==null&&(s=!0);let e=i.find(e=>e.element===d);e?p.push(e):(f=void 0,p=[])}else c=!0}return o}var ad=class{#e={};addListener(e,t){let n=this.#e[e];return n===void 0?this.#e[e]=[t]:n.includes(t)||n.push(t),()=>{this.removeListener(e,t)}}emit(e,t){let n=this.#e[e];if(n!==void 0)if(n.length===1)n[0].call(null,t);else{let e=!1,r=null,i=Array.from(n);for(let n=0;n<i.length;n++){let a=i[n];try{a.call(null,t)}catch(t){r===null&&(e=!0,r=t)}}if(e)throw r}}removeAllListeners(){this.#e={}}removeListener(e,t){let n=this.#e[e];if(n!==void 0){let e=n.indexOf(t);e>=0&&n.splice(e,1)}}},od=new Map,sd=new ad;function cd(e){od=new Map(od),od.delete(e)}function ld(e,t){for(let[t]of od)if(t.id===e)return t}function ud(e,t){for(let[t,n]of od)if(t.id===e)return n;if(t)throw Error(`Could not find data for Group with id ${e}`)}function dd(){return od}function fd(e,t){return sd.addListener(`groupChange`,n=>{n.group.id===e&&t(n)})}function pd(e,t){let n=od.get(e);od=new Map(od),od.set(e,t),sd.emit(`groupChange`,{group:e,prev:n,next:t})}function md(e,t,n){let r,i={x:1/0,y:1/0};for(let a of t){let t=ed(n,a.rect);switch(e){case`horizontal`:t.x<=i.x&&(r=a,i=t);break;case`vertical`:t.y<=i.y&&(r=a,i=t);break}}return r?{distance:i,hitRegion:r}:void 0}function hd(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function gd(e,t){if(e===t)throw Error(`Cannot compare node with itself`);let n={a:xd(e),b:xd(t)},r;for(;n.a.at(-1)===n.b.at(-1);)r=n.a.pop(),n.b.pop();Yu(r,`Stacking order can only be calculated for elements with a common ancestor`);let i={a:Z(bd(n.a)),b:Z(bd(n.b))};if(i.a===i.b){let e=r.childNodes,t={a:n.a.at(-1),b:n.b.at(-1)},i=e.length;for(;i--;){let n=e[i];if(n===t.a)return 1;if(n===t.b)return-1}}return Math.sign(i.a-i.b)}var _d=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function vd(e){let t=getComputedStyle(Sd(e)??e).display;return t===`flex`||t===`inline-flex`}function yd(e){let t=getComputedStyle(e);return!!(t.position===`fixed`||t.zIndex!==`auto`&&(t.position!==`static`||vd(e))||+t.opacity<1||`transform`in t&&t.transform!==`none`||`webkitTransform`in t&&t.webkitTransform!==`none`||`mixBlendMode`in t&&t.mixBlendMode!==`normal`||`filter`in t&&t.filter!==`none`||`webkitFilter`in t&&t.webkitFilter!==`none`||`isolation`in t&&t.isolation===`isolate`||_d.test(t.willChange)||t.webkitOverflowScrolling===`touch`)}function bd(e){let t=e.length;for(;t--;){let n=e[t];if(Yu(n,`Missing node`),yd(n))return n}return null}function Z(e){return e&&Number(getComputedStyle(e).zIndex)||0}function xd(e){let t=[];for(;e;)t.push(e),e=Sd(e);return t}function Sd(e){let{parentNode:t}=e;return hd(t)?t.host:t}function Cd(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function wd({groupElement:e,hitRegion:t,pointerEventTarget:n}){if(!$u(n)||n.contains(e)||e.contains(n))return!0;if(gd(n,e)>0){let r=n;for(;r;){if(r.contains(e))return!0;if(Cd(r.getBoundingClientRect(),t))return!1;r=r.parentElement}}return!0}function Td(e,t){let n=[];return t.forEach((t,r)=>{if(r.disabled)return;let i=id(r),a=md(r.orientation,i,{x:e.clientX,y:e.clientY});a&&a.distance.x<=0&&a.distance.y<=0&&wd({groupElement:r.element,hitRegion:a.hitRegion.rect,pointerEventTarget:e.target})&&n.push(a.hitRegion)}),n}function Ed(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}function Dd(e,t,n=0){return Math.abs(Ku(e)-Ku(t))<=n}function Od(e,t){return Dd(e,t)?0:e>t?1:-1}function kd({overrideDisabledPanels:e,panelConstraints:t,prevSize:n,size:r}){let{collapsedSize:i=0,collapsible:a,disabled:o,maxSize:s=100,minSize:c=0}=t;if(o&&!e)return n;if(Od(r,c)<0)if(a){let e=(i+c)/2;r=Od(r,e)<0?i:c}else r=c;return r=Math.min(s,r),r=Ku(r),r}function Ad({delta:e,initialLayout:t,panelConstraints:n,pivotIndices:r,prevLayout:i,trigger:a}){if(Dd(e,0))return t;let o=a===`imperative-api`,s=Object.values(t),c=Object.values(i),l=[...s],[u,d]=r;Yu(u!=null,`Invalid first pivot index`),Yu(d!=null,`Invalid second pivot index`);let f=0;switch(a){case`keyboard`:{let t=e<0?d:u,r=n[t];Yu(r,`Panel constraints not found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(Yu(n!=null,`Previous layout not found for panel index ${t}`),Dd(n,i)){let t=o-n;Od(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?u:d,r=n[t];Yu(r,`No panel constraints found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(Yu(n!=null,`Previous layout not found for panel index ${t}`),Dd(n,o)){let t=n-i;Od(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}break;default:{let t=e<0?d:u,r=n[t];Yu(r,`Panel constraints not found for index ${t}`);let i=s[t],{collapsible:a,collapsedSize:o,minSize:c}=r;if(a&&Od(i,c)<0)if(e>0){let t=c-o,n=t/2;Od(i+e,c)<0&&(e=Od(e,n)<=0?0:t)}else{let t=c-o,n=100-t/2;Od(i-e,c)<0&&(e=Od(100+e,n)>0?0:-t)}break}}{let t=e<0?1:-1,r=e<0?d:u,i=0;for(;;){let e=s[r];Yu(e!=null,`Previous layout not found for panel index ${r}`);let a=kd({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:e,size:100})-e;if(i+=a,r+=t,r<0||r>=n.length)break}let a=Math.min(Math.abs(e),Math.abs(i));e=e<0?0-a:a}{let t=e<0?u:d;for(;t>=0&&t<n.length;){let r=Math.abs(e)-Math.abs(f),i=s[t];Yu(i!=null,`Previous layout not found for panel index ${t}`);let a=i-r,c=kd({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:i,size:a});if(!Dd(i,c)&&(f+=i-c,l[t]=c,f.toFixed(3).localeCompare(Math.abs(e).toFixed(3),void 0,{numeric:!0})>=0))break;e<0?t--:t++}}if(Ed(c,l))return i;{let t=e<0?d:u,r=s[t];Yu(r!=null,`Previous layout not found for panel index ${t}`);let i=r+f,a=kd({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:r,size:i});if(l[t]=a,!Dd(a,i)){let t=i-a,r=e<0?d:u;for(;r>=0&&r<n.length;){let i=l[r];Yu(i!=null,`Previous layout not found for panel index ${r}`);let a=i+t,s=kd({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:i,size:a});if(Dd(i,s)||(t-=s-i,l[r]=s),Dd(t,0))break;e>0?r--:r++}}}if(!Dd(Object.values(l).reduce((e,t)=>t+e,0),100,.1))return i;let p=Object.keys(i);return l.reduce((e,t,n)=>(e[p[n]]=t,e),{})}function jd(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(t[n]===void 0||Od(e[n],t[n])!==0)return!1;return!0}function Md({layout:e,panelConstraints:t}){let n=Object.values(e),r=[...n],i=r.reduce((e,t)=>e+t,0);if(r.length!==t.length)throw Error(`Invalid ${t.length} panel layout: ${r.map(e=>`${e}%`).join(`, `)}`);if(!Dd(i,100)&&r.length>0)for(let e=0;e<t.length;e++){let t=r[e];Yu(t!=null,`No layout data found for index ${e}`),r[e]=100/i*t}let a=0;for(let e=0;e<t.length;e++){let i=n[e];Yu(i!=null,`No layout data found for index ${e}`);let o=r[e];Yu(o!=null,`No layout data found for index ${e}`);let s=kd({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:i,size:o});o!=s&&(a+=o-s,r[e]=s)}if(!Dd(a,0))for(let e=0;e<t.length;e++){let n=r[e];Yu(n!=null,`No layout data found for index ${e}`);let i=n+a,o=kd({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:n,size:i});if(n!==o&&(a-=o-n,r[e]=o,Dd(a,0)))break}let o=Object.keys(e);return r.reduce((e,t,n)=>(e[o[n]]=t,e),{})}function Nd({groupId:e,panelId:t}){let n=()=>{let t=dd();for(let[n,{defaultLayoutDeferred:r,derivedPanelConstraints:i,layout:a,groupSize:o,separatorToPanels:s}]of t)if(n.id===e)return{defaultLayoutDeferred:r,derivedPanelConstraints:i,group:n,groupSize:o,layout:a,separatorToPanels:s};throw Error(`Group ${e} not found`)},r=()=>{let e=n().derivedPanelConstraints.find(e=>e.panelId===t);if(e!==void 0)return e;throw Error(`Panel constraints not found for Panel ${t}`)},i=()=>{let e=n().group.panels.find(e=>e.id===t);if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},a=()=>{let e=n().layout[t];if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},o=e=>{let r=a();if(e===r)return;let{defaultLayoutDeferred:i,derivedPanelConstraints:o,group:s,groupSize:c,layout:l,separatorToPanels:u}=n(),d=s.panels.findIndex(e=>e.id===t),f=d===s.panels.length-1,p=Md({layout:Ad({delta:f?r-e:e-r,initialLayout:l,panelConstraints:o,pivotIndices:f?[d-1,d]:[d,d+1],prevLayout:l,trigger:`imperative-api`}),panelConstraints:o});jd(l,p)||pd(s,{defaultLayoutDeferred:i,derivedPanelConstraints:o,groupSize:c,layout:p,separatorToPanels:u})};return{collapse:()=>{let{collapsible:e,collapsedSize:t}=r(),{mutableValues:n}=i(),s=a();e&&s!==t&&(n.expandToSize=s,o(t))},expand:()=>{let{collapsible:e,collapsedSize:t,minSize:n}=r(),{mutableValues:s}=i(),c=a();if(e&&c===t){let e=s.expandToSize??n;e===0&&(e=1),o(e)}},getSize:()=>{let{group:e}=n(),t=a(),{element:r}=i();return{asPercentage:t,inPixels:e.orientation===`horizontal`?r.offsetWidth:r.offsetHeight}},isCollapsed:()=>{let{collapsible:e,collapsedSize:t}=r(),n=a();return e&&Dd(t,n)},resize:e=>{let{group:t}=n(),{element:r}=i(),a=qu({group:t});o(Ku(X({groupSize:a,panelElement:r,styleProp:e})/a*100))}}}function Pd(e){e.defaultPrevented||Td(e,dd()).forEach(t=>{if(t.separator){let n=t.panels.find(e=>e.panelConstraints.defaultSize!==void 0);if(n){let r=n.panelConstraints.defaultSize,i=Nd({groupId:t.group.id,panelId:n.id});i&&r!==void 0&&(i.resize(r),e.preventDefault())}}})}function Fd(e){let t=dd();for(let[n]of t)if(n.separators.some(t=>t.element===e))return n;throw Error(`Could not find parent Group for separator element`)}function Id({groupId:e}){let t=()=>{let t=dd();for(let[n,r]of t)if(n.id===e)return{group:n,...r};throw Error(`Could not find Group with id "${e}"`)};return{getLayout(){let{defaultLayoutDeferred:e,layout:n}=t();return e?{}:n},setLayout(e){let{defaultLayoutDeferred:n,derivedPanelConstraints:r,group:i,groupSize:a,layout:o,separatorToPanels:s}=t(),c=Md({layout:e,panelConstraints:r});return n?o:(jd(o,c)||pd(i,{defaultLayoutDeferred:n,derivedPanelConstraints:r,groupSize:a,layout:c,separatorToPanels:s}),c)}}}function Ld(e,t){let n=Fd(e),r=ud(n.id,!0),i=n.separators.find(t=>t.element===e);Yu(i,`Matching separator not found`);let a=r.separatorToPanels.get(i);Yu(a,`Matching panels not found`);let o=a.map(e=>n.panels.indexOf(e)),s=Id({groupId:n.id}).getLayout(),c=Md({layout:Ad({delta:t,initialLayout:s,panelConstraints:r.derivedPanelConstraints,pivotIndices:o,prevLayout:s,trigger:`keyboard`}),panelConstraints:r.derivedPanelConstraints});jd(s,c)||pd(n,{defaultLayoutDeferred:r.defaultLayoutDeferred,derivedPanelConstraints:r.derivedPanelConstraints,groupSize:r.groupSize,layout:c,separatorToPanels:r.separatorToPanels})}function Rd(e){if(e.defaultPrevented)return;let t=e.currentTarget,n=Fd(t);if(!n.disabled)switch(e.key){case`ArrowDown`:e.preventDefault(),n.orientation===`vertical`&&Ld(t,5);break;case`ArrowLeft`:e.preventDefault(),n.orientation===`horizontal`&&Ld(t,-5);break;case`ArrowRight`:e.preventDefault(),n.orientation===`horizontal`&&Ld(t,5);break;case`ArrowUp`:e.preventDefault(),n.orientation===`vertical`&&Ld(t,-5);break;case`End`:e.preventDefault(),Ld(t,100);break;case`Enter`:{e.preventDefault();let n=Fd(t),{derivedPanelConstraints:r,layout:i,separatorToPanels:a}=ud(n.id,!0),o=n.separators.find(e=>e.element===t);Yu(o,`Matching separator not found`);let s=a.get(o);Yu(s,`Matching panels not found`);let c=s[0],l=r.find(e=>e.panelId===c.id);if(Yu(l,`Panel metadata not found`),l.collapsible){let e=i[c.id];Ld(t,(l.collapsedSize===e?n.mutableState.expandedPanelSizes[c.id]??l.minSize:l.collapsedSize)-e)}break}case`F6`:{e.preventDefault();let n=Fd(t).separators.map(e=>e.element),r=Array.from(n).findIndex(t=>t===e.currentTarget);Yu(r!==null,`Index not found`),n[e.shiftKey?r>0?r-1:n.length-1:r+1<n.length?r+1:0].focus({preventScroll:!0});break}case`Home`:e.preventDefault(),Ld(t,-100);break}}var zd={cursorFlags:0,state:`inactive`},Bd=new ad;function Vd(){return zd}function Hd(e){return Bd.addListener(`change`,e)}function Ud(e){let t=zd,n={...zd};n.cursorFlags=e,zd=n,Bd.emit(`change`,{prev:t,next:n})}function Wd(e){let t=zd;zd=e,Bd.emit(`change`,{prev:t,next:e})}function Gd(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=dd(),n=Td(e,t),r=new Map,i=!1;n.forEach(e=>{e.separator&&(i||(i=!0,e.separator.element.focus({preventScroll:!0})));let n=t.get(e.group);n&&r.set(e.group,n.layout)}),Wd({cursorFlags:0,hitRegions:n,initialLayoutMap:r,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:`active`}),n.length&&e.preventDefault()}var Kd=e=>e,qd=()=>{},Jd=1,Yd=2,Xd=4,Zd=8,Qd=3,$d=12,ef;function tf(){return ef===void 0&&(ef=!1,typeof window<`u`&&(window.navigator.userAgent.includes(`Chrome`)||window.navigator.userAgent.includes(`Firefox`))&&(ef=!0)),ef}function nf({cursorFlags:e,groups:t,state:n}){let r=0,i=0;switch(n){case`active`:case`hover`:t.forEach(e=>{if(!e.mutableState.disableCursor)switch(e.orientation){case`horizontal`:r++;break;case`vertical`:i++;break}})}if(!(r===0&&i===0)){switch(n){case`active`:if(e&&tf()){let t=(e&Jd)!==0,n=(e&Yd)!==0,r=(e&Xd)!==0,i=(e&Zd)!==0;if(t)return r?`se-resize`:i?`ne-resize`:`e-resize`;if(n)return r?`sw-resize`:i?`nw-resize`:`w-resize`;if(r)return`s-resize`;if(i)return`n-resize`}break}return tf()?r>0&&i>0?`move`:r>0?`ew-resize`:`ns-resize`:r>0&&i>0?`grab`:r>0?`col-resize`:`row-resize`}}var rf=new WeakMap;function af(e){if(e.defaultView===null||e.defaultView===void 0)return;let{prevStyle:t,styleSheet:n}=rf.get(e)??{};n===void 0&&(n=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets&&e.adoptedStyleSheets.push(n));let r=Vd();switch(r.state){case`active`:case`hover`:{let e=nf({cursorFlags:r.cursorFlags,groups:r.hitRegions.map(e=>e.group),state:r.state}),i=`*, *:hover {cursor: ${e} !important; }`;if(t===i)return;t=i,e?n.cssRules.length===0?n.insertRule(i):n.replaceSync(i):n.cssRules.length===1&&n.deleteRule(0);break}case`inactive`:t=void 0,n.cssRules.length===1&&n.deleteRule(0);break}rf.set(e,{prevStyle:t,styleSheet:n})}function of({document:e,event:t,hitRegions:n,initialLayoutMap:r,mountedGroups:i,pointerDownAtPoint:a,prevCursorFlags:o}){let s=0;n.forEach(e=>{let{group:n,groupSize:o}=e,{orientation:c,panels:l}=n,{disableCursor:u}=n.mutableState,d=0;d=a?c===`horizontal`?(t.clientX-a.x)/o*100:(t.clientY-a.y)/o*100:c===`horizontal`?t.clientX<0?-100:100:t.clientY<0?-100:100;let f=r.get(n),p=i.get(n);if(!f||!p)return;let{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:_,separatorToPanels:v}=p;if(h&&_&&v){let t=Ad({delta:d,initialLayout:f,panelConstraints:h,pivotIndices:e.panels.map(e=>l.indexOf(e)),prevLayout:_,trigger:`mouse-or-touch`});if(jd(t,_)){if(d!==0&&!u)switch(c){case`horizontal`:s|=d<0?Jd:Yd;break;case`vertical`:s|=d<0?Xd:Zd;break}}else pd(e.group,{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:t,separatorToPanels:v})}});let c=0;t.movementX===0?c|=o&Qd:c|=s&Qd,t.movementY===0?c|=o&$d:c|=s&$d,Ud(c),af(e)}function sf(e){let t=dd(),n=Vd();switch(n.state){case`active`:of({document:e.currentTarget,event:e,hitRegions:n.hitRegions,initialLayoutMap:n.initialLayoutMap,mountedGroups:t,prevCursorFlags:n.cursorFlags})}}function cf(e){if(e.defaultPrevented)return;let t=Vd(),n=dd();switch(t.state){case`active`:if(e.buttons===0){Wd({cursorFlags:0,state:`inactive`}),t.hitRegions.forEach(e=>{let t=ud(e.group.id,!0);pd(e.group,t)});return}of({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:n,pointerDownAtPoint:t.pointerDownAtPoint,prevCursorFlags:t.cursorFlags});break;default:{let r=Td(e,n);r.length===0?t.state!==`inactive`&&Wd({cursorFlags:0,state:`inactive`}):Wd({cursorFlags:0,hitRegions:r,state:`hover`}),af(e.currentTarget);break}}}function lf(e){if(e.relatedTarget instanceof HTMLIFrameElement)switch(Vd().state){case`hover`:Wd({cursorFlags:0,state:`inactive`})}}function uf(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=Vd();switch(t.state){case`active`:Wd({cursorFlags:0,state:`inactive`}),t.hitRegions.length>0&&(af(e.currentTarget),t.hitRegions.forEach(e=>{let t=ud(e.group.id,!0);pd(e.group,t)}),e.preventDefault())}}function df(e){let t=0,n=0,r={};for(let i of e)if(i.defaultSize!==void 0){t++;let e=Ku(i.defaultSize);n+=e,r[i.panelId]=e}else r[i.panelId]=void 0;let i=e.length-t;if(i!==0){let t=Ku((100-n)/i);for(let n of e)n.defaultSize===void 0&&(r[n.panelId]=t)}return r}function ff(e,t,n){if(!n[0])return;let r=e.panels.find(e=>e.element===t);if(!r||!r.onResize)return;let i=qu({group:e}),a=e.orientation===`horizontal`?r.element.offsetWidth:r.element.offsetHeight,o=r.mutableValues.prevSize,s={asPercentage:Ku(a/i*100),inPixels:a};r.mutableValues.prevSize=s,r.onResize(s,r.id,o)}function pf(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function mf({group:e,nextGroupSize:t,prevGroupSize:n,prevLayout:r}){if(n<=0||t<=0||n===t)return r;let i=0,a=0,o=!1,s=new Map,c=[];for(let l of e.panels){let e=r[l.id]??0;switch(l.panelConstraints.groupResizeBehavior){case`preserve-pixel-size`:{o=!0;let r=Ku(e/100*n/t*100);s.set(l.id,r),i+=r;break}default:c.push(l.id),a+=e;break}}if(!o||c.length===0)return r;let l=100-i,u={...r};if(s.forEach((e,t)=>{u[t]=e}),a>0)for(let e of c)u[e]=Ku((r[e]??0)/a*l);else{let e=Ku(l/c.length);for(let t of c)u[t]=e}return u}function hf(e,t){let n=e.map(e=>e.id),r=Object.keys(t);if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}var gf=new Map;function _f(e){let t=!0;Yu(e.element.ownerDocument.defaultView,`Cannot register an unmounted Group`);let n=e.element.ownerDocument.defaultView.ResizeObserver,r=new Set,i=new Set,a=new n(n=>{for(let r of n){let{borderBoxSize:n,target:i}=r;if(i===e.element){if(t){let t=qu({group:e});if(t===0)return;let n=ud(e.id);if(!n)return;let r=Ju(e),i=n.defaultLayoutDeferred?df(r):n.layout,a=Md({layout:mf({group:e,nextGroupSize:t,prevGroupSize:n.groupSize,prevLayout:i}),panelConstraints:r});if(!n.defaultLayoutDeferred&&jd(n.layout,a)&&pf(n.derivedPanelConstraints,r)&&n.groupSize===t)return;pd(e,{defaultLayoutDeferred:!1,derivedPanelConstraints:r,groupSize:t,layout:a,separatorToPanels:n.separatorToPanels})}}else ff(e,i,n)}});a.observe(e.element),e.panels.forEach(e=>{Yu(!r.has(e.id),`Panel ids must be unique; id "${e.id}" was used more than once`),r.add(e.id),e.onResize&&a.observe(e.element)});let o=qu({group:e}),s=Ju(e),c=e.panels.map(({id:e})=>e).join(`,`),l=e.mutableState.defaultLayout;l&&(hf(e.panels,l)||(l=void 0));let u=Md({layout:e.mutableState.layouts[c]??l??df(s),panelConstraints:s}),d=e.element.ownerDocument;gf.set(d,(gf.get(d)??0)+1);let f=new Map;return id(e).forEach(e=>{e.separator&&f.set(e.separator,e.panels)}),pd(e,{defaultLayoutDeferred:o===0,derivedPanelConstraints:s,groupSize:o,layout:u,separatorToPanels:f}),e.separators.forEach(e=>{Yu(!i.has(e.id),`Separator ids must be unique; id "${e.id}" was used more than once`),i.add(e.id),e.element.addEventListener(`keydown`,Rd)}),gf.get(d)===1&&(d.addEventListener(`dblclick`,Pd,!0),d.addEventListener(`pointerdown`,Gd,!0),d.addEventListener(`pointerleave`,sf),d.addEventListener(`pointermove`,cf),d.addEventListener(`pointerout`,lf),d.addEventListener(`pointerup`,uf,!0)),function(){t=!1,gf.set(d,Math.max(0,(gf.get(d)??0)-1)),cd(e),e.separators.forEach(e=>{e.element.removeEventListener(`keydown`,Rd)}),gf.get(d)||(d.removeEventListener(`dblclick`,Pd,!0),d.removeEventListener(`pointerdown`,Gd,!0),d.removeEventListener(`pointerleave`,sf),d.removeEventListener(`pointermove`,cf),d.removeEventListener(`pointerout`,lf),d.removeEventListener(`pointerup`,uf,!0)),a.disconnect()}}function vf(){let[e,t]=(0,H.useState)({});return[e,(0,H.useCallback)(()=>t({}),[])]}function yf(e){let t=(0,H.useId)();return`${e??t}`}var bf=typeof window<`u`?H.useLayoutEffect:H.useEffect;function xf(e){let t=(0,H.useRef)(e);return bf(()=>{t.current=e},[e]),(0,H.useCallback)((...e)=>t.current?.(...e),[t])}function Sf(...e){return xf(t=>{e.forEach(e=>{if(e)switch(typeof e){case`function`:e(t);break;case`object`:e.current=t;break}})})}function Cf(e){let t=(0,H.useRef)({...e});return bf(()=>{for(let n in e)t.current[n]=e[n]},[e]),t.current}var wf=(0,H.createContext)(null);function Tf(e,t){let n=(0,H.useRef)({getLayout:()=>({}),setLayout:Kd});(0,H.useImperativeHandle)(t,()=>n.current,[]),bf(()=>{Object.assign(n.current,Id({groupId:e}))})}function Ef({children:e,className:t,defaultLayout:n,disableCursor:r,disabled:i,elementRef:a,groupRef:o,id:s,onLayoutChange:c,onLayoutChanged:l,orientation:u=`horizontal`,resizeTargetMinimumSize:d={coarse:20,fine:10},style:f,...p}){let m=(0,H.useRef)({onLayoutChange:{},onLayoutChanged:{}}),h=xf(e=>{jd(m.current.onLayoutChange,e)||(m.current.onLayoutChange=e,c?.(e))}),g=xf(e=>{jd(m.current.onLayoutChanged,e)||(m.current.onLayoutChanged=e,l?.(e))}),_=yf(s),v=(0,H.useRef)(null),[y,b]=vf(),x=(0,H.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],resizeTargetMinimumSize:d,separators:[]}),S=Sf(v,a);Tf(_,o);let C=xf((e,t)=>{let r=Vd(),i=ld(e),a=ud(e);if(a){let e=!1;switch(r.state){case`active`:e=r.hitRegions.some(e=>e.group===i);break}return{flexGrow:a.layout[t]??1,pointerEvents:e?`none`:void 0}}return{flexGrow:n?.[t]??1}}),w=Cf({defaultLayout:n,disableCursor:r}),T=(0,H.useMemo)(()=>({get disableCursor(){return!!w.disableCursor},getPanelStyles:C,id:_,orientation:u,registerPanel:e=>{let t=x.current;return t.panels=Xu(u,[...t.panels,e]),b(),()=>{t.panels=t.panels.filter(t=>t!==e),b()}},registerSeparator:e=>{let t=x.current;return t.separators=Xu(u,[...t.separators,e]),b(),()=>{t.separators=t.separators.filter(t=>t!==e),b()}},togglePanelDisabled:(e,t)=>{let n=x.current.panels.find(t=>t.id===e);n&&(n.panelConstraints.disabled=t);let r=ld(_),i=ud(_);r&&i&&pd(r,{...i,derivedPanelConstraints:Ju(r)})},toggleSeparatorDisabled:(e,t)=>{let n=x.current.separators.find(t=>t.id===e);n&&(n.disabled=t)}}),[C,_,b,u,w]),E=(0,H.useRef)(null);return bf(()=>{let e=v.current;if(e===null)return;let t=x.current,n;if(w.defaultLayout!==void 0&&Object.keys(w.defaultLayout).length===t.panels.length){n={};for(let e of t.panels){let t=w.defaultLayout[e.id];t!==void 0&&(n[e.id]=t)}}let r={disabled:!!i,element:e,id:_,mutableState:{defaultLayout:n,disableCursor:!!w.disableCursor,expandedPanelSizes:x.current.lastExpandedPanelSizes,layouts:x.current.layouts},orientation:u,panels:t.panels,resizeTargetMinimumSize:t.resizeTargetMinimumSize,separators:t.separators};E.current=r;let a=_f(r),{defaultLayoutDeferred:o,derivedPanelConstraints:s,layout:c}=ud(r.id,!0);!o&&s.length>0&&(h(c),g(c));let l=fd(_,e=>{let{defaultLayoutDeferred:t,derivedPanelConstraints:n,layout:i}=e.next;if(t||n.length===0)return;let a=r.panels.map(({id:e})=>e).join(`,`);r.mutableState.layouts[a]=i,n.forEach(t=>{if(t.collapsible){let{layout:n}=e.prev??{};if(n){let e=Dd(t.collapsedSize,i[t.panelId]),a=Dd(t.collapsedSize,n[t.panelId]);e&&!a&&(r.mutableState.expandedPanelSizes[t.panelId]=n[t.panelId])}}});let o=Vd().state!==`active`;h(i),o&&g(i)});return()=>{E.current=null,a(),l()}},[i,_,g,h,u,y,w]),(0,H.useEffect)(()=>{let e=E.current;e&&(e.mutableState.defaultLayout=n,e.mutableState.disableCursor=!!r)}),(0,W.jsx)(wf.Provider,{value:T,children:(0,W.jsx)(`div`,{...p,className:t,"data-group":!0,"data-testid":_,id:_,ref:S,style:{height:`100%`,width:`100%`,overflow:`hidden`,...f,display:`flex`,flexDirection:u===`horizontal`?`row`:`column`,flexWrap:`nowrap`,touchAction:u===`horizontal`?`pan-y`:`pan-x`},children:e})})}Ef.displayName=`Group`;function Df(){let e=(0,H.useContext)(wf);return Yu(e,`Group Context not found; did you render a Panel or Separator outside of a Group?`),e}function Of(e,t){let{id:n}=Df(),r=(0,H.useRef)({collapse:qd,expand:qd,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:qd});(0,H.useImperativeHandle)(t,()=>r.current,[]),bf(()=>{Object.assign(r.current,Nd({groupId:n,panelId:e}))})}function kf({children:e,className:t,collapsedSize:n=`0%`,collapsible:r=!1,defaultSize:i,disabled:a,elementRef:o,groupResizeBehavior:s=`preserve-relative-size`,id:c,maxSize:l=`100%`,minSize:u=`0%`,onResize:d,panelRef:f,style:p,...m}){let h=!!c,g=yf(c),_=Cf({disabled:a}),v=(0,H.useRef)(null),y=Sf(v,o),{getPanelStyles:b,id:x,orientation:S,registerPanel:C,togglePanelDisabled:w}=Df(),T=d!==null,E=xf((e,t,n)=>{d?.(e,c,n)});bf(()=>{let e=v.current;if(e!==null)return C({element:e,id:g,idIsStable:h,mutableValues:{expandToSize:void 0,prevSize:void 0},onResize:T?E:void 0,panelConstraints:{groupResizeBehavior:s,collapsedSize:n,collapsible:r,defaultSize:i,disabled:_.disabled,maxSize:l,minSize:u}})},[s,n,r,i,T,g,h,l,u,E,C,_]),(0,H.useEffect)(()=>{w(g,!!a)},[a,g,w]),Of(g,f);let D=(0,H.useSyncExternalStore)(e=>fd(x,e),()=>JSON.stringify(b(x,g)),()=>JSON.stringify(b(x,g)));return(0,W.jsx)(`div`,{...m,"aria-disabled":a||void 0,"data-panel":!0,"data-testid":g,id:g,ref:y,style:{...Af,display:`flex`,flexBasis:0,flexShrink:1,overflow:`visible`,...JSON.parse(D)},children:(0,W.jsx)(`div`,{className:t,style:{maxHeight:`100%`,maxWidth:`100%`,flexGrow:1,overflow:`auto`,...p,touchAction:S===`horizontal`?`pan-y`:`pan-x`},children:e})})}kf.displayName=`Panel`;var Af={minHeight:0,maxHeight:`100%`,height:`auto`,minWidth:0,maxWidth:`100%`,width:`auto`,border:`none`,borderWidth:0,padding:0,margin:0};function jf({layout:e,panelConstraints:t,panelId:n,panelIndex:r}){let i,a,o=e[n],s=t.find(e=>e.panelId===n);if(s){let c=s.maxSize,l=s.collapsible?s.collapsedSize:s.minSize,u=[r,r+1];a=Md({layout:Ad({delta:l-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n],i=Md({layout:Ad({delta:c-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n]}return{valueControls:n,valueMax:i,valueMin:a,valueNow:o}}function Mf({children:e,className:t,disabled:n,elementRef:r,id:i,style:a,...o}){let s=yf(i),c=Cf({disabled:n}),[l,u]=(0,H.useState)({}),[d,f]=(0,H.useState)(`inactive`),p=(0,H.useRef)(null),m=Sf(p,r),{disableCursor:h,id:g,orientation:_,registerSeparator:v,toggleSeparatorDisabled:y}=Df(),b=_===`horizontal`?`vertical`:`horizontal`;bf(()=>{let e=p.current;if(e!==null){let t={disabled:c.disabled,element:e,id:s},n=v(t),r=Hd(e=>{f(e.next.state!==`inactive`&&e.next.hitRegions.some(e=>e.separator===t)?e.next.state:`inactive`)}),i=fd(g,e=>{let{derivedPanelConstraints:n,layout:r,separatorToPanels:i}=e.next,a=i.get(t);if(a){let e=a[0],t=a.indexOf(e);u(jf({layout:r,panelConstraints:n,panelId:e.id,panelIndex:t}))}});return()=>{r(),i(),n()}}},[g,s,v,c]),(0,H.useEffect)(()=>{y(s,!!n)},[n,s,y]);let x;return n&&!h&&(x=`not-allowed`),(0,W.jsx)(`div`,{...o,"aria-controls":l.valueControls,"aria-disabled":n||void 0,"aria-orientation":b,"aria-valuemax":l.valueMax,"aria-valuemin":l.valueMin,"aria-valuenow":l.valueNow,children:e,className:t,"data-separator":n?`disabled`:d,"data-testid":s,id:s,ref:m,role:`separator`,style:{flexBasis:`auto`,cursor:x,...a,flexGrow:0,flexShrink:0,touchAction:`none`},tabIndex:n?void 0:0})}Mf.displayName=`Separator`;function Nf(){return`panel-${R()}`}function Pf(e=[],t=null){return{id:Nf(),tabs:e,activeTabId:t,tabHistory:t?[t]:[]}}function Ff(e){return e?1:3}function If(e,t){return e.map(e=>e.filter(e=>e!==t)).filter(e=>e.length>0)}function Lf(e,t){for(let n=0;n<e.length;n++){let r=e[n].indexOf(t);if(r!==-1)return{row:n,col:r}}return null}function Rf(e,t){switch(e){case`editor`:return`editor:${t?.filePath??`untitled`}`;case`chat`:return`chat:${t?.providerId??`default`}/${t?.sessionId??R()}`;case`terminal`:return`terminal:${t?.terminalIndex??1}`;case`database`:return`database:${t?.connectionId??`default`}:${t?.tableName??``}`;case`sqlite`:return`sqlite:${t?.filePath??`default`}`;case`postgres`:return`postgres:${t?.connectionId??`default`}:${t?.tableName??``}`;case`git-graph`:return`git-graph`;case`git-diff`:return`git-diff:${t?.filePath??`unknown`}`;case`settings`:return`settings`;case`ports`:return`ports`;default:return`${e}:${R()}`}}function zf(e){let t={...e,panels:{...e.panels}};for(let[e,n]of Object.entries(t.panels)){let r=n.tabs.map(e=>{if(e.id.startsWith(`tab-`)){let t=Rf(e.type,e.metadata);return{...e,id:t}}return e}),i=new Map;n.tabs.forEach((e,t)=>{e.id!==r[t].id&&i.set(e.id,r[t].id)});let a=i.get(n.activeTabId??``)??n.activeTabId,o=n.tabHistory.map(e=>i.get(e)??e);t.panels[e]={...n,tabs:r,activeTabId:a,tabHistory:o}}return t}var Bf=`ppm-panels-`,Vf=`ppm-tabs-`;function Hf(e){return`${Bf}${e}`}function Uf(e,t){try{let n={...t,updatedAt:new Date().toISOString()};localStorage.setItem(Hf(e),JSON.stringify(n)),qf(e,t)}catch{}}function Wf(e){try{let t=localStorage.getItem(Hf(e));if(t)return zf(JSON.parse(t))}catch{}return Yf(e)}async function Gf(e){try{let t={},n=localStorage.getItem(`ppm-auth-token`);n&&(t.Authorization=`Bearer ${n}`);let r=await fetch(`/api/project/${encodeURIComponent(e)}/workspace`,{headers:t});if(!r.ok)return null;let i=await r.json();return!i.ok||!i.data?null:{...i.data.layout,updatedAt:i.data.updatedAt}}catch{return null}}var Kf=new Map;function qf(e,t){let n=Kf.get(e);n&&clearTimeout(n),Kf.set(e,setTimeout(async()=>{Kf.delete(e);try{let n={"Content-Type":`application/json`},r=localStorage.getItem(`ppm-auth-token`);r&&(n.Authorization=`Bearer ${r}`);let i=await fetch(`/api/project/${encodeURIComponent(e)}/workspace`,{method:`PUT`,headers:n,body:JSON.stringify({layout:t})});if(i.ok){let t=await i.json();if(t.data?.updatedAt){let n=`${Bf}${e}`,r=localStorage.getItem(n);if(r){let e=JSON.parse(r);e.updatedAt=t.data.updatedAt,localStorage.setItem(n,JSON.stringify(e))}}}}catch{}},1500))}function Jf(e,t){if(!e&&!t)return null;if(!e)return t;if(!t)return e;let n=new Date(e.updatedAt).getTime();return new Date(t.updatedAt).getTime()>=n?t:e}function Yf(e){try{let t=localStorage.getItem(`${Vf}${e}`);if(!t)return null;let n=JSON.parse(t);if(!n.tabs?.length)return null;let r=Pf(n.tabs,n.activeTabId),i={panels:{[r.id]:r},grid:[[r.id]],focusedPanelId:r.id};return Uf(e,i),localStorage.removeItem(`${Vf}${e}`),i}catch{return null}}var Xf=new Set([`git-graph`,`settings`]),Zf=new Set([`projects`,`git-status`]);function Qf(e,t){let n=e.filter(e=>e!==t);return n.push(t),n.length>50&&n.shift(),n}function $f(){let e=Pf();return{panels:{[e.id]:e},grid:[[e.id]],focusedPanelId:e.id}}var Q=c()((e,t)=>{function n(){let{currentProject:e,panels:n,grid:r,focusedPanelId:i}=t();if(!e)return;let a=new Set(r.flat()),o={};for(let[e,t]of Object.entries(n))a.has(e)&&(o[e]=t);Uf(e,{panels:o,grid:r,focusedPanelId:i})}function r(e){return Object.values(t().panels).find(t=>t.tabs.some(t=>t.id===e))}function i(e){return e??t().focusedPanelId}return{...$f(),currentProject:null,projectGrids:{},projectFocused:{},switchProject:n=>{let{currentProject:r,panels:i,grid:a,focusedPanelId:o,projectGrids:s,projectFocused:c}=t();if(r===n)return;let l={...s},u={...c};if(r){l[r]=a,u[r]=o;let e=new Set(a.flat()),t={};for(let[n,r]of Object.entries(i))e.has(n)&&(t[n]=r);Uf(r,{panels:t,grid:a,focusedPanelId:o})}if(l[n]){let t=l[n];e({currentProject:n,grid:t,focusedPanelId:u[n]??t[0]?.[0]??``,projectGrids:l,projectFocused:u});return}let d=Wf(n);if(d&&Object.keys(d.panels).length>0){let t={};for(let[e,n]of Object.entries(d.panels)){let r=n.tabs.filter(e=>!Zf.has(e.type)),i=n.tabHistory.filter(e=>r.some(t=>t.id===e)),a=n.activeTabId&&r.some(e=>e.id===n.activeTabId)?n.activeTabId:i[i.length-1]??r[0]?.id??null;t[e]={...n,tabs:r,tabHistory:i,activeTabId:a}}let r={...i,...t};l[n]=d.grid,u[n]=d.focusedPanelId,e({currentProject:n,panels:r,grid:d.grid,focusedPanelId:d.focusedPanelId,projectGrids:l,projectFocused:u})}else{let t=Pf(),r=[[t.id]],a={...i,[t.id]:t};l[n]=r,u[n]=t.id,Uf(n,{panels:{[t.id]:t},grid:r,focusedPanelId:t.id}),e({currentProject:n,panels:a,grid:r,focusedPanelId:t.id,projectGrids:l,projectFocused:u})}},reloadProject:n=>{let{projectGrids:r,projectFocused:i,panels:a}=t(),o={...r},s={...i};delete o[n],delete s[n];let c=r[n],l=c?new Set(c.flat()):new Set,u={...a};for(let e of l)delete u[e];e({projectGrids:o,projectFocused:s,panels:u,currentProject:null}),t().switchProject(n)},setFocusedPanel:n=>{t().panels[n]&&e({focusedPanelId:n})},openTab:(r,a)=>{let o=t().isMobile(),s=o?t().grid[0]?.[0]??i(a):i(a);if(!t().panels[s])return``;if(r.type===`terminal`&&!r.metadata?.terminalIndex){let e=Object.values(t().panels).flatMap(e=>e.tabs).filter(e=>e.type===`terminal`).map(e=>{let t=e.id.match(/^terminal:(\d+)/);return t?parseInt(t[1],10):0}),n=e.length>0?Math.max(...e)+1:1;r={...r,metadata:{...r.metadata,terminalIndex:n}}}let c=Rf(r.type,r.metadata);if(Xf.has(r.type))for(let r of Object.values(t().panels)){let t=r.tabs.find(e=>e.id===c);if(t)return e(e=>({focusedPanelId:r.id,panels:{...e.panels,[r.id]:{...r,activeTabId:t.id,tabHistory:Qf(r.tabHistory,t.id)}}})),n(),t.id}if(o)for(let r of t().grid.flat()){let i=t().panels[r];if(!i)continue;let a=i.tabs.find(e=>e.id===c||e.id.startsWith(`${c}@`));if(a)return e(e=>({focusedPanelId:i.id,panels:{...e.panels,[i.id]:{...i,activeTabId:a.id,tabHistory:Qf(i.tabHistory,a.id)}}})),n(),a.id}let l=t().panels[s],u=l.tabs.find(e=>e.id===c);if(u)return e(e=>({panels:{...e.panels,[s]:{...l,activeTabId:u.id,tabHistory:Qf(l.tabHistory,u.id)}}})),n(),u.id;let d=Object.values(t().panels).some(e=>e.id!==s&&e.tabs.some(e=>e.id===c))?`${c}@${s}`:c,f={...r,id:d};return e(e=>{let t=e.panels[s];return{focusedPanelId:s,panels:{...e.panels,[s]:{...t,tabs:[...t.tabs,f],activeTabId:d,tabHistory:Qf(t.tabHistory,d)}}}}),n(),d},closeTab:(i,a)=>{let o=a?t().panels[a]:r(i);if(!o)return;let s=o.id;e(e=>{let t=e.panels[s],n=t.tabs.filter(e=>e.id!==i),r=t.tabHistory.filter(e=>e!==i),a=t.activeTabId;if(t.activeTabId===i){let e=r.length>0?r[r.length-1]:null;a=e&&n.some(t=>t.id===e)?e:n[n.length-1]?.id??null}let o=e.grid.flat().length;if(n.length===0&&o>1){let{[s]:t,...n}=e.panels;return{panels:n,grid:If(e.grid,s),focusedPanelId:e.focusedPanelId===s?Object.keys(n)[0]:e.focusedPanelId}}return{panels:{...e.panels,[s]:{...t,tabs:n,activeTabId:a,tabHistory:r}}}}),n()},setActiveTab:(i,a)=>{let o=a?t().panels[a]:r(i);if(!o)return;let s=o.id;e(e=>{let t=e.panels[s];return{focusedPanelId:s,panels:{...e.panels,[s]:{...t,activeTabId:i,tabHistory:Qf(t.tabHistory,i)}}}}),n()},updateTab:(t,i)=>{let a=r(t);a&&(e(e=>({panels:{...e.panels,[a.id]:{...a,tabs:a.tabs.map(e=>e.id===t?{...e,...i}:e)}}})),n())},reorderTab:(r,i,a)=>{let o=t().panels[i];if(!o)return;let s=o.tabs.findIndex(e=>e.id===r);if(s===-1||s===a)return;let c=[...o.tabs],[l]=c.splice(s,1);c.splice(a,0,l),e(e=>({panels:{...e.panels,[i]:{...o,tabs:c}}})),n()},moveTab:(r,i,a,o)=>{if(i===a)return;let s=t().panels[i],c=t().panels[a];if(!s||!c)return;let l=s.tabs.find(e=>e.id===r);if(!l)return;let u=s.tabs.filter(e=>e.id!==r),d=s.tabHistory.filter(e=>e!==r),f=s.activeTabId===r?d[d.length-1]??u[u.length-1]?.id??null:s.activeTabId,p=[...c.tabs];o===void 0?p.push(l):p.splice(o,0,l),e(e=>{let t=e.grid.flat().length;if(u.length===0&&t>1){let{[i]:t,...n}=e.panels;return{panels:{...n,[a]:{...c,tabs:p,activeTabId:r,tabHistory:Qf(c.tabHistory,r)}},grid:If(e.grid,i),focusedPanelId:a}}return{focusedPanelId:a,panels:{...e.panels,[i]:{...s,tabs:u,activeTabId:f,tabHistory:d},[a]:{...c,tabs:p,activeTabId:r,tabHistory:Qf(c.tabHistory,r)}}}}),n()},splitPanel:(r,i,a,o)=>{let{grid:s,panels:c}=t(),l=t().isMobile(),u=c[a];if(!u)return!1;let d=u.tabs.find(e=>e.id===i);if(!d)return!1;let f=Lf(s,o??a);if(!f)return!1;let p=r===`left`||r===`right`,m=r===`up`||r===`down`;if(p&&(s[f.row]?.length??0)>=Ff(l)||m&&s.length>=3)return!1;let h=Pf([d],d.id);h.tabHistory=[d.id];let g=u.tabs.filter(e=>e.id!==i),_=u.tabHistory.filter(e=>e!==i),v=u.activeTabId===i?_[_.length-1]??g[g.length-1]?.id??null:u.activeTabId,y;if(p)y=s.map((e,t)=>{if(t!==f.row)return e;let n=[...e],i=r===`right`?f.col+1:f.col;return n.splice(i,0,h.id),n});else{y=[...s];let e=r===`down`?f.row+1:f.row;y.splice(e,0,[h.id])}return e(e=>{let t=e.grid.flat().length,n={...e.panels,[h.id]:h};if(g.length===0&&t>1){let{[a]:e,...t}=n;n=t,y=If(y,a)}else n[a]={...u,tabs:g,activeTabId:v,tabHistory:_};return{panels:n,grid:y,focusedPanelId:h.id}}),n(),!0},closePanel:r=>{let{panels:i,grid:a}=t();if(a.flat().length<=1)return;let o=i[r];if(!o)return;Lf(a,r);let s=a.flat(),c=s.indexOf(r),l=c>0?s[c-1]:s[1],u=i[l];u&&(e(e=>{let{[r]:t,...n}=e.panels,i=[...u.tabs,...o.tabs],a=u.activeTabId??o.activeTabId;return{panels:{...n,[l]:{...u,tabs:i,activeTabId:a,tabHistory:[...u.tabHistory,...o.tabHistory]}},grid:If(e.grid,r),focusedPanelId:l}}),n())},getPanelForTab:e=>r(e),isMobile:()=>typeof window<`u`&&window.innerWidth<768}});function ep(e){let[t,n]=(0,H.useState)(()=>typeof window<`u`?window.matchMedia(e).matches:!1);return(0,H.useEffect)(()=>{let t=window.matchMedia(e),r=e=>n(e.matches);return t.addEventListener(`change`,r),n(t.matches),()=>t.removeEventListener(`change`,r)},[e]),t}var tp=`ppm-custom-order`;function np(){try{let e=localStorage.getItem(tp);return e?JSON.parse(e):null}catch{return null}}function rp(e){try{localStorage.setItem(tp,JSON.stringify(e))}catch{}}function ip(e,t){if(!t)return[...e];let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.name)??1/0)-(n.get(t.name)??1/0))}var ap=c((e,t)=>({projects:[],activeProject:null,customOrder:np(),loading:!1,error:null,fetchProjects:async()=>{e({loading:!0,error:null});try{e({projects:await B.get(`/api/projects`),loading:!1})}catch(t){e({error:t instanceof Error?t.message:`Failed to fetch projects`,loading:!1})}},setActiveProject:t=>{e({activeProject:t})},addProject:async(n,r)=>{let i=await B.post(`/api/projects`,{path:n,name:r});await t().fetchProjects();let a=t().projects.find(e=>e.name===(r??i.name)||e.path===n);return a&&e({activeProject:a}),i},setProjectColor:async(e,n)=>{await B.patch(`/api/projects/${encodeURIComponent(e)}/color`,{color:n}),await t().fetchProjects()},moveProject:async(n,r)=>{let{projects:i,customOrder:a}=t(),o=ip(i,a),s=o.findIndex(e=>e.name===n);if(s===-1)return;let c=r===`up`?s-1:s+1;if(c<0||c>=o.length)return;let l=o.map(e=>e.name);[l[s],l[c]]=[l[c],l[s]],rp(l),await B.patch(`/api/projects/reorder`,{order:l}),e({customOrder:l})},reorderProjects:async t=>{rp(t),e({customOrder:t}),await B.patch(`/api/projects/reorder`,{order:t}).catch(()=>{})},renameProject:async(e,n)=>{await B.patch(`/api/projects/${encodeURIComponent(e)}`,{name:n}),await t().fetchProjects()},deleteProject:async t=>{await B.del(`/api/projects/${encodeURIComponent(t)}`),e(e=>{let n=e.projects.filter(e=>e.name!==t),r=e.customOrder?e.customOrder.filter(e=>e!==t):null;return r&&rp(r),{projects:n,customOrder:r,activeProject:e.activeProject?.name===t?n[0]??null:e.activeProject}})}})),op=c()(()=>({tabs:[],activeTabId:null,tabHistory:[],currentProject:null,switchProject:e=>{Q.getState().switchProject(e),sp()},openTab:e=>{let t=Q.getState().openTab(e);return sp(),t},closeTab:e=>{Q.getState().closeTab(e),sp()},setActiveTab:e=>{Q.getState().setActiveTab(e),sp()},updateTab:(e,t)=>{Q.getState().updateTab(e,t),sp()}}));function sp(){let e=Q.getState(),t=e.panels[e.focusedPanelId];op.setState({tabs:t?.tabs??[],activeTabId:t?.activeTabId??null,tabHistory:t?.tabHistory??[],currentProject:e.currentProject})}Q.subscribe(()=>sp());var cp=`application/ppm-tab`,lp=!1,up=new Set;function dp(e){lp!==e&&(lp=e,up.forEach(e=>e()))}function fp(){return(0,H.useSyncExternalStore)(e=>(up.add(e),()=>up.delete(e)),()=>lp)}function pp(){dp(!1)}function mp(e){let[t,n]=(0,H.useState)(null),r=(0,H.useRef)(null);return{dropIndex:t,handleDragStart:(0,H.useCallback)((t,n)=>{let r={tabId:n,panelId:e};t.dataTransfer.setData(cp,JSON.stringify(r)),t.dataTransfer.effectAllowed=`move`,requestAnimationFrame(()=>dp(!0))},[e]),handleDragOver:(0,H.useCallback)((e,t,i)=>{if(!e.dataTransfer.types.includes(`application/ppm-tab`)||(e.preventDefault(),e.dataTransfer.dropEffect=`move`,r.current===t))return;r.current=t;let a=e.currentTarget.getBoundingClientRect(),o=a.left+a.width/2;n(e.clientX<o?i:i+1)},[]),handleDragOverBar:(0,H.useCallback)(e=>{e.dataTransfer.types.includes(`application/ppm-tab`)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},[]),handleDrop:(0,H.useCallback)(i=>{i.preventDefault(),dp(!1);let a=i.dataTransfer.getData(cp);if(a){try{let n=JSON.parse(a),r=Q.getState();n.panelId===e?t!==null&&r.reorderTab(n.tabId,e,t):r.moveTab(n.tabId,n.panelId,e,t??void 0)}catch{}n(null),r.current=null}},[e,t]),handleDragEnd:(0,H.useCallback)(()=>{dp(!1),n(null),r.current=null},[])}}var hp=null,gp=null,_p=0,vp=new Set;function yp(){vp.forEach(e=>e())}function bp(){return(0,H.useSyncExternalStore)(e=>(vp.add(e),()=>vp.delete(e)),()=>gp)}function xp(){return Date.now()-_p<300}var Sp=null;function Cp(e,t,n){let r=document.createElement(`div`);r.id=`touch-drag-ghost`,Object.assign(r.style,{position:`fixed`,zIndex:`9999`,pointerEvents:`none`,padding:`6px 14px`,borderRadius:`8px`,background:`rgba(30,30,30,0.92)`,color:`#fff`,fontSize:`12px`,whiteSpace:`nowrap`,opacity:`0.95`,boxShadow:`0 4px 16px rgba(0,0,0,0.35)`,transform:`translate(-50%, -130%)`,left:`${t}px`,top:`${n}px`}),r.textContent=e,document.body.appendChild(r),Sp=r}function wp(e,t){Sp&&(Sp.style.left=`${e}px`,Sp.style.top=`${t}px`)}function Tp(){Sp?.remove(),Sp=null}function Ep(e,t){Sp&&(Sp.style.display=`none`);let n=document.elementFromPoint(e,t);Sp&&(Sp.style.display=``);let r=n?.closest(`[data-panel-drop-zone]`);if(!r)return null;let i=r.dataset.panelDropZone,a=r.getBoundingClientRect(),o=(e-a.left)/a.width,s=(t-a.top)/a.height,c=.25,{grid:l}=Q.getState(),u=window.innerWidth<768,d=Lf(l,i),f=d?!u&&(l[d.row]?.length??0)<Ff(!1):!1,p=!u&&l.length<3,m=`center`;return o<c&&f?m=`left`:o>1-c&&f?m=`right`:s<c&&p?m=`top`:s>1-c&&p&&(m=`bottom`),{panelId:i,zone:m}}function Dp(e){if(!hp)return;e.preventDefault();let t=e.touches[0];if(!t)return;wp(t.clientX,t.clientY);let n=Ep(t.clientX,t.clientY);(n?.panelId!==gp?.panelId||n?.zone!==gp?.zone)&&(gp=n,yp())}function Op(){hp=null,gp=null,yp(),Tp(),pp(),document.removeEventListener(`touchmove`,Dp),document.removeEventListener(`touchend`,kp),document.removeEventListener(`touchcancel`,Ap)}function kp(){let e=hp,t=gp;if(Op(),_p=Date.now(),!e||!t)return;let n=Q.getState();if(t.zone===`center`)e.panelId!==t.panelId&&n.moveTab(e.tabId,e.panelId,t.panelId);else{let r=t.zone===`top`?`up`:t.zone===`bottom`?`down`:t.zone;n.splitPanel(r,e.tabId,e.panelId,t.panelId)}}function Ap(){Op(),_p=Date.now()}function jp(e,t,n,r){hp=e,dp(!0),Cp(t,n,r),document.addEventListener(`touchmove`,Dp,{passive:!1}),document.addEventListener(`touchend`,kp),document.addEventListener(`touchcancel`,Ap)}var Mp=200,Np=10;function Pp(e){let t=(0,H.useRef)(null),n=(0,H.useRef)(null),r=(0,H.useRef)(!1);return{handleTouchStart:(0,H.useCallback)((i,a,o)=>{let s=i.touches[0];s&&(n.current={x:s.clientX,y:s.clientY},r.current=!1,t.current=setTimeout(()=>{r.current=!0,jp({tabId:a,panelId:e},o,n.current.x,n.current.y)},Mp))},[e]),handleTouchMove:(0,H.useCallback)(e=>{if(r.current||!n.current||!t.current)return;let i=e.touches[0];i&&(Math.abs(i.clientX-n.current.x)>Np||Math.abs(i.clientY-n.current.y)>Np)&&(clearTimeout(t.current),t.current=null)},[]),handleTouchEnd:(0,H.useCallback)(()=>{t.current&&=(clearTimeout(t.current),null)},[])}}var Fp=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent),Ip=[{id:`command-palette`,label:`Command Palette`,category:`general`,defaultKey:`F1`,note:`Shift+Shift also opens (not customizable)`},{id:`toggle-sidebar`,label:`Toggle Sidebar`,category:`general`,defaultKey:`Mod+B`},{id:`save-prevent`,label:`Prevent Save Dialog`,category:`general`,defaultKey:`Mod+S`,locked:!0,note:`Always active — prevents browser save`},{id:`next-tab`,label:`Next Tab`,category:`tabs`,defaultKey:`Alt+]`},{id:`prev-tab`,label:`Previous Tab`,category:`tabs`,defaultKey:`Alt+[`},{id:`open-chat`,label:`Open Chat`,category:`tabs`,defaultKey:`Mod+L`},{id:`open-terminal`,label:`Open Terminal`,category:`tabs`,defaultKey:`Mod+'`},{id:`open-settings`,label:`Open Settings`,category:`tabs`,defaultKey:`Mod+,`},{id:`open-git-graph`,label:`Git Graph`,category:`tabs`,defaultKey:`Mod+G`},{id:`open-git-status`,label:`Git Status (sidebar)`,category:`tabs`,defaultKey:`Mod+Shift+E`},{id:`open-search`,label:`Search Files (sidebar)`,category:`tabs`,defaultKey:`Mod+Shift+F`},{id:`voice-input`,label:`Voice Input`,category:`general`,defaultKey:`Mod+Shift+V`,note:`Toggle speech-to-text in chat`},...Array.from({length:9},(e,t)=>({id:`switch-project-${t+1}`,label:`Switch to Project ${t+1}`,category:`projects`,defaultKey:`Mod+${t+1}`}))],Lp=new Map(Ip.map(e=>[e.id,e.defaultKey]));function Rp(e){let t=e.split(`+`),n={ctrl:!1,meta:!1,alt:!1,shift:!1,key:``};for(let e of t){let t=e.trim();switch(t){case`Mod`:Fp?n.meta=!0:n.ctrl=!0;break;case`Ctrl`:n.ctrl=!0;break;case`Meta`:case`Cmd`:n.meta=!0;break;case`Alt`:n.alt=!0;break;case`Shift`:n.shift=!0;break;default:n.key=t.toLowerCase();break}}return n}function zp(e,t){return e.ctrlKey!==t.ctrl||e.metaKey!==t.meta||e.altKey!==t.alt||e.shiftKey!==t.shift?!1:e.key.toLowerCase()===t.key}function Bp(e){return e.replace(/Mod/g,Fp?`⌘`:`Ctrl`).replace(/Shift/g,Fp?`⇧`:`Shift`).replace(/Alt/g,Fp?`⌥`:`Alt`).replace(/Meta|Cmd/g,`⌘`).replace(/Ctrl/g,Fp?`⌃`:`Ctrl`)}function Vp(e){if([`Control`,`Meta`,`Alt`,`Shift`].includes(e.key))return null;let t=[];e.ctrlKey&&!e.metaKey&&t.push(Fp?`Ctrl`:`Mod`),e.metaKey&&t.push(Fp?`Mod`:`Meta`),e.altKey&&t.push(`Alt`),e.shiftKey&&t.push(`Shift`);let n=e.key;return n===` `?n=`Space`:n.length===1&&(n=n.toUpperCase()),t.push(n),t.join(`+`)}var Hp=c((e,t)=>({overrides:{},loaded:!1,getBinding:e=>t().overrides[e]??Lp.get(e)??``,matchesEvent:(e,n)=>{let r=t().getBinding(n);return r?zp(e,Rp(r)):!1},setBinding:(n,r)=>{e({overrides:{...t().overrides,[n]:r}}),B.put(`/api/settings/keybindings`,{[n]:r}).catch(()=>{})},resetBinding:n=>{let r={...t().overrides};delete r[n],e({overrides:r}),B.put(`/api/settings/keybindings`,{[n]:null}).catch(()=>{})},resetAll:()=>{e({overrides:{}});let n={};for(let e of Object.keys(t().overrides))n[e]=null;Object.keys(n).length>0&&B.put(`/api/settings/keybindings`,n).catch(()=>{})},loadFromServer:async()=>{try{e({overrides:await B.get(`/api/settings/keybindings`),loaded:!0})}catch{e({loaded:!0})}}}));function Up(e){window.dispatchEvent(new CustomEvent(`open-command-palette`,{detail:e}))}function Wp(){let[e,t]=(0,H.useState)(!1),[n,r]=(0,H.useState)(``);return(0,H.useEffect)(()=>{let e=0,n=!1,{matchesEvent:i}=Hp.getState(),a=!1;function o(){a=!0}function s(){a=!1}function c(i){if(i.type===`keydown`&&i.key===`Shift`){n=!0;return}if(i.type===`keydown`&&i.shiftKey&&(n=!1),i.type===`keydown`&&i.key!==`Shift`&&(e=0),i.type===`keyup`&&i.key===`Shift`&&n&&!i.ctrlKey&&!i.metaKey&&!i.altKey&&!a&&!i.isComposing){let n=Date.now();if(n-e<400){e=0,r(``),t(!0);return}e=n;return}if(i.type!==`keydown`||a||i.isComposing)return;let{matchesEvent:o}=Hp.getState();if(o(i,`save-prevent`)){i.preventDefault();return}if(o(i,`command-palette`)){i.preventDefault(),r(``),t(!0);return}if(o(i,`toggle-sidebar`)){i.preventDefault(),U.getState().toggleSidebar();return}if(o(i,`next-tab`)||o(i,`prev-tab`)){i.preventDefault();let{tabs:e,activeTabId:t,setActiveTab:n}=op.getState();if(e.length<2)return;let r=e.findIndex(e=>e.id===t);n(e[o(i,`next-tab`)?(r+1)%e.length:(r-1+e.length)%e.length].id);return}for(let e of[{action:`open-chat`,type:`chat`,title:`AI Chat`},{action:`open-terminal`,type:`terminal`,title:`Terminal`},{action:`open-git-graph`,type:`git-graph`,title:`Git Graph`}])if(o(i,e.action)){i.preventDefault();let t=ap.getState().activeProject;op.getState().openTab({type:e.type,title:e.title,projectId:t?.name??null,metadata:t?{projectName:t.name}:void 0,closable:!0});return}if(o(i,`open-settings`)){i.preventDefault();let e=U.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`settings`);return}if(o(i,`open-git-status`)){i.preventDefault();let e=U.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`git`);return}if(o(i,`voice-input`)){i.preventDefault(),window.dispatchEvent(new CustomEvent(`toggle-voice-input`));return}if(o(i,`open-search`)){i.preventDefault();let e=U.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`search`);return}for(let e=1;e<=9;e++)if(o(i,`switch-project-${e}`)){i.preventDefault();let t=ap.getState().projects[e-1];t&&(ap.getState().setActiveProject(t),op.getState().switchProject(t.name));return}}function l(e){let n=e.detail;r(typeof n==`string`?n:``),t(!0)}return window.addEventListener(`keydown`,c),window.addEventListener(`keyup`,c),window.addEventListener(`compositionstart`,o),window.addEventListener(`compositionend`,s),window.addEventListener(`open-command-palette`,l),()=>{window.removeEventListener(`keydown`,c),window.removeEventListener(`keyup`,c),window.removeEventListener(`compositionstart`,o),window.removeEventListener(`compositionend`,s),window.removeEventListener(`open-command-palette`,l)}},[]),{paletteOpen:e,paletteInitialQuery:n,closePalette:(0,H.useCallback)(()=>{t(!1),r(``)},[])}}var Gp={approval_request:`bg-red-500`,question:`bg-amber-500`,done:`bg-blue-500`},Kp={done:0,question:1,approval_request:2};function qp(e){return e&&Gp[e]||`bg-red-500`}var Jp=c()(e=>({notifications:new Map,addNotification:(t,n,r)=>{e(e=>{let i=new Map(e.notifications),a=i.get(t);return i.set(t,{count:(a?.count??0)+1,type:n,projectName:r}),{notifications:i}})},clearForSession:t=>{e(e=>{if(!e.notifications.has(t))return e;let n=new Map(e.notifications);return n.delete(t),{notifications:n}})},clearAll:()=>e({notifications:new Map})}));function Yp(e){let t=0;for(let[,n]of e.notifications)t+=n.count;return t}function Xp(e){return t=>{let n=null,r=-1;for(let[,i]of t.notifications){if(i.projectName!==e)continue;let t=Kp[i.type]??0;t>r&&(r=t,n=i.type)}return n}}function Zp(e){let[t,n]=(0,H.useState)(!1),[r,i]=(0,H.useState)(!1),a=(0,H.useCallback)(()=>{let t=e.current;t&&(n(t.scrollLeft>1),i(t.scrollLeft+t.clientWidth<t.scrollWidth-1))},[e]);return(0,H.useEffect)(()=>{let t=e.current;if(!t)return;a(),t.addEventListener(`scroll`,a,{passive:!0});let n=new ResizeObserver(a);n.observe(t);let r=new MutationObserver(a);return r.observe(t,{childList:!0,subtree:!0}),()=>{t.removeEventListener(`scroll`,a),n.disconnect(),r.disconnect()}},[e,a]),{canScrollLeft:t,canScrollRight:r,scrollLeft:(0,H.useCallback)(()=>{e.current?.scrollBy({left:-150,behavior:`smooth`})},[e]),scrollRight:(0,H.useCallback)(()=>{e.current?.scrollBy({left:150,behavior:`smooth`})},[e])}}var Qp={done:0,question:1,approval_request:2};function $p(e,t,n,r){if(!e)return{left:null,right:null};let i=e.scrollLeft,a=i+e.clientWidth,o=null,s=-1,c=null,l=-1,u=e.getBoundingClientRect();for(let d of n){if(d.type!==`chat`)continue;let n=d.metadata?.sessionId,f=n?r.get(n):void 0;if(!f||f.count===0)continue;let p=t.get(d.id);if(!p)continue;let m=p.getBoundingClientRect(),h=m.left-u.left+e.scrollLeft,g=h+m.width,_=Qp[f.type]??0;g<=i&&_>s&&(s=_,o=f.type),h>=a&&_>l&&(l=_,c=f.type)}return{left:o,right:c}}function em(e){let t=/^#([0-9a-fA-F]{6})$/.exec(e.trim());if(!t)return null;let n=parseInt(t[1],16);return{r:n>>16&255,g:n>>8&255,b:n&255}}function tm(e,t,n){let[r,i,a]=[e,t,n].map(e=>{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4});return .2126*r+.7152*i+.0722*a}function nm(e){let t=em(e);return t?tm(t.r,t.g,t.b)<.4:!1}function rm({tab:e,isActive:t,icon:n,showDropBefore:r,notificationType:i,onSelect:a,onClose:s,onDragStart:c,onDragOver:l,onDragEnd:u,onTouchStart:d,onTouchMove:f,onTouchEnd:p,tabRef:m,onRename:h}){let[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(e.title),b=(0,H.useRef)(null);(0,H.useEffect)(()=>{g&&(y(e.title),setTimeout(()=>b.current?.select(),0))},[g]);let x=()=>{_(!1);let t=v.trim();t&&t!==e.title&&h&&h(t)},S=e.metadata?.connectionColor,C=S?{backgroundColor:t?S:`${S}33`,color:t&&nm(S)?`#fff`:void 0}:void 0;return(0,W.jsxs)(`div`,{className:`relative flex items-center`,children:[r&&(0,W.jsx)(`div`,{className:`absolute left-0 top-1 bottom-1 w-0.5 bg-primary rounded-full z-10`}),(0,W.jsxs)(`button`,{ref:m,"data-tab-item":!0,draggable:!g,onClick:a,onAuxClick:t=>{t.button===1&&e.closable&&(t.preventDefault(),s())},onDragStart:c,onDragOver:l,onDragEnd:u,onTouchStart:d,onTouchMove:f,onTouchEnd:p,style:C,className:L(`group flex items-center gap-1 px-3 h-10 whitespace-nowrap text-xs transition-colors`,`border-b-2 -mb-px cursor-grab active:cursor-grabbing`,!C&&(t?`border-primary text-primary`:`border-transparent text-text-secondary hover:text-foreground`),C&&`border-transparent`),children:[(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(n,{className:`size-4`}),i&&!t&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -right-1 size-2 rounded-full`,qp(i))})]}),g?(0,W.jsx)(`input`,{ref:b,value:v,onChange:e=>y(e.target.value),onBlur:x,onKeyDown:e=>{e.key===`Enter`&&x(),e.key===`Escape`&&_(!1),e.stopPropagation()},onClick:e=>e.stopPropagation(),className:`max-w-[120px] bg-surface-elevated text-xs px-1 py-0.5 rounded border border-border outline-none focus:border-primary`,autoFocus:!0}):(0,W.jsx)(`span`,{className:`max-w-[120px] truncate`,onDoubleClick:e=>{h&&(e.stopPropagation(),_(!0))},children:e.title}),e.closable&&!g&&(0,W.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),s()},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),s())},className:`ml-1 can-hover:opacity-0 can-hover:group-hover:opacity-100 rounded-sm hover:bg-surface-elevated p-0.5 transition-opacity`,children:(0,W.jsx)(o,{className:`size-3`})})]})]})}var im={terminal:Yt,chat:vt,editor:Ge,database:Re,sqlite:Re,postgres:Re,"git-graph":tt,"git-diff":Ke,settings:Gt,ports:rt,"extension-webview":It};function am({panelId:e}){ap(e=>e.activeProject);let t=(0,H.useRef)(new Map),n=(0,H.useRef)(null),r=(0,H.useRef)(0),i=Q(t=>e?t.panels[e]:t.panels[t.focusedPanelId]),a=i?.tabs??[],o=i?.activeTabId??null,c=i?.id??Q.getState().focusedPanelId,{dropIndex:l,handleDragStart:u,handleDragOver:d,handleDragOverBar:f,handleDrop:p,handleDragEnd:m}=mp(c),{handleTouchStart:h,handleTouchMove:g,handleTouchEnd:_}=Pp(c),v=Jp(e=>e.notifications),{canScrollLeft:y,canScrollRight:b,scrollLeft:x,scrollRight:S}=Zp(n),C=$p(n.current,t.current,a,v);(0,H.useEffect)(()=>{if(a.length>r.current&&o){let e=t.current.get(o);e&&e.scrollIntoView({behavior:`smooth`,block:`nearest`,inline:`nearest`})}r.current=a.length},[a.length,o]);let w=(0,H.useCallback)((e,t)=>{op.getState().updateTab(e.id,{title:t});let n=e.metadata?.projectName,r=e.metadata?.sessionId;n&&r&&B.patch(`${z(n)}/chat/sessions/${r}`,{title:t}).catch(()=>{})},[]);function T(e){e.target.closest(`[data-tab-item]`)||Up()}function E(e){e.target.closest(`[data-tab-item]`)||(e.preventDefault(),Up())}return(0,W.jsxs)(`div`,{className:`hidden md:flex items-center h-10 border-b border-border bg-background relative`,onDragOver:f,onDrop:p,onDoubleClick:T,onContextMenu:E,children:[y&&(0,W.jsx)(`button`,{onClick:x,className:`absolute left-0 z-10 flex items-center justify-center size-8 bg-gradient-to-r from-background via-background to-transparent`,children:(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(De,{className:`size-4 text-text-secondary`}),C.left&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -right-0.5 size-2 rounded-full`,qp(C.left))})]})}),(0,W.jsx)(`div`,{ref:n,className:`flex-1 overflow-x-auto overflow-y-hidden min-w-0 scrollbar-none`,children:(0,W.jsxs)(`div`,{className:`flex items-center h-10`,children:[a.map((e,n)=>{let r=e.type===`chat`?e.metadata?.sessionId:void 0,i=r?v.get(r):void 0,a=i&&i.count>0?i.type:null;return(0,W.jsx)(rm,{tab:e,isActive:e.id===o,icon:im[e.type],showDropBefore:l===n,notificationType:a,onSelect:()=>{xp()||(Q.getState().setActiveTab(e.id,c),r&&Jp.getState().clearForSession(r))},onClose:()=>Q.getState().closeTab(e.id,c),onDragStart:t=>u(t,e.id),onDragOver:t=>d(t,e.id,n),onDragEnd:m,onTouchStart:t=>h(t,e.id,e.title),onTouchMove:g,onTouchEnd:_,tabRef:n=>{n?t.current.set(e.id,n):t.current.delete(e.id)},onRename:e.type===`chat`?t=>w(e,t):void 0},e.id)}),l!==null&&l>=a.length&&(0,W.jsx)(`div`,{className:`w-0.5 h-6 bg-primary rounded-full`}),(0,W.jsx)(`button`,{onClick:()=>Up(),title:`Open command palette (Shift+Shift)`,className:`flex items-center justify-center size-10 shrink-0 sticky right-0 border-b-2 border-transparent text-text-secondary hover:text-foreground transition-colors bg-background`,children:(0,W.jsx)(Nt,{className:`size-4`})})]})}),b&&(0,W.jsx)(`button`,{onClick:S,className:`absolute right-10 z-10 flex items-center justify-center size-8 bg-gradient-to-l from-background via-background to-transparent`,children:(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(s,{className:`size-4 text-text-secondary`}),C.right&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -left-0.5 size-2 rounded-full`,qp(C.right))})]})})]})}function om({panelId:e}){let[t,n]=(0,H.useState)(null),r=fp(),i=bp(),a=(i?.panelId===e?i.zone:null)??t,o=Q(e=>e.grid),s=Q(e=>e.isMobile()),c=Lf(o,e),l=!s&&o.length<3,u=c?!s&&(o[c.row]?.length??0)<Ff(!1):!1,d=(0,H.useCallback)(e=>{let t=e.currentTarget.getBoundingClientRect(),n=(e.clientX-t.left)/t.width,r=(e.clientY-t.top)/t.height,i=.25;return n<i&&u?`left`:n>1-i&&u?`right`:r<i&&l?`top`:r>1-i&&l?`bottom`:`center`},[u,l]),f=(0,H.useCallback)(e=>{e.dataTransfer.types.includes(`application/ppm-tab`)&&(e.preventDefault(),e.stopPropagation(),n(d(e)))},[d]),p=(0,H.useCallback)(e=>{e.currentTarget.contains(e.relatedTarget)||n(null)},[]),m=(0,H.useCallback)(t=>{t.preventDefault(),t.stopPropagation();let r=d(t);if(n(null),pp(),!r)return;let i=t.dataTransfer.getData(cp);if(i)try{let t=JSON.parse(i),n=Q.getState();if(r===`center`)t.panelId!==e&&n.moveTab(t.tabId,t.panelId,e);else{let i=r===`top`?`up`:r===`bottom`?`down`:r;n.splitPanel(i,t.tabId,t.panelId,e)}}catch{}},[d,e]);return r?(0,W.jsxs)(`div`,{className:`absolute inset-0 z-20`,onDragOver:f,onDragLeave:p,onDrop:m,children:[a===`left`&&(0,W.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-1/3 bg-primary/10 border-2 border-primary/30 rounded-l-md`}),a===`right`&&(0,W.jsx)(`div`,{className:`absolute inset-y-0 right-0 w-1/3 bg-primary/10 border-2 border-primary/30 rounded-r-md`}),a===`top`&&(0,W.jsx)(`div`,{className:`absolute inset-x-0 top-0 h-1/3 bg-primary/10 border-2 border-primary/30 rounded-t-md`}),a===`bottom`&&(0,W.jsx)(`div`,{className:`absolute inset-x-0 bottom-0 h-1/3 bg-primary/10 border-2 border-primary/30 rounded-b-md`}),a===`center`&&(0,W.jsx)(`div`,{className:`absolute inset-0 bg-primary/5 border-2 border-dashed border-primary/30 rounded-md`})]}):null}var sm=[{type:`terminal`,label:`Terminal`,icon:Yt},{type:`chat`,label:`AI Chat`,icon:vt},{type:`git-graph`,label:`Git Graph`,icon:tt}],cm={terminal:(0,H.lazy)(()=>l(()=>import(`./terminal-tab-BJEkmrDt.js`).then(e=>({default:e.TerminalTab})),__vite__mapDeps([3,1,4,5,6,7]))),chat:(0,H.lazy)(()=>l(()=>import(`./chat-tab-bS86TsT5.js`).then(e=>({default:e.ChatTab})),__vite__mapDeps([8,1,9,10,11,12,6,5,13,14,15,16,17,18,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,2,34,35,36,37,38,39,0]))),editor:(0,H.lazy)(()=>l(()=>import(`./code-editor-BaNaQ33b.js`).then(e=>({default:e.CodeEditor})),__vite__mapDeps([40,1,9,10,11,12,6,5,13,14,15,16,17,18,41,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,2,36,42,43,44]))),database:(0,H.lazy)(()=>l(()=>import(`./database-viewer-C5MVw8cJ.js`).then(e=>({default:e.DatabaseViewer})),__vite__mapDeps([45,1,41,6,21,35,36,5,46,44,2,47]))),sqlite:(0,H.lazy)(()=>l(()=>import(`./sqlite-viewer-SNVYFXvB.js`).then(e=>({default:e.SqliteViewer})),__vite__mapDeps([48,1,41,6,49,36,21,42,5,46,44,2]))),postgres:(0,H.lazy)(()=>l(()=>import(`./postgres-viewer-_nYiO_wp.js`).then(e=>({default:e.PostgresViewer})),__vite__mapDeps([50,1,49,6,36,21,42,5,2]))),"git-graph":(0,H.lazy)(()=>l(()=>import(`./git-graph-BD7A7MLo.js`).then(e=>({default:e.GitGraph})),__vite__mapDeps([51,1,11,12,6,5,4,21,35,39,2]))),"git-diff":(0,H.lazy)(()=>l(()=>import(`./diff-viewer-CUbFMWVo.js`).then(e=>({default:e.DiffViewer})),__vite__mapDeps([52,1,41,6,21,37,43,5,2]))),settings:(0,H.lazy)(()=>l(()=>import(`./settings-tab-C1SQMbSu.js`).then(e=>({default:e.SettingsTab})),__vite__mapDeps([53,11,1,12,6,5,2,0]))),ports:(0,H.lazy)(()=>l(()=>import(`./port-forwarding-tab-BF79F1iL.js`).then(e=>({default:e.PortForwardingTab})),__vite__mapDeps([54,1,21,6,38,12,5,2]))),"extension-webview":(0,H.lazy)(()=>l(()=>import(`./extension-webview-CwGufYEP.js`).then(e=>({default:e.ExtensionWebview})),__vite__mapDeps([55,1,5,6])))};function lm({panelId:e,projectName:t}){let n=Q(t=>t.panels[e]),r=Q(t=>t.focusedPanelId===e),i=Q(e=>(e.currentProject===t?e.grid:e.projectGrids[t]??[[]]).flat().length);return n?(0,W.jsxs)(`div`,{className:L(`flex flex-col h-full overflow-hidden`,i>1&&`border border-transparent`,i>1&&r&&`border-primary/30`),onMouseDown:()=>{Q.getState().focusedPanelId!==e&&Q.getState().setFocusedPanel(e)},children:[(0,W.jsx)(am,{panelId:e}),(0,W.jsxs)(`div`,{className:`flex-1 overflow-hidden relative`,"data-panel-drop-zone":e,children:[n.tabs.length===0?(0,W.jsx)(pm,{panelId:e}):n.tabs.map(e=>{let t=cm[e.type];return(0,W.jsx)(`div`,{className:e.id===n.activeTabId?`h-full w-full`:`hidden`,children:(0,W.jsx)(H.Suspense,{fallback:(0,W.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,W.jsx)(V,{className:`size-6 animate-spin text-primary`})}),children:(0,W.jsx)(t,{metadata:e.metadata,tabId:e.id})})},e.id)}),(0,W.jsx)(om,{panelId:e})]})]}):null}function um(e){try{let t=new Date(e),n=new Date().getTime()-t.getTime(),r=Math.floor(n/6e4);if(r<1)return`Just now`;if(r<60)return`${r}m ago`;let i=Math.floor(r/60);if(i<24)return`${i}h ago`;let a=Math.floor(i/24);return a<7?`${a}d ago`:t.toLocaleDateString(void 0,{month:`short`,day:`numeric`})}catch{return``}}var dm=5,fm=20;function pm({panelId:e}){let t=ap(e=>e.activeProject),[n,r]=(0,H.useState)([]),[i,o]=(0,H.useState)(!1),[s,c]=(0,H.useState)(!1),l=(0,H.useCallback)(async()=>{if(t?.name){o(!0);try{r((await B.get(`${z(t.name)}/chat/sessions?limit=${fm}`)).sessions.slice(0,fm))}catch{}finally{o(!1)}}},[t?.name]);(0,H.useEffect)(()=>{l()},[l]);let u=(0,H.useCallback)(async(e,n)=>{if(e.stopPropagation(),!t?.name)return;let i=`${z(t.name)}/chat/sessions/${n.id}/pin`;try{n.pinned?await B.del(i):await B.put(i),r(e=>e.map(e=>e.id===n.id?{...e,pinned:!e.pinned}:e).sort((e,t)=>e.pinned&&!t.pinned?-1:!e.pinned&&t.pinned?1:new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime()))}catch{}},[t?.name]);function d(n){let r=n!==`settings`&&t?{projectName:t.name}:void 0;Q.getState().openTab({type:n,title:sm.find(e=>e.type===n)?.label??n,metadata:r,projectId:t?.name??null,closable:!0},e)}function f(n){Q.getState().openTab({type:`chat`,title:n.title||`Chat`,projectId:t?.name??null,metadata:{projectName:t?.name,sessionId:n.id,providerId:n.providerId},closable:!0},e)}let p=n.filter(e=>e.pinned),m=n.filter(e=>!e.pinned),h=s?m:m.slice(0,dm),g=m.length>dm;function _(e){return(0,W.jsxs)(`button`,{onClick:()=>f(e),className:`group flex items-center gap-2.5 w-full px-3 py-2.5 text-left hover:bg-surface-elevated active:bg-surface-elevated transition-colors border-b border-border/50 last:border-0`,children:[(0,W.jsx)(vt,{className:`size-3.5 shrink-0 text-text-subtle`}),(0,W.jsx)(`span`,{className:`flex-1 min-w-0 text-xs font-medium truncate text-text-primary`,children:e.title||`Untitled`}),e.updatedAt&&(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0`,children:um(e.updatedAt)}),(0,W.jsx)(`span`,{role:`button`,tabIndex:0,onClick:t=>u(t,e),className:`p-1 rounded transition-colors shrink-0 ${e.pinned?`text-primary hover:text-primary/70`:`text-text-subtle can-hover:opacity-0 can-hover:group-hover:opacity-100 hover:text-text-primary`}`,"aria-label":e.pinned?`Unpin session`:`Pin session`,children:e.pinned?(0,W.jsx)(kt,{className:`size-3`}):(0,W.jsx)(At,{className:`size-3`})})]},e.id)}return(0,W.jsx)(`div`,{className:`flex flex-col h-full overflow-y-auto text-text-secondary`,children:(0,W.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-6 px-4 flex-1`,children:[(0,W.jsx)(`p`,{className:`text-sm`,children:`Open a tab to get started`}),(0,W.jsx)(`div`,{className:`grid grid-cols-3 gap-2 w-full max-w-sm`,children:sm.map(e=>{let t=e.icon;return(0,W.jsxs)(`button`,{onClick:()=>d(e.type),className:`flex flex-col items-center justify-center gap-1.5 px-2 py-3 rounded-md border border-border bg-surface hover:bg-surface-elevated active:bg-surface-elevated text-xs text-foreground transition-colors`,children:[(0,W.jsx)(t,{className:`size-5`}),e.label]},e.type)})}),t&&!i&&p.length>0&&(0,W.jsxs)(`div`,{className:`flex flex-col gap-2 w-full max-w-sm`,children:[(0,W.jsx)(`p`,{className:`text-xs text-text-subtle text-center`,children:`Pinned`}),(0,W.jsx)(`div`,{className:`w-full rounded-md border border-border bg-surface overflow-hidden`,children:p.map(_)})]}),t&&!i&&h.length>0&&(0,W.jsxs)(`div`,{className:`flex flex-col gap-2 w-full max-w-sm`,children:[(0,W.jsx)(`p`,{className:`text-xs text-text-subtle text-center`,children:`Recent chats`}),(0,W.jsx)(`div`,{className:`w-full rounded-md border border-border bg-surface overflow-hidden`,children:h.map(_)}),g&&(0,W.jsxs)(`button`,{onClick:()=>c(!s),className:`flex items-center justify-center gap-1 text-[11px] text-text-subtle hover:text-text-primary transition-colors py-1`,children:[s?(0,W.jsx)(Oe,{className:`size-3`}):(0,W.jsx)(a,{className:`size-3`}),s?`Show less`:`Show more (${m.length-dm})`]})]})]})})}function mm({projectName:e}){let t=ep(`(min-width: 768px)`),n=Q(t=>t.currentProject===e?t.grid:t.projectGrids[e]??[[]]),r=Q(e=>e.focusedPanelId),i=n.flat().length;if((0,H.useEffect)(()=>{if(i===0){let e=Pf();Q.setState(t=>({panels:{...t.panels,[e.id]:e},grid:[[e.id]],focusedPanelId:e.id}))}},[i]),i===0)return null;if(!t){let t=n.flat(),i=t.includes(r)?r:t[0];return i?(0,W.jsx)(lm,{panelId:i,projectName:e}):null}return i===1&&n[0]?.[0]?(0,W.jsx)(lm,{panelId:n[0][0],projectName:e}):(0,W.jsx)(Ef,{orientation:`vertical`,style:{height:`100%`},children:n.map((t,r)=>(0,W.jsx)(hm,{row:t,rowIdx:r,totalRows:n.length,projectName:e},`row-${r}`))})}function hm({row:e,rowIdx:t,totalRows:n,projectName:r}){return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(kf,{minSize:`15%`,defaultSize:`${Math.round(100/n)}%`,children:e.length===1?(0,W.jsx)(lm,{panelId:e[0],projectName:r}):(0,W.jsx)(Ef,{orientation:`horizontal`,children:e.map((t,n)=>(0,W.jsx)(gm,{panelId:t,colIdx:n,totalCols:e.length,projectName:r},t))})}),t<n-1&&(0,W.jsx)(_m,{orientation:`horizontal`})]})}function gm({panelId:e,colIdx:t,totalCols:n,projectName:r}){return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(kf,{minSize:`15%`,defaultSize:`${Math.round(100/n)}%`,children:(0,W.jsx)(lm,{panelId:e,projectName:r})}),t<n-1&&(0,W.jsx)(_m,{orientation:`vertical`})]})}function _m({orientation:e}){let t=e===`vertical`;return(0,W.jsx)(Mf,{className:`
|
|
14
|
+
For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return H.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},Or=`DialogDescriptionWarning`,kr=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Er(Or).contentName}}.`;return H.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},Ar=tr,jr=rr,Mr=sr,Nr=lr,Pr=pr,Fr=vr,Ir=br,Lr=Sr;function Rr(e){let t=H.useRef({value:e,previous:e});return H.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var zr=`rovingFocusGroup.onEntryFocus`,Br={bubbles:!1,cancelable:!0},Vr=`RovingFocusGroup`,[Hr,Ur,Wr]=y(Vr),[Gr,Kr]=h(Vr,[Wr]),[qr,Jr]=Gr(Vr),Yr=H.forwardRef((e,t)=>(0,W.jsx)(Hr.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,W.jsx)(Hr.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,W.jsx)(Xr,{...e,ref:t})})}));Yr.displayName=Vr;var Xr=H.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:l,preventScrollOnEntryFocus:u=!1,...f}=e,p=H.useRef(null),m=E(t,p),h=O(a),[g,v]=_({prop:o,defaultProp:s??null,onChange:c,caller:Vr}),[y,b]=H.useState(!1),x=j(l),S=Ur(n),C=H.useRef(!1),[w,T]=H.useState(0);return H.useEffect(()=>{let e=p.current;if(e)return e.addEventListener(zr,x),()=>e.removeEventListener(zr,x)},[x]),(0,W.jsx)(qr,{scope:n,orientation:r,dir:h,loop:i,currentTabStopId:g,onItemFocus:H.useCallback(e=>v(e),[v]),onItemShiftTab:H.useCallback(()=>b(!0),[]),onFocusableItemAdd:H.useCallback(()=>T(e=>e+1),[]),onFocusableItemRemove:H.useCallback(()=>T(e=>e-1),[]),children:(0,W.jsx)(d.div,{tabIndex:y||w===0?-1:0,"data-orientation":r,...f,ref:m,style:{outline:`none`,...e.style},onMouseDown:I(e.onMouseDown,()=>{C.current=!0}),onFocus:I(e.onFocus,e=>{let t=!C.current;if(e.target===e.currentTarget&&t&&!y){let t=new CustomEvent(zr,Br);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=S().filter(e=>e.focusable);ni([e.find(e=>e.active),e.find(e=>e.id===g),...e].filter(Boolean).map(e=>e.ref.current),u)}}C.current=!1}),onBlur:I(e.onBlur,()=>b(!1))})})}),Zr=`RovingFocusGroupItem`,Qr=H.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,c=w(),l=a||c,u=Jr(Zr,n),f=u.currentTabStopId===l,p=Ur(n),{onFocusableItemAdd:m,onFocusableItemRemove:h,currentTabStopId:g}=u;return H.useEffect(()=>{if(r)return m(),()=>h()},[r,m,h]),(0,W.jsx)(Hr.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:(0,W.jsx)(d.span,{tabIndex:f?0:-1,"data-orientation":u.orientation,...s,ref:t,onMouseDown:I(e.onMouseDown,e=>{r?u.onItemFocus(l):e.preventDefault()}),onFocus:I(e.onFocus,()=>u.onItemFocus(l)),onKeyDown:I(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){u.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=ti(e,u.orientation,u.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=p().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=u.loop?ri(n,r+1):n.slice(r+1)}setTimeout(()=>ni(n))}}),children:typeof o==`function`?o({isCurrentTabStop:f,hasTabStop:g!=null}):o})})});Qr.displayName=Zr;var $r={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function ei(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function ti(e,t,n){let r=ei(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return $r[r]}function ni(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function ri(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var ii=Yr,ai=Qr,oi=[`Enter`,` `],si=[`ArrowDown`,`PageUp`,`Home`],ci=[`ArrowUp`,`PageDown`,`End`],li=[...si,...ci],ui={ltr:[...oi,`ArrowRight`],rtl:[...oi,`ArrowLeft`]},di={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},fi=`Menu`,[pi,mi,hi]=y(fi),[gi,_i]=h(fi,[hi,v,Kr]),vi=v(),yi=Kr(),[bi,xi]=gi(fi),[Si,Ci]=gi(fi),wi=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=vi(t),[c,l]=H.useState(null),u=H.useRef(!1),d=j(a),f=O(i);return H.useEffect(()=>{let e=()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},t=()=>u.current=!1;return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),(0,W.jsx)(T,{...s,children:(0,W.jsx)(bi,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,W.jsx)(Si,{scope:t,onClose:H.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};wi.displayName=fi;var Ti=`MenuAnchor`,Ei=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=vi(n);return(0,W.jsx)(M,{...i,...r,ref:t})});Ei.displayName=Ti;var Di=`MenuPortal`,[Oi,G]=gi(Di,{forceMount:void 0}),ki=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=xi(Di,t);return(0,W.jsx)(Oi,{scope:t,forceMount:n,children:(0,W.jsx)(C,{present:n||a.open,children:(0,W.jsx)(N,{asChild:!0,container:i,children:r})})})};ki.displayName=Di;var Ai=`MenuContent`,[ji,Mi]=gi(Ai),Ni=H.forwardRef((e,t)=>{let n=G(Ai,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=xi(Ai,e.__scopeMenu),o=Ci(Ai,e.__scopeMenu);return(0,W.jsx)(pi.Provider,{scope:e.__scopeMenu,children:(0,W.jsx)(C,{present:r||a.open,children:(0,W.jsx)(pi.Slot,{scope:e.__scopeMenu,children:o.modal?(0,W.jsx)(Pi,{...i,ref:t}):(0,W.jsx)(Fi,{...i,ref:t})})})})}),Pi=H.forwardRef((e,t)=>{let n=xi(Ai,e.__scopeMenu),r=H.useRef(null),i=E(t,r);return H.useEffect(()=>{let e=r.current;if(e)return te(e)},[]),(0,W.jsx)(Li,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:I(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Fi=H.forwardRef((e,t)=>{let n=xi(Ai,e.__scopeMenu);return(0,W.jsx)(Li,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Ii=p(`MenuContent.ScrollLock`),Li=H.forwardRef((e,t)=>{let{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:o,disableOutsidePointerEvents:s,onEntryFocus:c,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,disableOutsideScroll:m,...h}=e,g=xi(Ai,n),_=Ci(Ai,n),v=vi(n),y=yi(n),C=mi(n),[w,T]=H.useState(null),O=H.useRef(null),k=E(t,O,g.onContentChange),A=H.useRef(0),j=H.useRef(``),te=H.useRef(0),M=H.useRef(null),N=H.useRef(`right`),P=H.useRef(0),F=m?b:H.Fragment,ne=m?{as:Ii,allowPinchZoom:!0}:void 0,re=e=>{let t=j.current+e,n=C().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=xa(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){j.current=t,window.clearTimeout(A.current),t!==``&&(A.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};H.useEffect(()=>()=>window.clearTimeout(A.current),[]),D();let L=H.useCallback(e=>N.current===M.current?.side&&Ca(e,M.current?.area),[]);return(0,W.jsx)(ji,{scope:n,searchRef:j,onItemEnter:H.useCallback(e=>{L(e)&&e.preventDefault()},[L]),onItemLeave:H.useCallback(e=>{L(e)||(O.current?.focus(),T(null))},[L]),onTriggerLeave:H.useCallback(e=>{L(e)&&e.preventDefault()},[L]),pointerGraceTimerRef:te,onPointerGraceIntentChange:H.useCallback(e=>{M.current=e},[]),children:(0,W.jsx)(F,{...ne,children:(0,W.jsx)(x,{asChild:!0,trapped:i,onMountAutoFocus:I(a,e=>{e.preventDefault(),O.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:(0,W.jsx)(S,{asChild:!0,disableOutsidePointerEvents:s,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,children:(0,W.jsx)(ii,{asChild:!0,...y,dir:_.dir,orientation:`vertical`,loop:r,currentTabStopId:w,onCurrentTabStopIdChange:T,onEntryFocus:I(c,e=>{_.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,W.jsx)(ee,{role:`menu`,"aria-orientation":`vertical`,"data-state":ga(g.open),"data-radix-menu-content":``,dir:_.dir,...v,...h,ref:k,style:{outline:`none`,...h.style},onKeyDown:I(h.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&re(e.key));let i=O.current;if(e.target!==i||!li.includes(e.key))return;e.preventDefault();let a=C().filter(e=>!e.disabled).map(e=>e.ref.current);ci.includes(e.key)&&a.reverse(),ya(a)}),onBlur:I(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(A.current),j.current=``)}),onPointerMove:I(e.onPointerMove,wa(e=>{let t=e.target,n=P.current!==e.clientX;e.currentTarget.contains(t)&&n&&(N.current=e.clientX>P.current?`right`:`left`,P.current=e.clientX)}))})})})})})})});Ni.displayName=Ai;var Ri=`MenuGroup`,zi=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,W.jsx)(d.div,{role:`group`,...r,ref:t})});zi.displayName=Ri;var Bi=`MenuLabel`,Vi=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,W.jsx)(d.div,{...r,ref:t})});Vi.displayName=Bi;var Hi=`MenuItem`,Ui=`menu.itemSelect`,Wi=H.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:r,...i}=e,a=H.useRef(null),o=Ci(Hi,e.__scopeMenu),s=Mi(Hi,e.__scopeMenu),c=E(t,a),l=H.useRef(!1),u=()=>{let e=a.current;if(!n&&e){let t=new CustomEvent(Ui,{bubbles:!0,cancelable:!0});e.addEventListener(Ui,e=>r?.(e),{once:!0}),F(e,t),t.defaultPrevented?l.current=!1:o.onClose()}};return(0,W.jsx)(Gi,{...i,ref:c,disabled:n,onClick:I(e.onClick,u),onPointerDown:t=>{e.onPointerDown?.(t),l.current=!0},onPointerUp:I(e.onPointerUp,e=>{l.current||e.currentTarget?.click()}),onKeyDown:I(e.onKeyDown,e=>{let t=s.searchRef.current!==``;n||t&&e.key===` `||oi.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});Wi.displayName=Hi;var Gi=H.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:i,...a}=e,o=Mi(Hi,n),s=yi(n),c=H.useRef(null),l=E(t,c),[u,f]=H.useState(!1),[p,m]=H.useState(``);return H.useEffect(()=>{let e=c.current;e&&m((e.textContent??``).trim())},[a.children]),(0,W.jsx)(pi.ItemSlot,{scope:n,disabled:r,textValue:i??p,children:(0,W.jsx)(ai,{asChild:!0,...s,focusable:!r,children:(0,W.jsx)(d.div,{role:`menuitem`,"data-highlighted":u?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...a,ref:l,onPointerMove:I(e.onPointerMove,wa(e=>{r?o.onItemLeave(e):(o.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:I(e.onPointerLeave,wa(e=>o.onItemLeave(e))),onFocus:I(e.onFocus,()=>f(!0)),onBlur:I(e.onBlur,()=>f(!1))})})})}),Ki=`MenuCheckboxItem`,qi=H.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,W.jsx)(ta,{scope:e.__scopeMenu,checked:n,children:(0,W.jsx)(Wi,{role:`menuitemcheckbox`,"aria-checked":_a(n)?`mixed`:n,...i,ref:t,"data-state":va(n),onSelect:I(i.onSelect,()=>r?.(_a(n)?!0:!n),{checkForDefaultPrevented:!1})})})});qi.displayName=Ki;var Ji=`MenuRadioGroup`,[Yi,Xi]=gi(Ji,{value:void 0,onValueChange:()=>{}}),Zi=H.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=j(r);return(0,W.jsx)(Yi,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,W.jsx)(zi,{...i,ref:t})})});Zi.displayName=Ji;var Qi=`MenuRadioItem`,$i=H.forwardRef((e,t)=>{let{value:n,...r}=e,i=Xi(Qi,e.__scopeMenu),a=n===i.value;return(0,W.jsx)(ta,{scope:e.__scopeMenu,checked:a,children:(0,W.jsx)(Wi,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":va(a),onSelect:I(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});$i.displayName=Qi;var ea=`MenuItemIndicator`,[ta,na]=gi(ea,{checked:!1}),ra=H.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...i}=e,a=na(ea,n);return(0,W.jsx)(C,{present:r||_a(a.checked)||a.checked===!0,children:(0,W.jsx)(d.span,{...i,ref:t,"data-state":va(a.checked)})})});ra.displayName=ea;var ia=`MenuSeparator`,aa=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,W.jsx)(d.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});aa.displayName=ia;var oa=`MenuArrow`,sa=H.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=vi(n);return(0,W.jsx)(k,{...i,...r,ref:t})});sa.displayName=oa;var ca=`MenuSub`,[la,ua]=gi(ca),da=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=xi(ca,t),o=vi(t),[s,c]=H.useState(null),[l,u]=H.useState(null),d=j(i);return H.useEffect(()=>(a.open===!1&&d(!1),()=>d(!1)),[a.open,d]),(0,W.jsx)(T,{...o,children:(0,W.jsx)(bi,{scope:t,open:r,onOpenChange:d,content:l,onContentChange:u,children:(0,W.jsx)(la,{scope:t,contentId:w(),triggerId:w(),trigger:s,onTriggerChange:c,children:n})})})};da.displayName=ca;var fa=`MenuSubTrigger`,pa=H.forwardRef((e,t)=>{let n=xi(fa,e.__scopeMenu),r=Ci(fa,e.__scopeMenu),i=ua(fa,e.__scopeMenu),a=Mi(fa,e.__scopeMenu),o=H.useRef(null),{pointerGraceTimerRef:s,onPointerGraceIntentChange:c}=a,l={__scopeMenu:e.__scopeMenu},u=H.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return H.useEffect(()=>u,[u]),H.useEffect(()=>{let e=s.current;return()=>{window.clearTimeout(e),c(null)}},[s,c]),(0,W.jsx)(Ei,{asChild:!0,...l,children:(0,W.jsx)(Gi,{id:i.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":i.contentId,"data-state":ga(n.open),...e,ref:m(t,i.onTriggerChange),onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:I(e.onPointerMove,wa(t=>{a.onItemEnter(t),!t.defaultPrevented&&!e.disabled&&!n.open&&!o.current&&(a.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{n.onOpenChange(!0),u()},100))})),onPointerLeave:I(e.onPointerLeave,wa(e=>{u();let t=n.content?.getBoundingClientRect();if(t){let r=n.content?.dataset.side,i=r===`right`,o=i?-5:5,c=t[i?`left`:`right`],l=t[i?`right`:`left`];a.onPointerGraceIntentChange({area:[{x:e.clientX+o,y:e.clientY},{x:c,y:t.top},{x:l,y:t.top},{x:l,y:t.bottom},{x:c,y:t.bottom}],side:r}),window.clearTimeout(s.current),s.current=window.setTimeout(()=>a.onPointerGraceIntentChange(null),300)}else{if(a.onTriggerLeave(e),e.defaultPrevented)return;a.onPointerGraceIntentChange(null)}})),onKeyDown:I(e.onKeyDown,t=>{let i=a.searchRef.current!==``;e.disabled||i&&t.key===` `||ui[r.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});pa.displayName=fa;var ma=`MenuSubContent`,ha=H.forwardRef((e,t)=>{let n=G(Ai,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=xi(Ai,e.__scopeMenu),o=Ci(Ai,e.__scopeMenu),s=ua(ma,e.__scopeMenu),c=H.useRef(null),l=E(t,c);return(0,W.jsx)(pi.Provider,{scope:e.__scopeMenu,children:(0,W.jsx)(C,{present:r||a.open,children:(0,W.jsx)(pi.Slot,{scope:e.__scopeMenu,children:(0,W.jsx)(Li,{id:s.contentId,"aria-labelledby":s.triggerId,...i,ref:l,align:`start`,side:o.dir===`rtl`?`left`:`right`,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{o.isUsingKeyboardRef.current&&c.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:I(e.onFocusOutside,e=>{e.target!==s.trigger&&a.onOpenChange(!1)}),onEscapeKeyDown:I(e.onEscapeKeyDown,e=>{o.onClose(),e.preventDefault()}),onKeyDown:I(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=di[o.dir].includes(e.key);t&&n&&(a.onOpenChange(!1),s.trigger?.focus(),e.preventDefault())})})})})})});ha.displayName=ma;function ga(e){return e?`open`:`closed`}function _a(e){return e===`indeterminate`}function va(e){return _a(e)?`indeterminate`:e?`checked`:`unchecked`}function ya(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function ba(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function xa(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=ba(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Sa(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function Ca(e,t){return t?Sa({x:e.clientX,y:e.clientY},t):!1}function wa(e){return t=>t.pointerType===`mouse`?e(t):void 0}var Ta=wi,Ea=Ei,Da=ki,Oa=Ni,ka=zi,Aa=Vi,ja=Wi,Ma=qi,Na=Zi,Pa=$i,Fa=ra,Ia=aa,La=sa,Ra=da,za=pa,Ba=ha,Va=`ContextMenu`,[Ha,Ua]=h(Va,[_i]),Wa=_i(),[Ga,Ka]=Ha(Va),qa=e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,dir:i,modal:a=!0}=e,[o,s]=H.useState(!1),c=Wa(t),l=j(r),u=H.useCallback(e=>{s(e),l(e)},[l]);return(0,W.jsx)(Ga,{scope:t,open:o,onOpenChange:u,modal:a,children:(0,W.jsx)(Ta,{...c,dir:i,open:o,onOpenChange:u,modal:a,children:n})})};qa.displayName=Va;var Ja=`ContextMenuTrigger`,Ya=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,disabled:r=!1,...i}=e,a=Ka(Ja,n),o=Wa(n),s=H.useRef({x:0,y:0}),c=H.useRef({getBoundingClientRect:()=>DOMRect.fromRect({width:0,height:0,...s.current})}),l=H.useRef(0),u=H.useCallback(()=>window.clearTimeout(l.current),[]),f=e=>{s.current={x:e.clientX,y:e.clientY},a.onOpenChange(!0)};return H.useEffect(()=>u,[u]),H.useEffect(()=>void(r&&u()),[r,u]),(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Ea,{...o,virtualRef:c}),(0,W.jsx)(d.span,{"data-state":a.open?`open`:`closed`,"data-disabled":r?``:void 0,...i,ref:t,style:{WebkitTouchCallout:`none`,...e.style},onContextMenu:r?e.onContextMenu:I(e.onContextMenu,e=>{u(),f(e),e.preventDefault()}),onPointerDown:r?e.onPointerDown:I(e.onPointerDown,wo(e=>{u(),l.current=window.setTimeout(()=>f(e),700)})),onPointerMove:r?e.onPointerMove:I(e.onPointerMove,wo(u)),onPointerCancel:r?e.onPointerCancel:I(e.onPointerCancel,wo(u)),onPointerUp:r?e.onPointerUp:I(e.onPointerUp,wo(u))})]})});Ya.displayName=Ja;var Xa=`ContextMenuPortal`,Za=e=>{let{__scopeContextMenu:t,...n}=e,r=Wa(t);return(0,W.jsx)(Da,{...r,...n})};Za.displayName=Xa;var Qa=`ContextMenuContent`,$a=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ka(Qa,n),a=Wa(n),o=H.useRef(!1);return(0,W.jsx)(Oa,{...a,...r,ref:t,side:`right`,sideOffset:2,align:`start`,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),!t.defaultPrevented&&o.current&&t.preventDefault(),o.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),!t.defaultPrevented&&!i.modal&&(o.current=!0)},style:{...e.style,"--radix-context-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-context-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-context-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-context-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-context-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});$a.displayName=Qa;var eo=`ContextMenuGroup`,to=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(ka,{...i,...r,ref:t})});to.displayName=eo;var no=`ContextMenuLabel`,ro=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Aa,{...i,...r,ref:t})});ro.displayName=no;var io=`ContextMenuItem`,ao=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(ja,{...i,...r,ref:t})});ao.displayName=io;var oo=`ContextMenuCheckboxItem`,K=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Ma,{...i,...r,ref:t})});K.displayName=oo;var so=`ContextMenuRadioGroup`,co=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Na,{...i,...r,ref:t})});co.displayName=so;var lo=`ContextMenuRadioItem`,uo=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Pa,{...i,...r,ref:t})});uo.displayName=lo;var fo=`ContextMenuItemIndicator`,po=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Fa,{...i,...r,ref:t})});po.displayName=fo;var mo=`ContextMenuSeparator`,ho=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Ia,{...i,...r,ref:t})});ho.displayName=mo;var go=`ContextMenuArrow`,_o=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(La,{...i,...r,ref:t})});_o.displayName=go;var vo=`ContextMenuSub`,yo=e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,open:i,defaultOpen:a}=e,o=Wa(t),[s,c]=_({prop:i,defaultProp:a??!1,onChange:r,caller:vo});return(0,W.jsx)(Ra,{...o,open:s,onOpenChange:c,children:n})};yo.displayName=vo;var bo=`ContextMenuSubTrigger`,xo=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(za,{...i,...r,ref:t})});xo.displayName=bo;var So=`ContextMenuSubContent`,Co=H.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Wa(n);return(0,W.jsx)(Ba,{...i,...r,ref:t,style:{...e.style,"--radix-context-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-context-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-context-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-context-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-context-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Co.displayName=So;function wo(e){return t=>t.pointerType===`mouse`?void 0:e(t)}var To=qa,Eo=Ya,Do=Za,Oo=$a,ko=ao,Ao=ho,jo=`DropdownMenu`,[Mo,No]=h(jo,[_i]),Po=_i(),[Fo,Io]=Mo(jo),Lo=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=Po(t),l=H.useRef(null),[u,d]=_({prop:i,defaultProp:a??!1,onChange:o,caller:jo});return(0,W.jsx)(Fo,{scope:t,triggerId:w(),triggerRef:l,contentId:w(),open:u,onOpenChange:d,onOpenToggle:H.useCallback(()=>d(e=>!e),[d]),modal:s,children:(0,W.jsx)(Ta,{...c,open:u,onOpenChange:d,dir:r,modal:s,children:n})})};Lo.displayName=jo;var Ro=`DropdownMenuTrigger`,zo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:r=!1,...i}=e,a=Io(Ro,n),o=Po(n);return(0,W.jsx)(Ea,{asChild:!0,...o,children:(0,W.jsx)(d.button,{type:`button`,id:a.triggerId,"aria-haspopup":`menu`,"aria-expanded":a.open,"aria-controls":a.open?a.contentId:void 0,"data-state":a.open?`open`:`closed`,"data-disabled":r?``:void 0,disabled:r,...i,ref:m(t,a.triggerRef),onPointerDown:I(e.onPointerDown,e=>{!r&&e.button===0&&e.ctrlKey===!1&&(a.onOpenToggle(),a.open||e.preventDefault())}),onKeyDown:I(e.onKeyDown,e=>{r||([`Enter`,` `].includes(e.key)&&a.onOpenToggle(),e.key===`ArrowDown`&&a.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});zo.displayName=Ro;var Bo=`DropdownMenuPortal`,Vo=e=>{let{__scopeDropdownMenu:t,...n}=e,r=Po(t);return(0,W.jsx)(Da,{...r,...n})};Vo.displayName=Bo;var Ho=`DropdownMenuContent`,Uo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Io(Ho,n),a=Po(n),o=H.useRef(!1);return(0,W.jsx)(Oa,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:I(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:I(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Uo.displayName=Ho;var Wo=`DropdownMenuGroup`,Go=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(ka,{...i,...r,ref:t})});Go.displayName=Wo;var Ko=`DropdownMenuLabel`,qo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Aa,{...i,...r,ref:t})});qo.displayName=Ko;var Jo=`DropdownMenuItem`,Yo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(ja,{...i,...r,ref:t})});Yo.displayName=Jo;var Xo=`DropdownMenuCheckboxItem`,Zo=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Ma,{...i,...r,ref:t})});Zo.displayName=Xo;var Qo=`DropdownMenuRadioGroup`,$o=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Na,{...i,...r,ref:t})});$o.displayName=Qo;var es=`DropdownMenuRadioItem`,ts=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Pa,{...i,...r,ref:t})});ts.displayName=es;var ns=`DropdownMenuItemIndicator`,rs=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Fa,{...i,...r,ref:t})});rs.displayName=ns;var is=`DropdownMenuSeparator`,as=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Ia,{...i,...r,ref:t})});as.displayName=is;var os=`DropdownMenuArrow`,ss=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(La,{...i,...r,ref:t})});ss.displayName=os;var cs=e=>{let{__scopeDropdownMenu:t,children:n,open:r,onOpenChange:i,defaultOpen:a}=e,o=Po(t),[s,c]=_({prop:r,defaultProp:a??!1,onChange:i,caller:`DropdownMenuSub`});return(0,W.jsx)(Ra,{...o,open:s,onOpenChange:c,children:n})},ls=`DropdownMenuSubTrigger`,us=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(za,{...i,...r,ref:t})});us.displayName=ls;var ds=`DropdownMenuSubContent`,fs=H.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Po(n);return(0,W.jsx)(Ba,{...i,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});fs.displayName=ds;var ps=Lo,ms=zo,hs=Vo,gs=Uo,_s=Yo,vs=cs,ys=us,bs=fs,xs=`Label`,Ss=H.forwardRef((e,t)=>(0,W.jsx)(d.label,{...e,ref:t,onMouseDown:t=>{t.target.closest(`button, input, select, textarea`)||(e.onMouseDown?.(t),!t.defaultPrevented&&t.detail>1&&t.preventDefault())}}));Ss.displayName=xs;var Cs=Ss;function ws(e,[t,n]){return Math.min(n,Math.max(t,e))}function Ts(e,t){return H.useReducer((e,n)=>t[e][n]??e,e)}var Es=`ScrollArea`,[Ds,Os]=h(Es),[ks,As]=Ds(Es),js=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,type:r=`hover`,dir:i,scrollHideDelay:a=600,...o}=e,[s,c]=H.useState(null),[l,u]=H.useState(null),[f,p]=H.useState(null),[m,h]=H.useState(null),[g,_]=H.useState(null),[v,y]=H.useState(0),[b,x]=H.useState(0),[S,C]=H.useState(!1),[w,T]=H.useState(!1),D=E(t,e=>c(e)),k=O(i);return(0,W.jsx)(ks,{scope:n,type:r,dir:k,scrollHideDelay:a,scrollArea:s,viewport:l,onViewportChange:u,content:f,onContentChange:p,scrollbarX:m,onScrollbarXChange:h,scrollbarXEnabled:S,onScrollbarXEnabledChange:C,scrollbarY:g,onScrollbarYChange:_,scrollbarYEnabled:w,onScrollbarYEnabledChange:T,onCornerWidthChange:y,onCornerHeightChange:x,children:(0,W.jsx)(d.div,{dir:k,...o,ref:D,style:{position:`relative`,"--radix-scroll-area-corner-width":v+`px`,"--radix-scroll-area-corner-height":b+`px`,...e.style}})})});js.displayName=Es;var Ms=`ScrollAreaViewport`,Ns=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,children:r,nonce:i,...a}=e,o=As(Ms,n),s=E(t,H.useRef(null),o.onViewportChange);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}`},nonce:i}),(0,W.jsx)(d.div,{"data-radix-scroll-area-viewport":``,...a,ref:s,style:{overflowX:o.scrollbarXEnabled?`scroll`:`hidden`,overflowY:o.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,W.jsx)(`div`,{ref:o.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})});Ns.displayName=Ms;var Ps=`ScrollAreaScrollbar`,Fs=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=As(Ps,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return H.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,W.jsx)(Is,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,W.jsx)(Ls,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,W.jsx)(Rs,{...r,ref:t,forceMount:n}):i.type===`always`?(0,W.jsx)(zs,{...r,ref:t}):null});Fs.displayName=Ps;var Is=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=As(Ps,e.__scopeScrollArea),[a,o]=H.useState(!1);return H.useEffect(()=>{let e=i.scrollArea,t=0;if(e){let n=()=>{window.clearTimeout(t),o(!0)},r=()=>{t=window.setTimeout(()=>o(!1),i.scrollHideDelay)};return e.addEventListener(`pointerenter`,n),e.addEventListener(`pointerleave`,r),()=>{window.clearTimeout(t),e.removeEventListener(`pointerenter`,n),e.removeEventListener(`pointerleave`,r)}}},[i.scrollArea,i.scrollHideDelay]),(0,W.jsx)(C,{present:n||a,children:(0,W.jsx)(Rs,{"data-state":a?`visible`:`hidden`,...r,ref:t})})}),Ls=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=As(Ps,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=ac(()=>c(`SCROLL_END`),100),[s,c]=Ts(`hidden`,{hidden:{SCROLL:`scrolling`},scrolling:{SCROLL_END:`idle`,POINTER_ENTER:`interacting`},interacting:{SCROLL:`interacting`,POINTER_LEAVE:`idle`},idle:{HIDE:`hidden`,SCROLL:`scrolling`,POINTER_ENTER:`interacting`}});return H.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),H.useEffect(()=>{let e=i.viewport,t=a?`scrollLeft`:`scrollTop`;if(e){let n=e[t],r=()=>{let r=e[t];n!==r&&(c(`SCROLL`),o()),n=r};return e.addEventListener(`scroll`,r),()=>e.removeEventListener(`scroll`,r)}},[i.viewport,a,c,o]),(0,W.jsx)(C,{present:n||s!==`hidden`,children:(0,W.jsx)(zs,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:I(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:I(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})}),Rs=H.forwardRef((e,t)=>{let n=As(Ps,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=H.useState(!1),s=e.orientation===`horizontal`,c=ac(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return oc(n.viewport,c),oc(n.content,c),(0,W.jsx)(C,{present:r||a,children:(0,W.jsx)(zs,{"data-state":a?`visible`:`hidden`,...i,ref:t})})}),zs=H.forwardRef((e,t)=>{let{orientation:n=`vertical`,...r}=e,i=As(Ps,e.__scopeScrollArea),a=H.useRef(null),o=H.useRef(0),[s,c]=H.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=Qs(s.viewport,s.content),u={...r,sizes:s,onSizesChange:c,hasThumb:l>0&&l<1,onThumbChange:e=>a.current=e,onThumbPointerUp:()=>o.current=0,onThumbPointerDown:e=>o.current=e};function d(e,t){return ec(e,o.current,s,t)}return n===`horizontal`?(0,W.jsx)(Bs,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=tc(e,s,i.dir);a.current.style.transform=`translate3d(${t}px, 0, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollLeft=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollLeft=d(e,i.dir))}}):n===`vertical`?(0,W.jsx)(Vs,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=tc(e,s);a.current.style.transform=`translate3d(0, ${t}px, 0)`}},onWheelScroll:e=>{i.viewport&&(i.viewport.scrollTop=e)},onDragScroll:e=>{i.viewport&&(i.viewport.scrollTop=d(e))}}):null}),Bs=H.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=As(Ps,e.__scopeScrollArea),[o,s]=H.useState(),c=H.useRef(null),l=E(t,c,a.onScrollbarXChange);return H.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,W.jsx)(Ws,{"data-orientation":`horizontal`,...i,ref:l,sizes:n,style:{bottom:0,left:a.dir===`rtl`?`var(--radix-scroll-area-corner-width)`:0,right:a.dir===`ltr`?`var(--radix-scroll-area-corner-width)`:0,"--radix-scroll-area-thumb-width":$s(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.x),onDragScroll:t=>e.onDragScroll(t.x),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollLeft+t.deltaX;e.onWheelScroll(r),rc(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollWidth,viewport:a.viewport.offsetWidth,scrollbar:{size:c.current.clientWidth,paddingStart:Zs(o.paddingLeft),paddingEnd:Zs(o.paddingRight)}})}})}),Vs=H.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=As(Ps,e.__scopeScrollArea),[o,s]=H.useState(),c=H.useRef(null),l=E(t,c,a.onScrollbarYChange);return H.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,W.jsx)(Ws,{"data-orientation":`vertical`,...i,ref:l,sizes:n,style:{top:0,right:a.dir===`ltr`?0:void 0,left:a.dir===`rtl`?0:void 0,bottom:`var(--radix-scroll-area-corner-height)`,"--radix-scroll-area-thumb-height":$s(n)+`px`,...e.style},onThumbPointerDown:t=>e.onThumbPointerDown(t.y),onDragScroll:t=>e.onDragScroll(t.y),onWheelScroll:(t,n)=>{if(a.viewport){let r=a.viewport.scrollTop+t.deltaY;e.onWheelScroll(r),rc(r,n)&&t.preventDefault()}},onResize:()=>{c.current&&a.viewport&&o&&r({content:a.viewport.scrollHeight,viewport:a.viewport.offsetHeight,scrollbar:{size:c.current.clientHeight,paddingStart:Zs(o.paddingTop),paddingEnd:Zs(o.paddingBottom)}})}})}),[Hs,Us]=Ds(Ps),Ws=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,sizes:r,hasThumb:i,onThumbChange:a,onThumbPointerUp:o,onThumbPointerDown:s,onThumbPositionChange:c,onDragScroll:l,onWheelScroll:u,onResize:f,...p}=e,m=As(Ps,n),[h,g]=H.useState(null),_=E(t,e=>g(e)),v=H.useRef(null),y=H.useRef(``),b=m.viewport,x=r.content-r.viewport,S=j(u),C=j(c),w=ac(f,10);function T(e){v.current&&l({x:e.clientX-v.current.left,y:e.clientY-v.current.top})}return H.useEffect(()=>{let e=e=>{let t=e.target;h?.contains(t)&&S(e,x)};return document.addEventListener(`wheel`,e,{passive:!1}),()=>document.removeEventListener(`wheel`,e,{passive:!1})},[b,h,x,S]),H.useEffect(C,[r,C]),oc(h,w),oc(m.content,w),(0,W.jsx)(Hs,{scope:n,scrollbar:h,hasThumb:i,onThumbChange:j(a),onThumbPointerUp:j(o),onThumbPositionChange:C,onThumbPointerDown:j(s),children:(0,W.jsx)(d.div,{...p,ref:_,style:{position:`absolute`,...p.style},onPointerDown:I(e.onPointerDown,e=>{e.button===0&&(e.target.setPointerCapture(e.pointerId),v.current=h.getBoundingClientRect(),y.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect=`none`,m.viewport&&(m.viewport.style.scrollBehavior=`auto`),T(e))}),onPointerMove:I(e.onPointerMove,T),onPointerUp:I(e.onPointerUp,e=>{let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),document.body.style.webkitUserSelect=y.current,m.viewport&&(m.viewport.style.scrollBehavior=``),v.current=null})})})}),Gs=`ScrollAreaThumb`,Ks=H.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=Us(Gs,e.__scopeScrollArea);return(0,W.jsx)(C,{present:n||i.hasThumb,children:(0,W.jsx)(qs,{ref:t,...r})})}),qs=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,style:r,...i}=e,a=As(Gs,n),o=Us(Gs,n),{onThumbPositionChange:s}=o,c=E(t,e=>o.onThumbChange(e)),l=H.useRef(void 0),u=ac(()=>{l.current&&=(l.current(),void 0)},100);return H.useEffect(()=>{let e=a.viewport;if(e){let t=()=>{u(),l.current||(l.current=ic(e,s),s())};return s(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[a.viewport,u,s]),(0,W.jsx)(d.div,{"data-state":o.hasThumb?`visible`:`hidden`,...i,ref:c,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:I(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;o.onThumbPointerDown({x:n,y:r})}),onPointerUp:I(e.onPointerUp,o.onThumbPointerUp)})});Ks.displayName=Gs;var Js=`ScrollAreaCorner`,Ys=H.forwardRef((e,t)=>{let n=As(Js,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,W.jsx)(Xs,{...e,ref:t}):null});Ys.displayName=Js;var Xs=H.forwardRef((e,t)=>{let{__scopeScrollArea:n,...r}=e,i=As(Js,n),[a,o]=H.useState(0),[s,c]=H.useState(0),l=!!(a&&s);return oc(i.scrollbarX,()=>{let e=i.scrollbarX?.offsetHeight||0;i.onCornerHeightChange(e),c(e)}),oc(i.scrollbarY,()=>{let e=i.scrollbarY?.offsetWidth||0;i.onCornerWidthChange(e),o(e)}),l?(0,W.jsx)(d.div,{...r,ref:t,style:{width:a,height:s,position:`absolute`,right:i.dir===`ltr`?0:void 0,left:i.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null});function Zs(e){return e?parseInt(e,10):0}function Qs(e,t){let n=e/t;return isNaN(n)?0:n}function $s(e){let t=Qs(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function ec(e,t,n,r=`ltr`){let i=$s(n),a=i/2,o=t||a,s=i-o,c=n.scrollbar.paddingStart+o,l=n.scrollbar.size-n.scrollbar.paddingEnd-s,u=n.content-n.viewport,d=r===`ltr`?[0,u]:[u*-1,0];return nc([c,l],d)(e)}function tc(e,t,n=`ltr`){let r=$s(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=ws(e,n===`ltr`?[0,o]:[o*-1,0]);return nc([0,o],[0,s])(c)}function nc(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];let r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function rc(e,t){return e>0&&e<t}var ic=(e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function i(){let a={left:e.scrollLeft,top:e.scrollTop},o=n.left!==a.left,s=n.top!==a.top;(o||s)&&t(),n=a,r=window.requestAnimationFrame(i)})(),()=>window.cancelAnimationFrame(r)};function ac(e,t){let n=j(e),r=H.useRef(0);return H.useEffect(()=>()=>window.clearTimeout(r.current),[]),H.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function oc(e,t){let n=j(t);P(()=>{let t=0;if(e){let r=new ResizeObserver(()=>{cancelAnimationFrame(t),t=window.requestAnimationFrame(n)});return r.observe(e),()=>{window.cancelAnimationFrame(t),r.unobserve(e)}}},[e,n])}var sc=js,cc=Ns,lc=Ys,uc=[` `,`Enter`,`ArrowUp`,`ArrowDown`],dc=[` `,`Enter`],fc=`Select`,[pc,mc,hc]=y(fc),[gc,_c]=h(fc,[hc,v]),vc=v(),[yc,bc]=gc(fc),[xc,Sc]=gc(fc),Cc=e=>{let{__scopeSelect:t,children:n,open:r,defaultOpen:i,onOpenChange:a,value:o,defaultValue:s,onValueChange:c,dir:l,name:u,autoComplete:d,disabled:f,required:p,form:m}=e,h=vc(t),[g,v]=H.useState(null),[y,b]=H.useState(null),[x,S]=H.useState(!1),C=O(l),[E,D]=_({prop:r,defaultProp:i??!1,onChange:a,caller:fc}),[k,A]=_({prop:o,defaultProp:s,onChange:c,caller:fc}),j=H.useRef(null),ee=g?m||!!g.closest(`form`):!0,[te,M]=H.useState(new Set),N=Array.from(te).map(e=>e.props.value).join(`;`);return(0,W.jsx)(T,{...h,children:(0,W.jsxs)(yc,{required:p,scope:t,trigger:g,onTriggerChange:v,valueNode:y,onValueNodeChange:b,valueNodeHasChildren:x,onValueNodeHasChildrenChange:S,contentId:w(),value:k,onValueChange:A,open:E,onOpenChange:D,dir:C,triggerPointerDownPosRef:j,disabled:f,children:[(0,W.jsx)(pc.Provider,{scope:t,children:(0,W.jsx)(xc,{scope:e.__scopeSelect,onNativeOptionAdd:H.useCallback(e=>{M(t=>new Set(t).add(e))},[]),onNativeOptionRemove:H.useCallback(e=>{M(t=>{let n=new Set(t);return n.delete(e),n})},[]),children:n})}),ee?(0,W.jsxs)(vl,{"aria-hidden":!0,required:p,tabIndex:-1,name:u,autoComplete:d,value:k,onChange:e=>A(e.target.value),disabled:f,form:m,children:[k===void 0?(0,W.jsx)(`option`,{value:``}):null,Array.from(te)]},N):null]})})};Cc.displayName=fc;var wc=`SelectTrigger`,Tc=H.forwardRef((e,t)=>{let{__scopeSelect:n,disabled:r=!1,...i}=e,a=vc(n),o=bc(wc,n),s=o.disabled||r,c=E(t,o.onTriggerChange),l=mc(n),u=H.useRef(`touch`),[f,p,m]=bl(e=>{let t=l().filter(e=>!e.disabled),n=xl(t,e,t.find(e=>e.value===o.value));n!==void 0&&o.onValueChange(n.value)}),h=e=>{s||(o.onOpenChange(!0),m()),e&&(o.triggerPointerDownPosRef.current={x:Math.round(e.pageX),y:Math.round(e.pageY)})};return(0,W.jsx)(M,{asChild:!0,...a,children:(0,W.jsx)(d.button,{type:`button`,role:`combobox`,"aria-controls":o.contentId,"aria-expanded":o.open,"aria-required":o.required,"aria-autocomplete":`none`,dir:o.dir,"data-state":o.open?`open`:`closed`,disabled:s,"data-disabled":s?``:void 0,"data-placeholder":yl(o.value)?``:void 0,...i,ref:c,onClick:I(i.onClick,e=>{e.currentTarget.focus(),u.current!==`mouse`&&h(e)}),onPointerDown:I(i.onPointerDown,e=>{u.current=e.pointerType;let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&e.pointerType===`mouse`&&(h(e),e.preventDefault())}),onKeyDown:I(i.onKeyDown,e=>{let t=f.current!==``;!(e.ctrlKey||e.altKey||e.metaKey)&&e.key.length===1&&p(e.key),!(t&&e.key===` `)&&uc.includes(e.key)&&(h(),e.preventDefault())})})})});Tc.displayName=wc;var Ec=`SelectValue`,Dc=H.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,children:a,placeholder:o=``,...s}=e,c=bc(Ec,n),{onValueNodeHasChildrenChange:l}=c,u=a!==void 0,f=E(t,c.onValueNodeChange);return P(()=>{l(u)},[l,u]),(0,W.jsx)(d.span,{...s,ref:f,style:{pointerEvents:`none`},children:yl(c.value)?(0,W.jsx)(W.Fragment,{children:o}):a})});Dc.displayName=Ec;var Oc=`SelectIcon`,kc=H.forwardRef((e,t)=>{let{__scopeSelect:n,children:r,...i}=e;return(0,W.jsx)(d.span,{"aria-hidden":!0,...i,ref:t,children:r||`▼`})});kc.displayName=Oc;var Ac=`SelectPortal`,jc=e=>(0,W.jsx)(N,{asChild:!0,...e});jc.displayName=Ac;var Mc=`SelectContent`,Nc=H.forwardRef((e,t)=>{let n=bc(Mc,e.__scopeSelect),[r,i]=H.useState();if(P(()=>{i(new DocumentFragment)},[]),!n.open){let t=r;return t?sn.createPortal((0,W.jsx)(Fc,{scope:e.__scopeSelect,children:(0,W.jsx)(pc.Slot,{scope:e.__scopeSelect,children:(0,W.jsx)(`div`,{children:e.children})})}),t):null}return(0,W.jsx)(zc,{...e,ref:t})});Nc.displayName=Mc;var Pc=10,[Fc,Ic]=gc(Mc),Lc=`SelectContentImpl`,Rc=p(`SelectContent.RemoveScroll`),zc=H.forwardRef((e,t)=>{let{__scopeSelect:n,position:r=`item-aligned`,onCloseAutoFocus:i,onEscapeKeyDown:a,onPointerDownOutside:o,side:s,sideOffset:c,align:l,alignOffset:u,arrowPadding:d,collisionBoundary:f,collisionPadding:p,sticky:m,hideWhenDetached:h,avoidCollisions:g,..._}=e,v=bc(Mc,n),[y,C]=H.useState(null),[w,T]=H.useState(null),O=E(t,e=>C(e)),[k,A]=H.useState(null),[j,ee]=H.useState(null),M=mc(n),[N,P]=H.useState(!1),F=H.useRef(!1);H.useEffect(()=>{if(y)return te(y)},[y]),D();let ne=H.useCallback(e=>{let[t,...n]=M().map(e=>e.ref.current),[r]=n.slice(-1),i=document.activeElement;for(let n of e)if(n===i||(n?.scrollIntoView({block:`nearest`}),n===t&&w&&(w.scrollTop=0),n===r&&w&&(w.scrollTop=w.scrollHeight),n?.focus(),document.activeElement!==i))return},[M,w]),re=H.useCallback(()=>ne([k,y]),[ne,k,y]);H.useEffect(()=>{N&&re()},[N,re]);let{onOpenChange:L,triggerPointerDownPosRef:R}=v;H.useEffect(()=>{if(y){let e={x:0,y:0},t=t=>{e={x:Math.abs(Math.round(t.pageX)-(R.current?.x??0)),y:Math.abs(Math.round(t.pageY)-(R.current?.y??0))}},n=n=>{e.x<=10&&e.y<=10?n.preventDefault():y.contains(n.target)||L(!1),document.removeEventListener(`pointermove`,t),R.current=null};return R.current!==null&&(document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n,{capture:!0,once:!0})),()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n,{capture:!0})}}},[y,L,R]),H.useEffect(()=>{let e=()=>L(!1);return window.addEventListener(`blur`,e),window.addEventListener(`resize`,e),()=>{window.removeEventListener(`blur`,e),window.removeEventListener(`resize`,e)}},[L]);let[ie,ae]=bl(e=>{let t=M().filter(e=>!e.disabled),n=xl(t,e,t.find(e=>e.ref.current===document.activeElement));n&&setTimeout(()=>n.ref.current.focus())}),z=H.useCallback((e,t,n)=>{let r=!F.current&&!n;(v.value!==void 0&&v.value===t||r)&&(A(e),r&&(F.current=!0))},[v.value]),oe=H.useCallback(()=>y?.focus(),[y]),B=H.useCallback((e,t,n)=>{let r=!F.current&&!n;(v.value!==void 0&&v.value===t||r)&&ee(e)},[v.value]),se=r===`popper`?Uc:Vc,ce=se===Uc?{side:s,sideOffset:c,align:l,alignOffset:u,arrowPadding:d,collisionBoundary:f,collisionPadding:p,sticky:m,hideWhenDetached:h,avoidCollisions:g}:{};return(0,W.jsx)(Fc,{scope:n,content:y,viewport:w,onViewportChange:T,itemRefCallback:z,selectedItem:k,onItemLeave:oe,itemTextRefCallback:B,focusSelectedItem:re,selectedItemText:j,position:r,isPositioned:N,searchRef:ie,children:(0,W.jsx)(b,{as:Rc,allowPinchZoom:!0,children:(0,W.jsx)(x,{asChild:!0,trapped:v.open,onMountAutoFocus:e=>{e.preventDefault()},onUnmountAutoFocus:I(i,e=>{v.trigger?.focus({preventScroll:!0}),e.preventDefault()}),children:(0,W.jsx)(S,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:()=>v.onOpenChange(!1),children:(0,W.jsx)(se,{role:`listbox`,id:v.contentId,"data-state":v.open?`open`:`closed`,dir:v.dir,onContextMenu:e=>e.preventDefault(),..._,...ce,onPlaced:()=>P(!0),ref:O,style:{display:`flex`,flexDirection:`column`,outline:`none`,..._.style},onKeyDown:I(_.onKeyDown,e=>{let t=e.ctrlKey||e.altKey||e.metaKey;if(e.key===`Tab`&&e.preventDefault(),!t&&e.key.length===1&&ae(e.key),[`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key)){let t=M().filter(e=>!e.disabled).map(e=>e.ref.current);if([`ArrowUp`,`End`].includes(e.key)&&(t=t.slice().reverse()),[`ArrowUp`,`ArrowDown`].includes(e.key)){let n=e.target,r=t.indexOf(n);t=t.slice(r+1)}setTimeout(()=>ne(t)),e.preventDefault()}})})})})})})});zc.displayName=Lc;var Bc=`SelectItemAlignedPosition`,Vc=H.forwardRef((e,t)=>{let{__scopeSelect:n,onPlaced:r,...i}=e,a=bc(Mc,n),o=Ic(Mc,n),[s,c]=H.useState(null),[l,u]=H.useState(null),f=E(t,e=>u(e)),p=mc(n),m=H.useRef(!1),h=H.useRef(!0),{viewport:g,selectedItem:_,selectedItemText:v,focusSelectedItem:y}=o,b=H.useCallback(()=>{if(a.trigger&&a.valueNode&&s&&l&&g&&_&&v){let e=a.trigger.getBoundingClientRect(),t=l.getBoundingClientRect(),n=a.valueNode.getBoundingClientRect(),i=v.getBoundingClientRect();if(a.dir!==`rtl`){let r=i.left-t.left,a=n.left-r,o=e.left-a,c=e.width+o,l=Math.max(c,t.width),u=window.innerWidth-Pc,d=ws(a,[Pc,Math.max(Pc,u-l)]);s.style.minWidth=c+`px`,s.style.left=d+`px`}else{let r=t.right-i.right,a=window.innerWidth-n.right-r,o=window.innerWidth-e.right-a,c=e.width+o,l=Math.max(c,t.width),u=window.innerWidth-Pc,d=ws(a,[Pc,Math.max(Pc,u-l)]);s.style.minWidth=c+`px`,s.style.right=d+`px`}let o=p(),c=window.innerHeight-Pc*2,u=g.scrollHeight,d=window.getComputedStyle(l),f=parseInt(d.borderTopWidth,10),h=parseInt(d.paddingTop,10),y=parseInt(d.borderBottomWidth,10),b=parseInt(d.paddingBottom,10),x=f+h+u+b+y,S=Math.min(_.offsetHeight*5,x),C=window.getComputedStyle(g),w=parseInt(C.paddingTop,10),T=parseInt(C.paddingBottom,10),E=e.top+e.height/2-Pc,D=c-E,O=_.offsetHeight/2,k=_.offsetTop+O,A=f+h+k,j=x-A;if(A<=E){let e=o.length>0&&_===o[o.length-1].ref.current;s.style.bottom=`0px`;let t=l.clientHeight-g.offsetTop-g.offsetHeight,n=A+Math.max(D,O+(e?T:0)+t+y);s.style.height=n+`px`}else{let e=o.length>0&&_===o[0].ref.current;s.style.top=`0px`;let t=Math.max(E,f+g.offsetTop+(e?w:0)+O)+j;s.style.height=t+`px`,g.scrollTop=A-E+g.offsetTop}s.style.margin=`${Pc}px 0`,s.style.minHeight=S+`px`,s.style.maxHeight=c+`px`,r?.(),requestAnimationFrame(()=>m.current=!0)}},[p,a.trigger,a.valueNode,s,l,g,_,v,a.dir,r]);P(()=>b(),[b]);let[x,S]=H.useState();return P(()=>{l&&S(window.getComputedStyle(l).zIndex)},[l]),(0,W.jsx)(Wc,{scope:n,contentWrapper:s,shouldExpandOnScrollRef:m,onScrollButtonChange:H.useCallback(e=>{e&&h.current===!0&&(b(),y?.(),h.current=!1)},[b,y]),children:(0,W.jsx)(`div`,{ref:c,style:{display:`flex`,flexDirection:`column`,position:`fixed`,zIndex:x},children:(0,W.jsx)(d.div,{...i,ref:f,style:{boxSizing:`border-box`,maxHeight:`100%`,...i.style}})})})});Vc.displayName=Bc;var Hc=`SelectPopperPosition`,Uc=H.forwardRef((e,t)=>{let{__scopeSelect:n,align:r=`start`,collisionPadding:i=Pc,...a}=e,o=vc(n);return(0,W.jsx)(ee,{...o,...a,ref:t,align:r,collisionPadding:i,style:{boxSizing:`border-box`,...a.style,"--radix-select-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-select-content-available-width":`var(--radix-popper-available-width)`,"--radix-select-content-available-height":`var(--radix-popper-available-height)`,"--radix-select-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-select-trigger-height":`var(--radix-popper-anchor-height)`}})});Uc.displayName=Hc;var[Wc,Gc]=gc(Mc,{}),Kc=`SelectViewport`,qc=H.forwardRef((e,t)=>{let{__scopeSelect:n,nonce:r,...i}=e,a=Ic(Kc,n),o=Gc(Kc,n),s=E(t,a.onViewportChange),c=H.useRef(0);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`style`,{dangerouslySetInnerHTML:{__html:`[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`},nonce:r}),(0,W.jsx)(pc.Slot,{scope:n,children:(0,W.jsx)(d.div,{"data-radix-select-viewport":``,role:`presentation`,...i,ref:s,style:{position:`relative`,flex:1,overflow:`hidden auto`,...i.style},onScroll:I(i.onScroll,e=>{let t=e.currentTarget,{contentWrapper:n,shouldExpandOnScrollRef:r}=o;if(r?.current&&n){let e=Math.abs(c.current-t.scrollTop);if(e>0){let r=window.innerHeight-Pc*2,i=parseFloat(n.style.minHeight),a=parseFloat(n.style.height),o=Math.max(i,a);if(o<r){let i=o+e,a=Math.min(r,i),s=i-a;n.style.height=a+`px`,n.style.bottom===`0px`&&(t.scrollTop=s>0?s:0,n.style.justifyContent=`flex-end`)}}}c.current=t.scrollTop})})})]})});qc.displayName=Kc;var Jc=`SelectGroup`,[Yc,Xc]=gc(Jc),Zc=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=w();return(0,W.jsx)(Yc,{scope:n,id:i,children:(0,W.jsx)(d.div,{role:`group`,"aria-labelledby":i,...r,ref:t})})});Zc.displayName=Jc;var Qc=`SelectLabel`,$c=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=Xc(Qc,n);return(0,W.jsx)(d.div,{id:i.id,...r,ref:t})});$c.displayName=Qc;var el=`SelectItem`,[tl,nl]=gc(el),rl=H.forwardRef((e,t)=>{let{__scopeSelect:n,value:r,disabled:i=!1,textValue:a,...o}=e,s=bc(el,n),c=Ic(el,n),l=s.value===r,[u,f]=H.useState(a??``),[p,m]=H.useState(!1),h=E(t,e=>c.itemRefCallback?.(e,r,i)),g=w(),_=H.useRef(`touch`),v=()=>{i||(s.onValueChange(r),s.onOpenChange(!1))};if(r===``)throw Error(`A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.`);return(0,W.jsx)(tl,{scope:n,value:r,disabled:i,textId:g,isSelected:l,onItemTextChange:H.useCallback(e=>{f(t=>t||(e?.textContent??``).trim())},[]),children:(0,W.jsx)(pc.ItemSlot,{scope:n,value:r,disabled:i,textValue:u,children:(0,W.jsx)(d.div,{role:`option`,"aria-labelledby":g,"data-highlighted":p?``:void 0,"aria-selected":l&&p,"data-state":l?`checked`:`unchecked`,"aria-disabled":i||void 0,"data-disabled":i?``:void 0,tabIndex:i?void 0:-1,...o,ref:h,onFocus:I(o.onFocus,()=>m(!0)),onBlur:I(o.onBlur,()=>m(!1)),onClick:I(o.onClick,()=>{_.current!==`mouse`&&v()}),onPointerUp:I(o.onPointerUp,()=>{_.current===`mouse`&&v()}),onPointerDown:I(o.onPointerDown,e=>{_.current=e.pointerType}),onPointerMove:I(o.onPointerMove,e=>{_.current=e.pointerType,i?c.onItemLeave?.():_.current===`mouse`&&e.currentTarget.focus({preventScroll:!0})}),onPointerLeave:I(o.onPointerLeave,e=>{e.currentTarget===document.activeElement&&c.onItemLeave?.()}),onKeyDown:I(o.onKeyDown,e=>{c.searchRef?.current!==``&&e.key===` `||(dc.includes(e.key)&&v(),e.key===` `&&e.preventDefault())})})})})});rl.displayName=el;var il=`SelectItemText`,al=H.forwardRef((e,t)=>{let{__scopeSelect:n,className:r,style:i,...a}=e,o=bc(il,n),s=Ic(il,n),c=nl(il,n),l=Sc(il,n),[u,f]=H.useState(null),p=E(t,e=>f(e),c.onItemTextChange,e=>s.itemTextRefCallback?.(e,c.value,c.disabled)),m=u?.textContent,h=H.useMemo(()=>(0,W.jsx)(`option`,{value:c.value,disabled:c.disabled,children:m},c.value),[c.disabled,c.value,m]),{onNativeOptionAdd:g,onNativeOptionRemove:_}=l;return P(()=>(g(h),()=>_(h)),[g,_,h]),(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(d.span,{id:c.textId,...a,ref:p}),c.isSelected&&o.valueNode&&!o.valueNodeHasChildren?sn.createPortal(a.children,o.valueNode):null]})});al.displayName=il;var ol=`SelectItemIndicator`,sl=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return nl(ol,n).isSelected?(0,W.jsx)(d.span,{"aria-hidden":!0,...r,ref:t}):null});sl.displayName=ol;var cl=`SelectScrollUpButton`,ll=H.forwardRef((e,t)=>{let n=Ic(cl,e.__scopeSelect),r=Gc(cl,e.__scopeSelect),[i,a]=H.useState(!1),o=E(t,r.onScrollButtonChange);return P(()=>{if(n.viewport&&n.isPositioned){let e=function(){a(t.scrollTop>0)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,W.jsx)(fl,{...e,ref:o,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop-=t.offsetHeight)}}):null});ll.displayName=cl;var ul=`SelectScrollDownButton`,dl=H.forwardRef((e,t)=>{let n=Ic(ul,e.__scopeSelect),r=Gc(ul,e.__scopeSelect),[i,a]=H.useState(!1),o=E(t,r.onScrollButtonChange);return P(()=>{if(n.viewport&&n.isPositioned){let e=function(){let e=t.scrollHeight-t.clientHeight;a(Math.ceil(t.scrollTop)<e)},t=n.viewport;return e(),t.addEventListener(`scroll`,e),()=>t.removeEventListener(`scroll`,e)}},[n.viewport,n.isPositioned]),i?(0,W.jsx)(fl,{...e,ref:o,onAutoScroll:()=>{let{viewport:e,selectedItem:t}=n;e&&t&&(e.scrollTop+=t.offsetHeight)}}):null});dl.displayName=ul;var fl=H.forwardRef((e,t)=>{let{__scopeSelect:n,onAutoScroll:r,...i}=e,a=Ic(`SelectScrollButton`,n),o=H.useRef(null),s=mc(n),c=H.useCallback(()=>{o.current!==null&&(window.clearInterval(o.current),o.current=null)},[]);return H.useEffect(()=>()=>c(),[c]),P(()=>{s().find(e=>e.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:`nearest`})},[s]),(0,W.jsx)(d.div,{"aria-hidden":!0,...i,ref:t,style:{flexShrink:0,...i.style},onPointerDown:I(i.onPointerDown,()=>{o.current===null&&(o.current=window.setInterval(r,50))}),onPointerMove:I(i.onPointerMove,()=>{a.onItemLeave?.(),o.current===null&&(o.current=window.setInterval(r,50))}),onPointerLeave:I(i.onPointerLeave,()=>{c()})})}),pl=`SelectSeparator`,ml=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e;return(0,W.jsx)(d.div,{"aria-hidden":!0,...r,ref:t})});ml.displayName=pl;var hl=`SelectArrow`,gl=H.forwardRef((e,t)=>{let{__scopeSelect:n,...r}=e,i=vc(n),a=bc(hl,n),o=Ic(hl,n);return a.open&&o.position===`popper`?(0,W.jsx)(k,{...i,...r,ref:t}):null});gl.displayName=hl;var _l=`SelectBubbleInput`,vl=H.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{let i=H.useRef(null),a=E(r,i),o=Rr(t);return H.useEffect(()=>{let e=i.current;if(!e)return;let n=window.HTMLSelectElement.prototype,r=Object.getOwnPropertyDescriptor(n,`value`).set;if(o!==t&&r){let n=new Event(`change`,{bubbles:!0});r.call(e,t),e.dispatchEvent(n)}},[o,t]),(0,W.jsx)(d.select,{...n,style:{...Kn,...n.style},ref:a,defaultValue:t})});vl.displayName=_l;function yl(e){return e===``||e===void 0}function bl(e){let t=j(e),n=H.useRef(``),r=H.useRef(0),i=H.useCallback(e=>{let i=n.current+e;t(i),(function e(t){n.current=t,window.clearTimeout(r.current),t!==``&&(r.current=window.setTimeout(()=>e(``),1e3))})(i)},[t]),a=H.useCallback(()=>{n.current=``,window.clearTimeout(r.current)},[]);return H.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,i,a]}function xl(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=Sl(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.textValue.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function Sl(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Cl=Cc,wl=Tc,Tl=Dc,El=kc,Dl=jc,Ol=Nc,kl=qc,Al=rl,jl=al,Ml=sl,Nl=ll,Pl=dl,Fl=`Separator`,Il=`horizontal`,Ll=[`horizontal`,`vertical`],q=H.forwardRef((e,t)=>{let{decorative:n,orientation:r=Il,...i}=e,a=Rl(r)?r:Il,o=a===`vertical`?a:void 0,s=n?{role:`none`}:{"aria-orientation":o,role:`separator`};return(0,W.jsx)(d.div,{"data-orientation":a,...s,...i,ref:t})});q.displayName=Fl;function Rl(e){return Ll.includes(e)}var J=q,Y=`Switch`,[zl,Bl]=h(Y),[Vl,Hl]=zl(Y),Ul=H.forwardRef((e,t)=>{let{__scopeSwitch:n,name:r,checked:i,defaultChecked:a,required:o,disabled:s,value:c=`on`,onCheckedChange:l,form:u,...f}=e,[p,m]=H.useState(null),h=E(t,e=>m(e)),g=H.useRef(!1),v=p?u||!!p.closest(`form`):!0,[y,b]=_({prop:i,defaultProp:a??!1,onChange:l,caller:Y});return(0,W.jsxs)(Vl,{scope:n,checked:y,disabled:s,children:[(0,W.jsx)(d.button,{type:`button`,role:`switch`,"aria-checked":y,"aria-required":o,"data-state":Jl(y),"data-disabled":s?``:void 0,disabled:s,value:c,...f,ref:h,onClick:I(e.onClick,e=>{b(e=>!e),v&&(g.current=e.isPropagationStopped(),g.current||e.stopPropagation())})}),v&&(0,W.jsx)(ql,{control:p,bubbles:!g.current,name:r,value:c,checked:y,required:o,disabled:s,form:u,style:{transform:`translateX(-100%)`}})]})});Ul.displayName=Y;var Wl=`SwitchThumb`,Gl=H.forwardRef((e,t)=>{let{__scopeSwitch:n,...r}=e,i=Hl(Wl,n);return(0,W.jsx)(d.span,{"data-state":Jl(i.checked),"data-disabled":i.disabled?``:void 0,...r,ref:t})});Gl.displayName=Wl;var Kl=`SwitchBubbleInput`,ql=H.forwardRef(({__scopeSwitch:e,control:t,checked:n,bubbles:r=!0,...i},a)=>{let o=H.useRef(null),s=E(o,a),c=Rr(n),l=A(t);return H.useEffect(()=>{let e=o.current;if(!e)return;let t=window.HTMLInputElement.prototype,i=Object.getOwnPropertyDescriptor(t,`checked`).set;if(c!==n&&i){let t=new Event(`click`,{bubbles:r});i.call(e,n),e.dispatchEvent(t)}},[c,n,r]),(0,W.jsx)(`input`,{type:`checkbox`,"aria-hidden":!0,defaultChecked:n,...i,tabIndex:-1,ref:s,style:{...i.style,...l,position:`absolute`,pointerEvents:`none`,opacity:0,margin:0}})});ql.displayName=Kl;function Jl(e){return e?`checked`:`unchecked`}var Yl=Ul,Xl=Gl,[Zl,Ql]=h(`Tooltip`,[v]),$l=v(),eu=`TooltipProvider`,tu=700,nu=`tooltip.open`,[ru,iu]=Zl(eu),au=e=>{let{__scopeTooltip:t,delayDuration:n=tu,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=H.useRef(!0),s=H.useRef(!1),c=H.useRef(0);return H.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,W.jsx)(ru,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:H.useCallback(()=>{window.clearTimeout(c.current),o.current=!1},[]),onClose:H.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:H.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})};au.displayName=eu;var ou=`Tooltip`,[su,cu]=Zl(ou),lu=e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,c=iu(ou,e.__scopeTooltip),l=$l(t),[u,d]=H.useState(null),f=w(),p=H.useRef(0),m=o??c.disableHoverableContent,h=s??c.delayDuration,g=H.useRef(!1),[v,y]=_({prop:r,defaultProp:i??!1,onChange:e=>{e?(c.onOpen(),document.dispatchEvent(new CustomEvent(nu))):c.onClose(),a?.(e)},caller:ou}),b=H.useMemo(()=>v?g.current?`delayed-open`:`instant-open`:`closed`,[v]),x=H.useCallback(()=>{window.clearTimeout(p.current),p.current=0,g.current=!1,y(!0)},[y]),S=H.useCallback(()=>{window.clearTimeout(p.current),p.current=0,y(!1)},[y]),C=H.useCallback(()=>{window.clearTimeout(p.current),p.current=window.setTimeout(()=>{g.current=!0,y(!0),p.current=0},h)},[h,y]);return H.useEffect(()=>()=>{p.current&&=(window.clearTimeout(p.current),0)},[]),(0,W.jsx)(T,{...l,children:(0,W.jsx)(su,{scope:t,contentId:f,open:v,stateAttribute:b,trigger:u,onTriggerChange:d,onTriggerEnter:H.useCallback(()=>{c.isOpenDelayedRef.current?C():x()},[c.isOpenDelayedRef,C,x]),onTriggerLeave:H.useCallback(()=>{m?S():(window.clearTimeout(p.current),p.current=0)},[S,m]),onOpen:x,onClose:S,disableHoverableContent:m,children:n})})};lu.displayName=ou;var uu=`TooltipTrigger`,du=H.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=cu(uu,n),a=iu(uu,n),o=$l(n),s=E(t,H.useRef(null),i.onTriggerChange),c=H.useRef(!1),l=H.useRef(!1),u=H.useCallback(()=>c.current=!1,[]);return H.useEffect(()=>()=>document.removeEventListener(`pointerup`,u),[u]),(0,W.jsx)(M,{asChild:!0,...o,children:(0,W.jsx)(d.button,{"aria-describedby":i.open?i.contentId:void 0,"data-state":i.stateAttribute,...r,ref:s,onPointerMove:I(e.onPointerMove,e=>{e.pointerType!==`touch`&&!l.current&&!a.isPointerInTransitRef.current&&(i.onTriggerEnter(),l.current=!0)}),onPointerLeave:I(e.onPointerLeave,()=>{i.onTriggerLeave(),l.current=!1}),onPointerDown:I(e.onPointerDown,()=>{i.open&&i.onClose(),c.current=!0,document.addEventListener(`pointerup`,u,{once:!0})}),onFocus:I(e.onFocus,()=>{c.current||i.onOpen()}),onBlur:I(e.onBlur,i.onClose),onClick:I(e.onClick,i.onClose)})})});du.displayName=uu;var fu=`TooltipPortal`,[pu,mu]=Zl(fu,{forceMount:void 0}),hu=e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=cu(fu,t);return(0,W.jsx)(pu,{scope:t,forceMount:n,children:(0,W.jsx)(C,{present:n||a.open,children:(0,W.jsx)(N,{asChild:!0,container:i,children:r})})})};hu.displayName=fu;var gu=`TooltipContent`,_u=H.forwardRef((e,t)=>{let n=mu(gu,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=cu(gu,e.__scopeTooltip);return(0,W.jsx)(C,{present:r||o.open,children:o.disableHoverableContent?(0,W.jsx)(Su,{side:i,...a,ref:t}):(0,W.jsx)(vu,{side:i,...a,ref:t})})}),vu=H.forwardRef((e,t)=>{let n=cu(gu,e.__scopeTooltip),r=iu(gu,e.__scopeTooltip),i=H.useRef(null),a=E(t,i),[o,s]=H.useState(null),{trigger:c,onClose:l}=n,u=i.current,{onPointerInTransitChange:d}=r,f=H.useCallback(()=>{s(null),d(!1)},[d]),p=H.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=Eu(r,Tu(r,n.getBoundingClientRect())),a=Du(t.getBoundingClientRect());s(ku([...i,...a])),d(!0)},[d]);return H.useEffect(()=>()=>f(),[f]),H.useEffect(()=>{if(c&&u){let e=e=>p(e,u),t=e=>p(e,c);return c.addEventListener(`pointerleave`,e),u.addEventListener(`pointerleave`,t),()=>{c.removeEventListener(`pointerleave`,e),u.removeEventListener(`pointerleave`,t)}}},[c,u,p,f]),H.useEffect(()=>{if(o){let e=e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=c?.contains(t)||u?.contains(t),i=!Ou(n,o);r?f():i&&(f(),l())};return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[c,u,o,l,f]),(0,W.jsx)(Su,{...e,ref:a})}),[yu,bu]=Zl(ou,{isInside:!1}),xu=f(`TooltipContent`),Su=H.forwardRef((e,t)=>{let{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:a,onPointerDownOutside:o,...s}=e,c=cu(gu,n),l=$l(n),{onClose:u}=c;return H.useEffect(()=>(document.addEventListener(nu,u),()=>document.removeEventListener(nu,u)),[u]),H.useEffect(()=>{if(c.trigger){let e=e=>{e.target?.contains(c.trigger)&&u()};return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[c.trigger,u]),(0,W.jsx)(S,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:u,children:(0,W.jsxs)(ee,{"data-state":c.stateAttribute,...l,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,W.jsx)(xu,{children:r}),(0,W.jsx)(yu,{scope:n,isInside:!0,children:(0,W.jsx)(Yn,{id:c.contentId,role:`tooltip`,children:i||r})})]})})});_u.displayName=gu;var Cu=`TooltipArrow`,wu=H.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=$l(n);return bu(Cu,n).isInside?null:(0,W.jsx)(k,{...i,...r,ref:t})});wu.displayName=Cu;function Tu(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}function Eu(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function Du(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}function Ou(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function ku(e){let t=e.slice();return t.sort((e,t)=>e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:e.y>t.y?1:0),Au(t)}function Au(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var ju=au,Mu=lu,Nu=du,Pu=hu,Fu=_u,Iu=wu;function Lu({delayDuration:e=0,...t}){return(0,W.jsx)(ju,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function Ru({...e}){return(0,W.jsx)(Mu,{"data-slot":`tooltip`,...e})}function zu({...e}){return(0,W.jsx)(Nu,{"data-slot":`tooltip-trigger`,...e})}function Bu({className:e,sideOffset:t=0,children:n,...r}){return(0,W.jsx)(Pu,{children:(0,W.jsxs)(Fu,{"data-slot":`tooltip-content`,sideOffset:t,className:L(`z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95`,e),...r,children:[n,(0,W.jsx)(Iu,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}function Vu(e,t){let n=getComputedStyle(e);return t*parseFloat(n.fontSize)}function Hu(e,t){let n=getComputedStyle(e.ownerDocument.body);return t*parseFloat(n.fontSize)}function Uu(e){return e/100*window.innerHeight}function Wu(e){return e/100*window.innerWidth}function Gu(e){switch(typeof e){case`number`:return[e,`px`];case`string`:{let t=parseFloat(e);return e.endsWith(`%`)?[t,`%`]:e.endsWith(`px`)?[t,`px`]:e.endsWith(`rem`)?[t,`rem`]:e.endsWith(`em`)?[t,`em`]:e.endsWith(`vh`)?[t,`vh`]:e.endsWith(`vw`)?[t,`vw`]:[t,`%`]}}}function X({groupSize:e,panelElement:t,styleProp:n}){let r,[i,a]=Gu(n);switch(a){case`%`:r=i/100*e;break;case`px`:r=i;break;case`rem`:r=Hu(t,i);break;case`em`:r=Vu(t,i);break;case`vh`:r=Uu(i);break;case`vw`:r=Wu(i);break}return r}function Ku(e){return parseFloat(e.toFixed(3))}function qu({group:e}){let{orientation:t,panels:n}=e;return n.reduce((e,n)=>(e+=t===`horizontal`?n.element.offsetWidth:n.element.offsetHeight,e),0)}function Ju(e){let{panels:t}=e,n=qu({group:e});return n===0?t.map(e=>({groupResizeBehavior:e.panelConstraints.groupResizeBehavior,collapsedSize:0,collapsible:e.panelConstraints.collapsible===!0,defaultSize:void 0,disabled:e.panelConstraints.disabled,minSize:0,maxSize:100,panelId:e.id})):t.map(e=>{let{element:t,panelConstraints:r}=e,i=0;r.collapsedSize!==void 0&&(i=Ku(X({groupSize:n,panelElement:t,styleProp:r.collapsedSize})/n*100));let a;r.defaultSize!==void 0&&(a=Ku(X({groupSize:n,panelElement:t,styleProp:r.defaultSize})/n*100));let o=0;r.minSize!==void 0&&(o=Ku(X({groupSize:n,panelElement:t,styleProp:r.minSize})/n*100));let s=100;return r.maxSize!==void 0&&(s=Ku(X({groupSize:n,panelElement:t,styleProp:r.maxSize})/n*100)),{groupResizeBehavior:r.groupResizeBehavior,collapsedSize:i,collapsible:r.collapsible===!0,defaultSize:a,disabled:r.disabled,minSize:o,maxSize:s,panelId:e.id}})}function Yu(e,t=`Assertion error`){if(!e)throw Error(t)}function Xu(e,t){return Array.from(t).sort(e===`horizontal`?Zu:Qu)}function Zu(e,t){let n=e.element.offsetLeft-t.element.offsetLeft;return n===0?e.element.offsetWidth-t.element.offsetWidth:n}function Qu(e,t){let n=e.element.offsetTop-t.element.offsetTop;return n===0?e.element.offsetHeight-t.element.offsetHeight:n}function $u(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.ELEMENT_NODE}function ed(e,t){return{x:e.x>=t.left&&e.x<=t.right?0:Math.min(Math.abs(e.x-t.left),Math.abs(e.x-t.right)),y:e.y>=t.top&&e.y<=t.bottom?0:Math.min(Math.abs(e.y-t.top),Math.abs(e.y-t.bottom))}}function td({orientation:e,rects:t,targetRect:n}){let r={x:n.x+n.width/2,y:n.y+n.height/2},i,a=Number.MAX_VALUE;for(let n of t){let{x:t,y:o}=ed(r,n),s=e===`horizontal`?t:o;s<a&&(a=s,i=n)}return Yu(i,`No rect found`),i}var nd;function rd(){return nd===void 0&&(nd=typeof matchMedia==`function`?!!matchMedia(`(pointer:coarse)`).matches:!1),nd}function id(e){let{element:t,orientation:n,panels:r,separators:i}=e,a=Xu(n,Array.from(t.children).filter($u).map(e=>({element:e}))).map(({element:e})=>e),o=[],s=!1,c=!1,l=-1,u=-1,d=0,f,p=[];{let e=-1;for(let t of a)t.hasAttribute(`data-panel`)&&(e++,t.ariaDisabled===null&&(d++,l===-1&&(l=e),u=e))}if(d>1){let t=-1;for(let d of a)if(d.hasAttribute(`data-panel`)){t++;let i=r.find(e=>e.element===d);if(i){if(f){let r=f.element.getBoundingClientRect(),a=d.getBoundingClientRect(),m;if(c){let e=n===`horizontal`?new DOMRect(r.right,r.top,0,r.height):new DOMRect(r.left,r.bottom,r.width,0),t=n===`horizontal`?new DOMRect(a.left,a.top,0,a.height):new DOMRect(a.left,a.top,a.width,0);switch(p.length){case 0:m=[e,t];break;case 1:{let i=p[0];m=[i,td({orientation:n,rects:[r,a],targetRect:i.element.getBoundingClientRect()})===r?t:e];break}default:m=p;break}}else m=p.length?p:[n===`horizontal`?new DOMRect(r.right,a.top,a.left-r.right,a.height):new DOMRect(a.left,r.bottom,a.width,a.top-r.bottom)];for(let n of m){let r=`width`in n?n:n.element.getBoundingClientRect(),a=rd()?e.resizeTargetMinimumSize.coarse:e.resizeTargetMinimumSize.fine;if(r.width<a){let e=a-r.width;r=new DOMRect(r.x-e/2,r.y,r.width+e,r.height)}if(r.height<a){let e=a-r.height;r=new DOMRect(r.x,r.y-e/2,r.width,r.height+e)}!s&&!(t<=l||t>u)&&o.push({group:e,groupSize:qu({group:e}),panels:[f,i],separator:`width`in n?void 0:n,rect:r}),s=!1}}c=!1,f=i,p=[]}}else if(d.hasAttribute(`data-separator`)){d.ariaDisabled!==null&&(s=!0);let e=i.find(e=>e.element===d);e?p.push(e):(f=void 0,p=[])}else c=!0}return o}var ad=class{#e={};addListener(e,t){let n=this.#e[e];return n===void 0?this.#e[e]=[t]:n.includes(t)||n.push(t),()=>{this.removeListener(e,t)}}emit(e,t){let n=this.#e[e];if(n!==void 0)if(n.length===1)n[0].call(null,t);else{let e=!1,r=null,i=Array.from(n);for(let n=0;n<i.length;n++){let a=i[n];try{a.call(null,t)}catch(t){r===null&&(e=!0,r=t)}}if(e)throw r}}removeAllListeners(){this.#e={}}removeListener(e,t){let n=this.#e[e];if(n!==void 0){let e=n.indexOf(t);e>=0&&n.splice(e,1)}}},od=new Map,sd=new ad;function cd(e){od=new Map(od),od.delete(e)}function ld(e,t){for(let[t]of od)if(t.id===e)return t}function ud(e,t){for(let[t,n]of od)if(t.id===e)return n;if(t)throw Error(`Could not find data for Group with id ${e}`)}function dd(){return od}function fd(e,t){return sd.addListener(`groupChange`,n=>{n.group.id===e&&t(n)})}function pd(e,t){let n=od.get(e);od=new Map(od),od.set(e,t),sd.emit(`groupChange`,{group:e,prev:n,next:t})}function md(e,t,n){let r,i={x:1/0,y:1/0};for(let a of t){let t=ed(n,a.rect);switch(e){case`horizontal`:t.x<=i.x&&(r=a,i=t);break;case`vertical`:t.y<=i.y&&(r=a,i=t);break}}return r?{distance:i,hitRegion:r}:void 0}function hd(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function gd(e,t){if(e===t)throw Error(`Cannot compare node with itself`);let n={a:xd(e),b:xd(t)},r;for(;n.a.at(-1)===n.b.at(-1);)r=n.a.pop(),n.b.pop();Yu(r,`Stacking order can only be calculated for elements with a common ancestor`);let i={a:Z(bd(n.a)),b:Z(bd(n.b))};if(i.a===i.b){let e=r.childNodes,t={a:n.a.at(-1),b:n.b.at(-1)},i=e.length;for(;i--;){let n=e[i];if(n===t.a)return 1;if(n===t.b)return-1}}return Math.sign(i.a-i.b)}var _d=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function vd(e){let t=getComputedStyle(Sd(e)??e).display;return t===`flex`||t===`inline-flex`}function yd(e){let t=getComputedStyle(e);return!!(t.position===`fixed`||t.zIndex!==`auto`&&(t.position!==`static`||vd(e))||+t.opacity<1||`transform`in t&&t.transform!==`none`||`webkitTransform`in t&&t.webkitTransform!==`none`||`mixBlendMode`in t&&t.mixBlendMode!==`normal`||`filter`in t&&t.filter!==`none`||`webkitFilter`in t&&t.webkitFilter!==`none`||`isolation`in t&&t.isolation===`isolate`||_d.test(t.willChange)||t.webkitOverflowScrolling===`touch`)}function bd(e){let t=e.length;for(;t--;){let n=e[t];if(Yu(n,`Missing node`),yd(n))return n}return null}function Z(e){return e&&Number(getComputedStyle(e).zIndex)||0}function xd(e){let t=[];for(;e;)t.push(e),e=Sd(e);return t}function Sd(e){let{parentNode:t}=e;return hd(t)?t.host:t}function Cd(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function wd({groupElement:e,hitRegion:t,pointerEventTarget:n}){if(!$u(n)||n.contains(e)||e.contains(n))return!0;if(gd(n,e)>0){let r=n;for(;r;){if(r.contains(e))return!0;if(Cd(r.getBoundingClientRect(),t))return!1;r=r.parentElement}}return!0}function Td(e,t){let n=[];return t.forEach((t,r)=>{if(r.disabled)return;let i=id(r),a=md(r.orientation,i,{x:e.clientX,y:e.clientY});a&&a.distance.x<=0&&a.distance.y<=0&&wd({groupElement:r.element,hitRegion:a.hitRegion.rect,pointerEventTarget:e.target})&&n.push(a.hitRegion)}),n}function Ed(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}function Dd(e,t,n=0){return Math.abs(Ku(e)-Ku(t))<=n}function Od(e,t){return Dd(e,t)?0:e>t?1:-1}function kd({overrideDisabledPanels:e,panelConstraints:t,prevSize:n,size:r}){let{collapsedSize:i=0,collapsible:a,disabled:o,maxSize:s=100,minSize:c=0}=t;if(o&&!e)return n;if(Od(r,c)<0)if(a){let e=(i+c)/2;r=Od(r,e)<0?i:c}else r=c;return r=Math.min(s,r),r=Ku(r),r}function Ad({delta:e,initialLayout:t,panelConstraints:n,pivotIndices:r,prevLayout:i,trigger:a}){if(Dd(e,0))return t;let o=a===`imperative-api`,s=Object.values(t),c=Object.values(i),l=[...s],[u,d]=r;Yu(u!=null,`Invalid first pivot index`),Yu(d!=null,`Invalid second pivot index`);let f=0;switch(a){case`keyboard`:{let t=e<0?d:u,r=n[t];Yu(r,`Panel constraints not found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(Yu(n!=null,`Previous layout not found for panel index ${t}`),Dd(n,i)){let t=o-n;Od(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?u:d,r=n[t];Yu(r,`No panel constraints found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(Yu(n!=null,`Previous layout not found for panel index ${t}`),Dd(n,o)){let t=n-i;Od(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}break;default:{let t=e<0?d:u,r=n[t];Yu(r,`Panel constraints not found for index ${t}`);let i=s[t],{collapsible:a,collapsedSize:o,minSize:c}=r;if(a&&Od(i,c)<0)if(e>0){let t=c-o,n=t/2;Od(i+e,c)<0&&(e=Od(e,n)<=0?0:t)}else{let t=c-o,n=100-t/2;Od(i-e,c)<0&&(e=Od(100+e,n)>0?0:-t)}break}}{let t=e<0?1:-1,r=e<0?d:u,i=0;for(;;){let e=s[r];Yu(e!=null,`Previous layout not found for panel index ${r}`);let a=kd({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:e,size:100})-e;if(i+=a,r+=t,r<0||r>=n.length)break}let a=Math.min(Math.abs(e),Math.abs(i));e=e<0?0-a:a}{let t=e<0?u:d;for(;t>=0&&t<n.length;){let r=Math.abs(e)-Math.abs(f),i=s[t];Yu(i!=null,`Previous layout not found for panel index ${t}`);let a=i-r,c=kd({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:i,size:a});if(!Dd(i,c)&&(f+=i-c,l[t]=c,f.toFixed(3).localeCompare(Math.abs(e).toFixed(3),void 0,{numeric:!0})>=0))break;e<0?t--:t++}}if(Ed(c,l))return i;{let t=e<0?d:u,r=s[t];Yu(r!=null,`Previous layout not found for panel index ${t}`);let i=r+f,a=kd({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:r,size:i});if(l[t]=a,!Dd(a,i)){let t=i-a,r=e<0?d:u;for(;r>=0&&r<n.length;){let i=l[r];Yu(i!=null,`Previous layout not found for panel index ${r}`);let a=i+t,s=kd({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:i,size:a});if(Dd(i,s)||(t-=s-i,l[r]=s),Dd(t,0))break;e>0?r--:r++}}}if(!Dd(Object.values(l).reduce((e,t)=>t+e,0),100,.1))return i;let p=Object.keys(i);return l.reduce((e,t,n)=>(e[p[n]]=t,e),{})}function jd(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(t[n]===void 0||Od(e[n],t[n])!==0)return!1;return!0}function Md({layout:e,panelConstraints:t}){let n=Object.values(e),r=[...n],i=r.reduce((e,t)=>e+t,0);if(r.length!==t.length)throw Error(`Invalid ${t.length} panel layout: ${r.map(e=>`${e}%`).join(`, `)}`);if(!Dd(i,100)&&r.length>0)for(let e=0;e<t.length;e++){let t=r[e];Yu(t!=null,`No layout data found for index ${e}`),r[e]=100/i*t}let a=0;for(let e=0;e<t.length;e++){let i=n[e];Yu(i!=null,`No layout data found for index ${e}`);let o=r[e];Yu(o!=null,`No layout data found for index ${e}`);let s=kd({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:i,size:o});o!=s&&(a+=o-s,r[e]=s)}if(!Dd(a,0))for(let e=0;e<t.length;e++){let n=r[e];Yu(n!=null,`No layout data found for index ${e}`);let i=n+a,o=kd({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:n,size:i});if(n!==o&&(a-=o-n,r[e]=o,Dd(a,0)))break}let o=Object.keys(e);return r.reduce((e,t,n)=>(e[o[n]]=t,e),{})}function Nd({groupId:e,panelId:t}){let n=()=>{let t=dd();for(let[n,{defaultLayoutDeferred:r,derivedPanelConstraints:i,layout:a,groupSize:o,separatorToPanels:s}]of t)if(n.id===e)return{defaultLayoutDeferred:r,derivedPanelConstraints:i,group:n,groupSize:o,layout:a,separatorToPanels:s};throw Error(`Group ${e} not found`)},r=()=>{let e=n().derivedPanelConstraints.find(e=>e.panelId===t);if(e!==void 0)return e;throw Error(`Panel constraints not found for Panel ${t}`)},i=()=>{let e=n().group.panels.find(e=>e.id===t);if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},a=()=>{let e=n().layout[t];if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},o=e=>{let r=a();if(e===r)return;let{defaultLayoutDeferred:i,derivedPanelConstraints:o,group:s,groupSize:c,layout:l,separatorToPanels:u}=n(),d=s.panels.findIndex(e=>e.id===t),f=d===s.panels.length-1,p=Md({layout:Ad({delta:f?r-e:e-r,initialLayout:l,panelConstraints:o,pivotIndices:f?[d-1,d]:[d,d+1],prevLayout:l,trigger:`imperative-api`}),panelConstraints:o});jd(l,p)||pd(s,{defaultLayoutDeferred:i,derivedPanelConstraints:o,groupSize:c,layout:p,separatorToPanels:u})};return{collapse:()=>{let{collapsible:e,collapsedSize:t}=r(),{mutableValues:n}=i(),s=a();e&&s!==t&&(n.expandToSize=s,o(t))},expand:()=>{let{collapsible:e,collapsedSize:t,minSize:n}=r(),{mutableValues:s}=i(),c=a();if(e&&c===t){let e=s.expandToSize??n;e===0&&(e=1),o(e)}},getSize:()=>{let{group:e}=n(),t=a(),{element:r}=i();return{asPercentage:t,inPixels:e.orientation===`horizontal`?r.offsetWidth:r.offsetHeight}},isCollapsed:()=>{let{collapsible:e,collapsedSize:t}=r(),n=a();return e&&Dd(t,n)},resize:e=>{let{group:t}=n(),{element:r}=i(),a=qu({group:t});o(Ku(X({groupSize:a,panelElement:r,styleProp:e})/a*100))}}}function Pd(e){e.defaultPrevented||Td(e,dd()).forEach(t=>{if(t.separator){let n=t.panels.find(e=>e.panelConstraints.defaultSize!==void 0);if(n){let r=n.panelConstraints.defaultSize,i=Nd({groupId:t.group.id,panelId:n.id});i&&r!==void 0&&(i.resize(r),e.preventDefault())}}})}function Fd(e){let t=dd();for(let[n]of t)if(n.separators.some(t=>t.element===e))return n;throw Error(`Could not find parent Group for separator element`)}function Id({groupId:e}){let t=()=>{let t=dd();for(let[n,r]of t)if(n.id===e)return{group:n,...r};throw Error(`Could not find Group with id "${e}"`)};return{getLayout(){let{defaultLayoutDeferred:e,layout:n}=t();return e?{}:n},setLayout(e){let{defaultLayoutDeferred:n,derivedPanelConstraints:r,group:i,groupSize:a,layout:o,separatorToPanels:s}=t(),c=Md({layout:e,panelConstraints:r});return n?o:(jd(o,c)||pd(i,{defaultLayoutDeferred:n,derivedPanelConstraints:r,groupSize:a,layout:c,separatorToPanels:s}),c)}}}function Ld(e,t){let n=Fd(e),r=ud(n.id,!0),i=n.separators.find(t=>t.element===e);Yu(i,`Matching separator not found`);let a=r.separatorToPanels.get(i);Yu(a,`Matching panels not found`);let o=a.map(e=>n.panels.indexOf(e)),s=Id({groupId:n.id}).getLayout(),c=Md({layout:Ad({delta:t,initialLayout:s,panelConstraints:r.derivedPanelConstraints,pivotIndices:o,prevLayout:s,trigger:`keyboard`}),panelConstraints:r.derivedPanelConstraints});jd(s,c)||pd(n,{defaultLayoutDeferred:r.defaultLayoutDeferred,derivedPanelConstraints:r.derivedPanelConstraints,groupSize:r.groupSize,layout:c,separatorToPanels:r.separatorToPanels})}function Rd(e){if(e.defaultPrevented)return;let t=e.currentTarget,n=Fd(t);if(!n.disabled)switch(e.key){case`ArrowDown`:e.preventDefault(),n.orientation===`vertical`&&Ld(t,5);break;case`ArrowLeft`:e.preventDefault(),n.orientation===`horizontal`&&Ld(t,-5);break;case`ArrowRight`:e.preventDefault(),n.orientation===`horizontal`&&Ld(t,5);break;case`ArrowUp`:e.preventDefault(),n.orientation===`vertical`&&Ld(t,-5);break;case`End`:e.preventDefault(),Ld(t,100);break;case`Enter`:{e.preventDefault();let n=Fd(t),{derivedPanelConstraints:r,layout:i,separatorToPanels:a}=ud(n.id,!0),o=n.separators.find(e=>e.element===t);Yu(o,`Matching separator not found`);let s=a.get(o);Yu(s,`Matching panels not found`);let c=s[0],l=r.find(e=>e.panelId===c.id);if(Yu(l,`Panel metadata not found`),l.collapsible){let e=i[c.id];Ld(t,(l.collapsedSize===e?n.mutableState.expandedPanelSizes[c.id]??l.minSize:l.collapsedSize)-e)}break}case`F6`:{e.preventDefault();let n=Fd(t).separators.map(e=>e.element),r=Array.from(n).findIndex(t=>t===e.currentTarget);Yu(r!==null,`Index not found`),n[e.shiftKey?r>0?r-1:n.length-1:r+1<n.length?r+1:0].focus({preventScroll:!0});break}case`Home`:e.preventDefault(),Ld(t,-100);break}}var zd={cursorFlags:0,state:`inactive`},Bd=new ad;function Vd(){return zd}function Hd(e){return Bd.addListener(`change`,e)}function Ud(e){let t=zd,n={...zd};n.cursorFlags=e,zd=n,Bd.emit(`change`,{prev:t,next:n})}function Wd(e){let t=zd;zd=e,Bd.emit(`change`,{prev:t,next:e})}function Gd(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=dd(),n=Td(e,t),r=new Map,i=!1;n.forEach(e=>{e.separator&&(i||(i=!0,e.separator.element.focus({preventScroll:!0})));let n=t.get(e.group);n&&r.set(e.group,n.layout)}),Wd({cursorFlags:0,hitRegions:n,initialLayoutMap:r,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:`active`}),n.length&&e.preventDefault()}var Kd=e=>e,qd=()=>{},Jd=1,Yd=2,Xd=4,Zd=8,Qd=3,$d=12,ef;function tf(){return ef===void 0&&(ef=!1,typeof window<`u`&&(window.navigator.userAgent.includes(`Chrome`)||window.navigator.userAgent.includes(`Firefox`))&&(ef=!0)),ef}function nf({cursorFlags:e,groups:t,state:n}){let r=0,i=0;switch(n){case`active`:case`hover`:t.forEach(e=>{if(!e.mutableState.disableCursor)switch(e.orientation){case`horizontal`:r++;break;case`vertical`:i++;break}})}if(!(r===0&&i===0)){switch(n){case`active`:if(e&&tf()){let t=(e&Jd)!==0,n=(e&Yd)!==0,r=(e&Xd)!==0,i=(e&Zd)!==0;if(t)return r?`se-resize`:i?`ne-resize`:`e-resize`;if(n)return r?`sw-resize`:i?`nw-resize`:`w-resize`;if(r)return`s-resize`;if(i)return`n-resize`}break}return tf()?r>0&&i>0?`move`:r>0?`ew-resize`:`ns-resize`:r>0&&i>0?`grab`:r>0?`col-resize`:`row-resize`}}var rf=new WeakMap;function af(e){if(e.defaultView===null||e.defaultView===void 0)return;let{prevStyle:t,styleSheet:n}=rf.get(e)??{};n===void 0&&(n=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets&&e.adoptedStyleSheets.push(n));let r=Vd();switch(r.state){case`active`:case`hover`:{let e=nf({cursorFlags:r.cursorFlags,groups:r.hitRegions.map(e=>e.group),state:r.state}),i=`*, *:hover {cursor: ${e} !important; }`;if(t===i)return;t=i,e?n.cssRules.length===0?n.insertRule(i):n.replaceSync(i):n.cssRules.length===1&&n.deleteRule(0);break}case`inactive`:t=void 0,n.cssRules.length===1&&n.deleteRule(0);break}rf.set(e,{prevStyle:t,styleSheet:n})}function of({document:e,event:t,hitRegions:n,initialLayoutMap:r,mountedGroups:i,pointerDownAtPoint:a,prevCursorFlags:o}){let s=0;n.forEach(e=>{let{group:n,groupSize:o}=e,{orientation:c,panels:l}=n,{disableCursor:u}=n.mutableState,d=0;d=a?c===`horizontal`?(t.clientX-a.x)/o*100:(t.clientY-a.y)/o*100:c===`horizontal`?t.clientX<0?-100:100:t.clientY<0?-100:100;let f=r.get(n),p=i.get(n);if(!f||!p)return;let{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:_,separatorToPanels:v}=p;if(h&&_&&v){let t=Ad({delta:d,initialLayout:f,panelConstraints:h,pivotIndices:e.panels.map(e=>l.indexOf(e)),prevLayout:_,trigger:`mouse-or-touch`});if(jd(t,_)){if(d!==0&&!u)switch(c){case`horizontal`:s|=d<0?Jd:Yd;break;case`vertical`:s|=d<0?Xd:Zd;break}}else pd(e.group,{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:t,separatorToPanels:v})}});let c=0;t.movementX===0?c|=o&Qd:c|=s&Qd,t.movementY===0?c|=o&$d:c|=s&$d,Ud(c),af(e)}function sf(e){let t=dd(),n=Vd();switch(n.state){case`active`:of({document:e.currentTarget,event:e,hitRegions:n.hitRegions,initialLayoutMap:n.initialLayoutMap,mountedGroups:t,prevCursorFlags:n.cursorFlags})}}function cf(e){if(e.defaultPrevented)return;let t=Vd(),n=dd();switch(t.state){case`active`:if(e.buttons===0){Wd({cursorFlags:0,state:`inactive`}),t.hitRegions.forEach(e=>{let t=ud(e.group.id,!0);pd(e.group,t)});return}of({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:n,pointerDownAtPoint:t.pointerDownAtPoint,prevCursorFlags:t.cursorFlags});break;default:{let r=Td(e,n);r.length===0?t.state!==`inactive`&&Wd({cursorFlags:0,state:`inactive`}):Wd({cursorFlags:0,hitRegions:r,state:`hover`}),af(e.currentTarget);break}}}function lf(e){if(e.relatedTarget instanceof HTMLIFrameElement)switch(Vd().state){case`hover`:Wd({cursorFlags:0,state:`inactive`})}}function uf(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=Vd();switch(t.state){case`active`:Wd({cursorFlags:0,state:`inactive`}),t.hitRegions.length>0&&(af(e.currentTarget),t.hitRegions.forEach(e=>{let t=ud(e.group.id,!0);pd(e.group,t)}),e.preventDefault())}}function df(e){let t=0,n=0,r={};for(let i of e)if(i.defaultSize!==void 0){t++;let e=Ku(i.defaultSize);n+=e,r[i.panelId]=e}else r[i.panelId]=void 0;let i=e.length-t;if(i!==0){let t=Ku((100-n)/i);for(let n of e)n.defaultSize===void 0&&(r[n.panelId]=t)}return r}function ff(e,t,n){if(!n[0])return;let r=e.panels.find(e=>e.element===t);if(!r||!r.onResize)return;let i=qu({group:e}),a=e.orientation===`horizontal`?r.element.offsetWidth:r.element.offsetHeight,o=r.mutableValues.prevSize,s={asPercentage:Ku(a/i*100),inPixels:a};r.mutableValues.prevSize=s,r.onResize(s,r.id,o)}function pf(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function mf({group:e,nextGroupSize:t,prevGroupSize:n,prevLayout:r}){if(n<=0||t<=0||n===t)return r;let i=0,a=0,o=!1,s=new Map,c=[];for(let l of e.panels){let e=r[l.id]??0;switch(l.panelConstraints.groupResizeBehavior){case`preserve-pixel-size`:{o=!0;let r=Ku(e/100*n/t*100);s.set(l.id,r),i+=r;break}default:c.push(l.id),a+=e;break}}if(!o||c.length===0)return r;let l=100-i,u={...r};if(s.forEach((e,t)=>{u[t]=e}),a>0)for(let e of c)u[e]=Ku((r[e]??0)/a*l);else{let e=Ku(l/c.length);for(let t of c)u[t]=e}return u}function hf(e,t){let n=e.map(e=>e.id),r=Object.keys(t);if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}var gf=new Map;function _f(e){let t=!0;Yu(e.element.ownerDocument.defaultView,`Cannot register an unmounted Group`);let n=e.element.ownerDocument.defaultView.ResizeObserver,r=new Set,i=new Set,a=new n(n=>{for(let r of n){let{borderBoxSize:n,target:i}=r;if(i===e.element){if(t){let t=qu({group:e});if(t===0)return;let n=ud(e.id);if(!n)return;let r=Ju(e),i=n.defaultLayoutDeferred?df(r):n.layout,a=Md({layout:mf({group:e,nextGroupSize:t,prevGroupSize:n.groupSize,prevLayout:i}),panelConstraints:r});if(!n.defaultLayoutDeferred&&jd(n.layout,a)&&pf(n.derivedPanelConstraints,r)&&n.groupSize===t)return;pd(e,{defaultLayoutDeferred:!1,derivedPanelConstraints:r,groupSize:t,layout:a,separatorToPanels:n.separatorToPanels})}}else ff(e,i,n)}});a.observe(e.element),e.panels.forEach(e=>{Yu(!r.has(e.id),`Panel ids must be unique; id "${e.id}" was used more than once`),r.add(e.id),e.onResize&&a.observe(e.element)});let o=qu({group:e}),s=Ju(e),c=e.panels.map(({id:e})=>e).join(`,`),l=e.mutableState.defaultLayout;l&&(hf(e.panels,l)||(l=void 0));let u=Md({layout:e.mutableState.layouts[c]??l??df(s),panelConstraints:s}),d=e.element.ownerDocument;gf.set(d,(gf.get(d)??0)+1);let f=new Map;return id(e).forEach(e=>{e.separator&&f.set(e.separator,e.panels)}),pd(e,{defaultLayoutDeferred:o===0,derivedPanelConstraints:s,groupSize:o,layout:u,separatorToPanels:f}),e.separators.forEach(e=>{Yu(!i.has(e.id),`Separator ids must be unique; id "${e.id}" was used more than once`),i.add(e.id),e.element.addEventListener(`keydown`,Rd)}),gf.get(d)===1&&(d.addEventListener(`dblclick`,Pd,!0),d.addEventListener(`pointerdown`,Gd,!0),d.addEventListener(`pointerleave`,sf),d.addEventListener(`pointermove`,cf),d.addEventListener(`pointerout`,lf),d.addEventListener(`pointerup`,uf,!0)),function(){t=!1,gf.set(d,Math.max(0,(gf.get(d)??0)-1)),cd(e),e.separators.forEach(e=>{e.element.removeEventListener(`keydown`,Rd)}),gf.get(d)||(d.removeEventListener(`dblclick`,Pd,!0),d.removeEventListener(`pointerdown`,Gd,!0),d.removeEventListener(`pointerleave`,sf),d.removeEventListener(`pointermove`,cf),d.removeEventListener(`pointerout`,lf),d.removeEventListener(`pointerup`,uf,!0)),a.disconnect()}}function vf(){let[e,t]=(0,H.useState)({});return[e,(0,H.useCallback)(()=>t({}),[])]}function yf(e){let t=(0,H.useId)();return`${e??t}`}var bf=typeof window<`u`?H.useLayoutEffect:H.useEffect;function xf(e){let t=(0,H.useRef)(e);return bf(()=>{t.current=e},[e]),(0,H.useCallback)((...e)=>t.current?.(...e),[t])}function Sf(...e){return xf(t=>{e.forEach(e=>{if(e)switch(typeof e){case`function`:e(t);break;case`object`:e.current=t;break}})})}function Cf(e){let t=(0,H.useRef)({...e});return bf(()=>{for(let n in e)t.current[n]=e[n]},[e]),t.current}var wf=(0,H.createContext)(null);function Tf(e,t){let n=(0,H.useRef)({getLayout:()=>({}),setLayout:Kd});(0,H.useImperativeHandle)(t,()=>n.current,[]),bf(()=>{Object.assign(n.current,Id({groupId:e}))})}function Ef({children:e,className:t,defaultLayout:n,disableCursor:r,disabled:i,elementRef:a,groupRef:o,id:s,onLayoutChange:c,onLayoutChanged:l,orientation:u=`horizontal`,resizeTargetMinimumSize:d={coarse:20,fine:10},style:f,...p}){let m=(0,H.useRef)({onLayoutChange:{},onLayoutChanged:{}}),h=xf(e=>{jd(m.current.onLayoutChange,e)||(m.current.onLayoutChange=e,c?.(e))}),g=xf(e=>{jd(m.current.onLayoutChanged,e)||(m.current.onLayoutChanged=e,l?.(e))}),_=yf(s),v=(0,H.useRef)(null),[y,b]=vf(),x=(0,H.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],resizeTargetMinimumSize:d,separators:[]}),S=Sf(v,a);Tf(_,o);let C=xf((e,t)=>{let r=Vd(),i=ld(e),a=ud(e);if(a){let e=!1;switch(r.state){case`active`:e=r.hitRegions.some(e=>e.group===i);break}return{flexGrow:a.layout[t]??1,pointerEvents:e?`none`:void 0}}return{flexGrow:n?.[t]??1}}),w=Cf({defaultLayout:n,disableCursor:r}),T=(0,H.useMemo)(()=>({get disableCursor(){return!!w.disableCursor},getPanelStyles:C,id:_,orientation:u,registerPanel:e=>{let t=x.current;return t.panels=Xu(u,[...t.panels,e]),b(),()=>{t.panels=t.panels.filter(t=>t!==e),b()}},registerSeparator:e=>{let t=x.current;return t.separators=Xu(u,[...t.separators,e]),b(),()=>{t.separators=t.separators.filter(t=>t!==e),b()}},togglePanelDisabled:(e,t)=>{let n=x.current.panels.find(t=>t.id===e);n&&(n.panelConstraints.disabled=t);let r=ld(_),i=ud(_);r&&i&&pd(r,{...i,derivedPanelConstraints:Ju(r)})},toggleSeparatorDisabled:(e,t)=>{let n=x.current.separators.find(t=>t.id===e);n&&(n.disabled=t)}}),[C,_,b,u,w]),E=(0,H.useRef)(null);return bf(()=>{let e=v.current;if(e===null)return;let t=x.current,n;if(w.defaultLayout!==void 0&&Object.keys(w.defaultLayout).length===t.panels.length){n={};for(let e of t.panels){let t=w.defaultLayout[e.id];t!==void 0&&(n[e.id]=t)}}let r={disabled:!!i,element:e,id:_,mutableState:{defaultLayout:n,disableCursor:!!w.disableCursor,expandedPanelSizes:x.current.lastExpandedPanelSizes,layouts:x.current.layouts},orientation:u,panels:t.panels,resizeTargetMinimumSize:t.resizeTargetMinimumSize,separators:t.separators};E.current=r;let a=_f(r),{defaultLayoutDeferred:o,derivedPanelConstraints:s,layout:c}=ud(r.id,!0);!o&&s.length>0&&(h(c),g(c));let l=fd(_,e=>{let{defaultLayoutDeferred:t,derivedPanelConstraints:n,layout:i}=e.next;if(t||n.length===0)return;let a=r.panels.map(({id:e})=>e).join(`,`);r.mutableState.layouts[a]=i,n.forEach(t=>{if(t.collapsible){let{layout:n}=e.prev??{};if(n){let e=Dd(t.collapsedSize,i[t.panelId]),a=Dd(t.collapsedSize,n[t.panelId]);e&&!a&&(r.mutableState.expandedPanelSizes[t.panelId]=n[t.panelId])}}});let o=Vd().state!==`active`;h(i),o&&g(i)});return()=>{E.current=null,a(),l()}},[i,_,g,h,u,y,w]),(0,H.useEffect)(()=>{let e=E.current;e&&(e.mutableState.defaultLayout=n,e.mutableState.disableCursor=!!r)}),(0,W.jsx)(wf.Provider,{value:T,children:(0,W.jsx)(`div`,{...p,className:t,"data-group":!0,"data-testid":_,id:_,ref:S,style:{height:`100%`,width:`100%`,overflow:`hidden`,...f,display:`flex`,flexDirection:u===`horizontal`?`row`:`column`,flexWrap:`nowrap`,touchAction:u===`horizontal`?`pan-y`:`pan-x`},children:e})})}Ef.displayName=`Group`;function Df(){let e=(0,H.useContext)(wf);return Yu(e,`Group Context not found; did you render a Panel or Separator outside of a Group?`),e}function Of(e,t){let{id:n}=Df(),r=(0,H.useRef)({collapse:qd,expand:qd,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:qd});(0,H.useImperativeHandle)(t,()=>r.current,[]),bf(()=>{Object.assign(r.current,Nd({groupId:n,panelId:e}))})}function kf({children:e,className:t,collapsedSize:n=`0%`,collapsible:r=!1,defaultSize:i,disabled:a,elementRef:o,groupResizeBehavior:s=`preserve-relative-size`,id:c,maxSize:l=`100%`,minSize:u=`0%`,onResize:d,panelRef:f,style:p,...m}){let h=!!c,g=yf(c),_=Cf({disabled:a}),v=(0,H.useRef)(null),y=Sf(v,o),{getPanelStyles:b,id:x,orientation:S,registerPanel:C,togglePanelDisabled:w}=Df(),T=d!==null,E=xf((e,t,n)=>{d?.(e,c,n)});bf(()=>{let e=v.current;if(e!==null)return C({element:e,id:g,idIsStable:h,mutableValues:{expandToSize:void 0,prevSize:void 0},onResize:T?E:void 0,panelConstraints:{groupResizeBehavior:s,collapsedSize:n,collapsible:r,defaultSize:i,disabled:_.disabled,maxSize:l,minSize:u}})},[s,n,r,i,T,g,h,l,u,E,C,_]),(0,H.useEffect)(()=>{w(g,!!a)},[a,g,w]),Of(g,f);let D=(0,H.useSyncExternalStore)(e=>fd(x,e),()=>JSON.stringify(b(x,g)),()=>JSON.stringify(b(x,g)));return(0,W.jsx)(`div`,{...m,"aria-disabled":a||void 0,"data-panel":!0,"data-testid":g,id:g,ref:y,style:{...Af,display:`flex`,flexBasis:0,flexShrink:1,overflow:`visible`,...JSON.parse(D)},children:(0,W.jsx)(`div`,{className:t,style:{maxHeight:`100%`,maxWidth:`100%`,flexGrow:1,overflow:`auto`,...p,touchAction:S===`horizontal`?`pan-y`:`pan-x`},children:e})})}kf.displayName=`Panel`;var Af={minHeight:0,maxHeight:`100%`,height:`auto`,minWidth:0,maxWidth:`100%`,width:`auto`,border:`none`,borderWidth:0,padding:0,margin:0};function jf({layout:e,panelConstraints:t,panelId:n,panelIndex:r}){let i,a,o=e[n],s=t.find(e=>e.panelId===n);if(s){let c=s.maxSize,l=s.collapsible?s.collapsedSize:s.minSize,u=[r,r+1];a=Md({layout:Ad({delta:l-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n],i=Md({layout:Ad({delta:c-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n]}return{valueControls:n,valueMax:i,valueMin:a,valueNow:o}}function Mf({children:e,className:t,disabled:n,elementRef:r,id:i,style:a,...o}){let s=yf(i),c=Cf({disabled:n}),[l,u]=(0,H.useState)({}),[d,f]=(0,H.useState)(`inactive`),p=(0,H.useRef)(null),m=Sf(p,r),{disableCursor:h,id:g,orientation:_,registerSeparator:v,toggleSeparatorDisabled:y}=Df(),b=_===`horizontal`?`vertical`:`horizontal`;bf(()=>{let e=p.current;if(e!==null){let t={disabled:c.disabled,element:e,id:s},n=v(t),r=Hd(e=>{f(e.next.state!==`inactive`&&e.next.hitRegions.some(e=>e.separator===t)?e.next.state:`inactive`)}),i=fd(g,e=>{let{derivedPanelConstraints:n,layout:r,separatorToPanels:i}=e.next,a=i.get(t);if(a){let e=a[0],t=a.indexOf(e);u(jf({layout:r,panelConstraints:n,panelId:e.id,panelIndex:t}))}});return()=>{r(),i(),n()}}},[g,s,v,c]),(0,H.useEffect)(()=>{y(s,!!n)},[n,s,y]);let x;return n&&!h&&(x=`not-allowed`),(0,W.jsx)(`div`,{...o,"aria-controls":l.valueControls,"aria-disabled":n||void 0,"aria-orientation":b,"aria-valuemax":l.valueMax,"aria-valuemin":l.valueMin,"aria-valuenow":l.valueNow,children:e,className:t,"data-separator":n?`disabled`:d,"data-testid":s,id:s,ref:m,role:`separator`,style:{flexBasis:`auto`,cursor:x,...a,flexGrow:0,flexShrink:0,touchAction:`none`},tabIndex:n?void 0:0})}Mf.displayName=`Separator`;function Nf(){return`panel-${R()}`}function Pf(e=[],t=null){return{id:Nf(),tabs:e,activeTabId:t,tabHistory:t?[t]:[]}}function Ff(e){return e?1:3}function If(e,t){return e.map(e=>e.filter(e=>e!==t)).filter(e=>e.length>0)}function Lf(e,t){for(let n=0;n<e.length;n++){let r=e[n].indexOf(t);if(r!==-1)return{row:n,col:r}}return null}function Rf(e,t){switch(e){case`editor`:return`editor:${t?.filePath??`untitled`}`;case`chat`:return`chat:${t?.providerId??`default`}/${t?.sessionId??R()}`;case`terminal`:return`terminal:${t?.terminalIndex??1}`;case`database`:return`database:${t?.connectionId??`default`}:${t?.tableName??``}`;case`sqlite`:return`sqlite:${t?.filePath??`default`}`;case`postgres`:return`postgres:${t?.connectionId??`default`}:${t?.tableName??``}`;case`git-graph`:return`git-graph`;case`git-diff`:return`git-diff:${t?.filePath??`unknown`}`;case`settings`:return`settings`;case`ports`:return`ports`;default:return`${e}:${R()}`}}function zf(e){let t={...e,panels:{...e.panels}};for(let[e,n]of Object.entries(t.panels)){let r=n.tabs.map(e=>{if(e.id.startsWith(`tab-`)){let t=Rf(e.type,e.metadata);return{...e,id:t}}return e}),i=new Map;n.tabs.forEach((e,t)=>{e.id!==r[t].id&&i.set(e.id,r[t].id)});let a=i.get(n.activeTabId??``)??n.activeTabId,o=n.tabHistory.map(e=>i.get(e)??e);t.panels[e]={...n,tabs:r,activeTabId:a,tabHistory:o}}return t}var Bf=`ppm-panels-`,Vf=`ppm-tabs-`;function Hf(e){return`${Bf}${e}`}function Uf(e,t){try{let n={...t,updatedAt:new Date().toISOString()};localStorage.setItem(Hf(e),JSON.stringify(n)),qf(e,t)}catch{}}function Wf(e){try{let t=localStorage.getItem(Hf(e));if(t)return zf(JSON.parse(t))}catch{}return Yf(e)}async function Gf(e){try{let t={},n=localStorage.getItem(`ppm-auth-token`);n&&(t.Authorization=`Bearer ${n}`);let r=await fetch(`/api/project/${encodeURIComponent(e)}/workspace`,{headers:t});if(!r.ok)return null;let i=await r.json();return!i.ok||!i.data?null:{...i.data.layout,updatedAt:i.data.updatedAt}}catch{return null}}var Kf=new Map;function qf(e,t){let n=Kf.get(e);n&&clearTimeout(n),Kf.set(e,setTimeout(async()=>{Kf.delete(e);try{let n={"Content-Type":`application/json`},r=localStorage.getItem(`ppm-auth-token`);r&&(n.Authorization=`Bearer ${r}`);let i=await fetch(`/api/project/${encodeURIComponent(e)}/workspace`,{method:`PUT`,headers:n,body:JSON.stringify({layout:t})});if(i.ok){let t=await i.json();if(t.data?.updatedAt){let n=`${Bf}${e}`,r=localStorage.getItem(n);if(r){let e=JSON.parse(r);e.updatedAt=t.data.updatedAt,localStorage.setItem(n,JSON.stringify(e))}}}}catch{}},1500))}function Jf(e,t){if(!e&&!t)return null;if(!e)return t;if(!t)return e;let n=new Date(e.updatedAt).getTime();return new Date(t.updatedAt).getTime()>=n?t:e}function Yf(e){try{let t=localStorage.getItem(`${Vf}${e}`);if(!t)return null;let n=JSON.parse(t);if(!n.tabs?.length)return null;let r=Pf(n.tabs,n.activeTabId),i={panels:{[r.id]:r},grid:[[r.id]],focusedPanelId:r.id};return Uf(e,i),localStorage.removeItem(`${Vf}${e}`),i}catch{return null}}var Xf=new Set([`git-graph`,`settings`]),Zf=new Set([`projects`,`git-status`]);function Qf(e,t){let n=e.filter(e=>e!==t);return n.push(t),n.length>50&&n.shift(),n}function $f(){let e=Pf();return{panels:{[e.id]:e},grid:[[e.id]],focusedPanelId:e.id}}var Q=c()((e,t)=>{function n(){let{currentProject:e,panels:n,grid:r,focusedPanelId:i}=t();if(!e)return;let a=new Set(r.flat()),o={};for(let[e,t]of Object.entries(n))a.has(e)&&(o[e]=t);Uf(e,{panels:o,grid:r,focusedPanelId:i})}function r(e){return Object.values(t().panels).find(t=>t.tabs.some(t=>t.id===e))}function i(e){return e??t().focusedPanelId}return{...$f(),currentProject:null,projectGrids:{},projectFocused:{},switchProject:n=>{let{currentProject:r,panels:i,grid:a,focusedPanelId:o,projectGrids:s,projectFocused:c}=t();if(r===n)return;let l={...s},u={...c};if(r){l[r]=a,u[r]=o;let e=new Set(a.flat()),t={};for(let[n,r]of Object.entries(i))e.has(n)&&(t[n]=r);Uf(r,{panels:t,grid:a,focusedPanelId:o})}if(l[n]){let t=l[n];e({currentProject:n,grid:t,focusedPanelId:u[n]??t[0]?.[0]??``,projectGrids:l,projectFocused:u});return}let d=Wf(n);if(d&&Object.keys(d.panels).length>0){let t={};for(let[e,n]of Object.entries(d.panels)){let r=n.tabs.filter(e=>!Zf.has(e.type)),i=n.tabHistory.filter(e=>r.some(t=>t.id===e)),a=n.activeTabId&&r.some(e=>e.id===n.activeTabId)?n.activeTabId:i[i.length-1]??r[0]?.id??null;t[e]={...n,tabs:r,tabHistory:i,activeTabId:a}}let r={...i,...t};l[n]=d.grid,u[n]=d.focusedPanelId,e({currentProject:n,panels:r,grid:d.grid,focusedPanelId:d.focusedPanelId,projectGrids:l,projectFocused:u})}else{let t=Pf(),r=[[t.id]],a={...i,[t.id]:t};l[n]=r,u[n]=t.id,Uf(n,{panels:{[t.id]:t},grid:r,focusedPanelId:t.id}),e({currentProject:n,panels:a,grid:r,focusedPanelId:t.id,projectGrids:l,projectFocused:u})}},reloadProject:n=>{let{projectGrids:r,projectFocused:i,panels:a}=t(),o={...r},s={...i};delete o[n],delete s[n];let c=r[n],l=c?new Set(c.flat()):new Set,u={...a};for(let e of l)delete u[e];e({projectGrids:o,projectFocused:s,panels:u,currentProject:null}),t().switchProject(n)},setFocusedPanel:n=>{t().panels[n]&&e({focusedPanelId:n})},openTab:(r,a)=>{let o=t().isMobile(),s=o?t().grid[0]?.[0]??i(a):i(a);if(!t().panels[s])return``;if(r.type===`terminal`&&!r.metadata?.terminalIndex){let e=Object.values(t().panels).flatMap(e=>e.tabs).filter(e=>e.type===`terminal`).map(e=>{let t=e.id.match(/^terminal:(\d+)/);return t?parseInt(t[1],10):0}),n=e.length>0?Math.max(...e)+1:1;r={...r,metadata:{...r.metadata,terminalIndex:n}}}let c=Rf(r.type,r.metadata);if(Xf.has(r.type))for(let r of Object.values(t().panels)){let t=r.tabs.find(e=>e.id===c);if(t)return e(e=>({focusedPanelId:r.id,panels:{...e.panels,[r.id]:{...r,activeTabId:t.id,tabHistory:Qf(r.tabHistory,t.id)}}})),n(),t.id}if(o)for(let r of t().grid.flat()){let i=t().panels[r];if(!i)continue;let a=i.tabs.find(e=>e.id===c||e.id.startsWith(`${c}@`));if(a)return e(e=>({focusedPanelId:i.id,panels:{...e.panels,[i.id]:{...i,activeTabId:a.id,tabHistory:Qf(i.tabHistory,a.id)}}})),n(),a.id}let l=t().panels[s],u=l.tabs.find(e=>e.id===c);if(u)return e(e=>({panels:{...e.panels,[s]:{...l,activeTabId:u.id,tabHistory:Qf(l.tabHistory,u.id)}}})),n(),u.id;let d=Object.values(t().panels).some(e=>e.id!==s&&e.tabs.some(e=>e.id===c))?`${c}@${s}`:c,f={...r,id:d};return e(e=>{let t=e.panels[s];return{focusedPanelId:s,panels:{...e.panels,[s]:{...t,tabs:[...t.tabs,f],activeTabId:d,tabHistory:Qf(t.tabHistory,d)}}}}),n(),d},closeTab:(i,a)=>{let o=a?t().panels[a]:r(i);if(!o)return;let s=o.id;e(e=>{let t=e.panels[s],n=t.tabs.filter(e=>e.id!==i),r=t.tabHistory.filter(e=>e!==i),a=t.activeTabId;if(t.activeTabId===i){let e=r.length>0?r[r.length-1]:null;a=e&&n.some(t=>t.id===e)?e:n[n.length-1]?.id??null}let o=e.grid.flat().length;if(n.length===0&&o>1){let{[s]:t,...n}=e.panels;return{panels:n,grid:If(e.grid,s),focusedPanelId:e.focusedPanelId===s?Object.keys(n)[0]:e.focusedPanelId}}return{panels:{...e.panels,[s]:{...t,tabs:n,activeTabId:a,tabHistory:r}}}}),n()},setActiveTab:(i,a)=>{let o=a?t().panels[a]:r(i);if(!o)return;let s=o.id;e(e=>{let t=e.panels[s];return{focusedPanelId:s,panels:{...e.panels,[s]:{...t,activeTabId:i,tabHistory:Qf(t.tabHistory,i)}}}}),n()},updateTab:(t,i)=>{let a=r(t);a&&(e(e=>({panels:{...e.panels,[a.id]:{...a,tabs:a.tabs.map(e=>e.id===t?{...e,...i}:e)}}})),n())},reorderTab:(r,i,a)=>{let o=t().panels[i];if(!o)return;let s=o.tabs.findIndex(e=>e.id===r);if(s===-1||s===a)return;let c=[...o.tabs],[l]=c.splice(s,1);c.splice(a,0,l),e(e=>({panels:{...e.panels,[i]:{...o,tabs:c}}})),n()},moveTab:(r,i,a,o)=>{if(i===a)return;let s=t().panels[i],c=t().panels[a];if(!s||!c)return;let l=s.tabs.find(e=>e.id===r);if(!l)return;let u=s.tabs.filter(e=>e.id!==r),d=s.tabHistory.filter(e=>e!==r),f=s.activeTabId===r?d[d.length-1]??u[u.length-1]?.id??null:s.activeTabId,p=[...c.tabs];o===void 0?p.push(l):p.splice(o,0,l),e(e=>{let t=e.grid.flat().length;if(u.length===0&&t>1){let{[i]:t,...n}=e.panels;return{panels:{...n,[a]:{...c,tabs:p,activeTabId:r,tabHistory:Qf(c.tabHistory,r)}},grid:If(e.grid,i),focusedPanelId:a}}return{focusedPanelId:a,panels:{...e.panels,[i]:{...s,tabs:u,activeTabId:f,tabHistory:d},[a]:{...c,tabs:p,activeTabId:r,tabHistory:Qf(c.tabHistory,r)}}}}),n()},splitPanel:(r,i,a,o)=>{let{grid:s,panels:c}=t(),l=t().isMobile(),u=c[a];if(!u)return!1;let d=u.tabs.find(e=>e.id===i);if(!d)return!1;let f=Lf(s,o??a);if(!f)return!1;let p=r===`left`||r===`right`,m=r===`up`||r===`down`;if(p&&(s[f.row]?.length??0)>=Ff(l)||m&&s.length>=3)return!1;let h=Pf([d],d.id);h.tabHistory=[d.id];let g=u.tabs.filter(e=>e.id!==i),_=u.tabHistory.filter(e=>e!==i),v=u.activeTabId===i?_[_.length-1]??g[g.length-1]?.id??null:u.activeTabId,y;if(p)y=s.map((e,t)=>{if(t!==f.row)return e;let n=[...e],i=r===`right`?f.col+1:f.col;return n.splice(i,0,h.id),n});else{y=[...s];let e=r===`down`?f.row+1:f.row;y.splice(e,0,[h.id])}return e(e=>{let t=e.grid.flat().length,n={...e.panels,[h.id]:h};if(g.length===0&&t>1){let{[a]:e,...t}=n;n=t,y=If(y,a)}else n[a]={...u,tabs:g,activeTabId:v,tabHistory:_};return{panels:n,grid:y,focusedPanelId:h.id}}),n(),!0},closePanel:r=>{let{panels:i,grid:a}=t();if(a.flat().length<=1)return;let o=i[r];if(!o)return;Lf(a,r);let s=a.flat(),c=s.indexOf(r),l=c>0?s[c-1]:s[1],u=i[l];u&&(e(e=>{let{[r]:t,...n}=e.panels,i=[...u.tabs,...o.tabs],a=u.activeTabId??o.activeTabId;return{panels:{...n,[l]:{...u,tabs:i,activeTabId:a,tabHistory:[...u.tabHistory,...o.tabHistory]}},grid:If(e.grid,r),focusedPanelId:l}}),n())},getPanelForTab:e=>r(e),isMobile:()=>typeof window<`u`&&window.innerWidth<768}});function ep(e){let[t,n]=(0,H.useState)(()=>typeof window<`u`?window.matchMedia(e).matches:!1);return(0,H.useEffect)(()=>{let t=window.matchMedia(e),r=e=>n(e.matches);return t.addEventListener(`change`,r),n(t.matches),()=>t.removeEventListener(`change`,r)},[e]),t}var tp=`ppm-custom-order`;function np(){try{let e=localStorage.getItem(tp);return e?JSON.parse(e):null}catch{return null}}function rp(e){try{localStorage.setItem(tp,JSON.stringify(e))}catch{}}function ip(e,t){if(!t)return[...e];let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.name)??1/0)-(n.get(t.name)??1/0))}var ap=c((e,t)=>({projects:[],activeProject:null,customOrder:np(),loading:!1,error:null,fetchProjects:async()=>{e({loading:!0,error:null});try{e({projects:await B.get(`/api/projects`),loading:!1})}catch(t){e({error:t instanceof Error?t.message:`Failed to fetch projects`,loading:!1})}},setActiveProject:t=>{e({activeProject:t})},addProject:async(n,r)=>{let i=await B.post(`/api/projects`,{path:n,name:r});await t().fetchProjects();let a=t().projects.find(e=>e.name===(r??i.name)||e.path===n);return a&&e({activeProject:a}),i},setProjectColor:async(e,n)=>{await B.patch(`/api/projects/${encodeURIComponent(e)}/color`,{color:n}),await t().fetchProjects()},moveProject:async(n,r)=>{let{projects:i,customOrder:a}=t(),o=ip(i,a),s=o.findIndex(e=>e.name===n);if(s===-1)return;let c=r===`up`?s-1:s+1;if(c<0||c>=o.length)return;let l=o.map(e=>e.name);[l[s],l[c]]=[l[c],l[s]],rp(l),await B.patch(`/api/projects/reorder`,{order:l}),e({customOrder:l})},reorderProjects:async t=>{rp(t),e({customOrder:t}),await B.patch(`/api/projects/reorder`,{order:t}).catch(()=>{})},renameProject:async(e,n)=>{await B.patch(`/api/projects/${encodeURIComponent(e)}`,{name:n}),await t().fetchProjects()},deleteProject:async t=>{await B.del(`/api/projects/${encodeURIComponent(t)}`),e(e=>{let n=e.projects.filter(e=>e.name!==t),r=e.customOrder?e.customOrder.filter(e=>e!==t):null;return r&&rp(r),{projects:n,customOrder:r,activeProject:e.activeProject?.name===t?n[0]??null:e.activeProject}})}})),op=c()(()=>({tabs:[],activeTabId:null,tabHistory:[],currentProject:null,switchProject:e=>{Q.getState().switchProject(e),sp()},openTab:e=>{let t=Q.getState().openTab(e);return sp(),t},closeTab:e=>{Q.getState().closeTab(e),sp()},setActiveTab:e=>{Q.getState().setActiveTab(e),sp()},updateTab:(e,t)=>{Q.getState().updateTab(e,t),sp()}}));function sp(){let e=Q.getState(),t=e.panels[e.focusedPanelId];op.setState({tabs:t?.tabs??[],activeTabId:t?.activeTabId??null,tabHistory:t?.tabHistory??[],currentProject:e.currentProject})}Q.subscribe(()=>sp());var cp=`application/ppm-tab`,lp=!1,up=new Set;function dp(e){lp!==e&&(lp=e,up.forEach(e=>e()))}function fp(){return(0,H.useSyncExternalStore)(e=>(up.add(e),()=>up.delete(e)),()=>lp)}function pp(){dp(!1)}function mp(e){let[t,n]=(0,H.useState)(null),r=(0,H.useRef)(null);return{dropIndex:t,handleDragStart:(0,H.useCallback)((t,n)=>{let r={tabId:n,panelId:e};t.dataTransfer.setData(cp,JSON.stringify(r)),t.dataTransfer.effectAllowed=`move`,requestAnimationFrame(()=>dp(!0))},[e]),handleDragOver:(0,H.useCallback)((e,t,i)=>{if(!e.dataTransfer.types.includes(`application/ppm-tab`)||(e.preventDefault(),e.dataTransfer.dropEffect=`move`,r.current===t))return;r.current=t;let a=e.currentTarget.getBoundingClientRect(),o=a.left+a.width/2;n(e.clientX<o?i:i+1)},[]),handleDragOverBar:(0,H.useCallback)(e=>{e.dataTransfer.types.includes(`application/ppm-tab`)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},[]),handleDrop:(0,H.useCallback)(i=>{i.preventDefault(),dp(!1);let a=i.dataTransfer.getData(cp);if(a){try{let n=JSON.parse(a),r=Q.getState();n.panelId===e?t!==null&&r.reorderTab(n.tabId,e,t):r.moveTab(n.tabId,n.panelId,e,t??void 0)}catch{}n(null),r.current=null}},[e,t]),handleDragEnd:(0,H.useCallback)(()=>{dp(!1),n(null),r.current=null},[])}}var hp=null,gp=null,_p=0,vp=new Set;function yp(){vp.forEach(e=>e())}function bp(){return(0,H.useSyncExternalStore)(e=>(vp.add(e),()=>vp.delete(e)),()=>gp)}function xp(){return Date.now()-_p<300}var Sp=null;function Cp(e,t,n){let r=document.createElement(`div`);r.id=`touch-drag-ghost`,Object.assign(r.style,{position:`fixed`,zIndex:`9999`,pointerEvents:`none`,padding:`6px 14px`,borderRadius:`8px`,background:`rgba(30,30,30,0.92)`,color:`#fff`,fontSize:`12px`,whiteSpace:`nowrap`,opacity:`0.95`,boxShadow:`0 4px 16px rgba(0,0,0,0.35)`,transform:`translate(-50%, -130%)`,left:`${t}px`,top:`${n}px`}),r.textContent=e,document.body.appendChild(r),Sp=r}function wp(e,t){Sp&&(Sp.style.left=`${e}px`,Sp.style.top=`${t}px`)}function Tp(){Sp?.remove(),Sp=null}function Ep(e,t){Sp&&(Sp.style.display=`none`);let n=document.elementFromPoint(e,t);Sp&&(Sp.style.display=``);let r=n?.closest(`[data-panel-drop-zone]`);if(!r)return null;let i=r.dataset.panelDropZone,a=r.getBoundingClientRect(),o=(e-a.left)/a.width,s=(t-a.top)/a.height,c=.25,{grid:l}=Q.getState(),u=window.innerWidth<768,d=Lf(l,i),f=d?!u&&(l[d.row]?.length??0)<Ff(!1):!1,p=!u&&l.length<3,m=`center`;return o<c&&f?m=`left`:o>1-c&&f?m=`right`:s<c&&p?m=`top`:s>1-c&&p&&(m=`bottom`),{panelId:i,zone:m}}function Dp(e){if(!hp)return;e.preventDefault();let t=e.touches[0];if(!t)return;wp(t.clientX,t.clientY);let n=Ep(t.clientX,t.clientY);(n?.panelId!==gp?.panelId||n?.zone!==gp?.zone)&&(gp=n,yp())}function Op(){hp=null,gp=null,yp(),Tp(),pp(),document.removeEventListener(`touchmove`,Dp),document.removeEventListener(`touchend`,kp),document.removeEventListener(`touchcancel`,Ap)}function kp(){let e=hp,t=gp;if(Op(),_p=Date.now(),!e||!t)return;let n=Q.getState();if(t.zone===`center`)e.panelId!==t.panelId&&n.moveTab(e.tabId,e.panelId,t.panelId);else{let r=t.zone===`top`?`up`:t.zone===`bottom`?`down`:t.zone;n.splitPanel(r,e.tabId,e.panelId,t.panelId)}}function Ap(){Op(),_p=Date.now()}function jp(e,t,n,r){hp=e,dp(!0),Cp(t,n,r),document.addEventListener(`touchmove`,Dp,{passive:!1}),document.addEventListener(`touchend`,kp),document.addEventListener(`touchcancel`,Ap)}var Mp=200,Np=10;function Pp(e){let t=(0,H.useRef)(null),n=(0,H.useRef)(null),r=(0,H.useRef)(!1);return{handleTouchStart:(0,H.useCallback)((i,a,o)=>{let s=i.touches[0];s&&(n.current={x:s.clientX,y:s.clientY},r.current=!1,t.current=setTimeout(()=>{r.current=!0,jp({tabId:a,panelId:e},o,n.current.x,n.current.y)},Mp))},[e]),handleTouchMove:(0,H.useCallback)(e=>{if(r.current||!n.current||!t.current)return;let i=e.touches[0];i&&(Math.abs(i.clientX-n.current.x)>Np||Math.abs(i.clientY-n.current.y)>Np)&&(clearTimeout(t.current),t.current=null)},[]),handleTouchEnd:(0,H.useCallback)(()=>{t.current&&=(clearTimeout(t.current),null)},[])}}var Fp=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent),Ip=[{id:`command-palette`,label:`Command Palette`,category:`general`,defaultKey:`F1`,note:`Shift+Shift also opens (not customizable)`},{id:`toggle-sidebar`,label:`Toggle Sidebar`,category:`general`,defaultKey:`Mod+B`},{id:`save-prevent`,label:`Prevent Save Dialog`,category:`general`,defaultKey:`Mod+S`,locked:!0,note:`Always active — prevents browser save`},{id:`next-tab`,label:`Next Tab`,category:`tabs`,defaultKey:`Alt+]`},{id:`prev-tab`,label:`Previous Tab`,category:`tabs`,defaultKey:`Alt+[`},{id:`open-chat`,label:`Open Chat`,category:`tabs`,defaultKey:`Mod+L`},{id:`open-terminal`,label:`Open Terminal`,category:`tabs`,defaultKey:`Mod+'`},{id:`open-settings`,label:`Open Settings`,category:`tabs`,defaultKey:`Mod+,`},{id:`open-git-graph`,label:`Git Graph`,category:`tabs`,defaultKey:`Mod+G`},{id:`open-git-status`,label:`Git Status (sidebar)`,category:`tabs`,defaultKey:`Mod+Shift+E`},{id:`open-search`,label:`Search Files (sidebar)`,category:`tabs`,defaultKey:`Mod+Shift+F`},{id:`voice-input`,label:`Voice Input`,category:`general`,defaultKey:`Mod+Shift+V`,note:`Toggle speech-to-text in chat`},...Array.from({length:9},(e,t)=>({id:`switch-project-${t+1}`,label:`Switch to Project ${t+1}`,category:`projects`,defaultKey:`Mod+${t+1}`}))],Lp=new Map(Ip.map(e=>[e.id,e.defaultKey]));function Rp(e){let t=e.split(`+`),n={ctrl:!1,meta:!1,alt:!1,shift:!1,key:``};for(let e of t){let t=e.trim();switch(t){case`Mod`:Fp?n.meta=!0:n.ctrl=!0;break;case`Ctrl`:n.ctrl=!0;break;case`Meta`:case`Cmd`:n.meta=!0;break;case`Alt`:n.alt=!0;break;case`Shift`:n.shift=!0;break;default:n.key=t.toLowerCase();break}}return n}function zp(e,t){return e.ctrlKey!==t.ctrl||e.metaKey!==t.meta||e.altKey!==t.alt||e.shiftKey!==t.shift?!1:e.key.toLowerCase()===t.key}function Bp(e){return e.replace(/Mod/g,Fp?`⌘`:`Ctrl`).replace(/Shift/g,Fp?`⇧`:`Shift`).replace(/Alt/g,Fp?`⌥`:`Alt`).replace(/Meta|Cmd/g,`⌘`).replace(/Ctrl/g,Fp?`⌃`:`Ctrl`)}function Vp(e){if([`Control`,`Meta`,`Alt`,`Shift`].includes(e.key))return null;let t=[];e.ctrlKey&&!e.metaKey&&t.push(Fp?`Ctrl`:`Mod`),e.metaKey&&t.push(Fp?`Mod`:`Meta`),e.altKey&&t.push(`Alt`),e.shiftKey&&t.push(`Shift`);let n=e.key;return n===` `?n=`Space`:n.length===1&&(n=n.toUpperCase()),t.push(n),t.join(`+`)}var Hp=c((e,t)=>({overrides:{},loaded:!1,getBinding:e=>t().overrides[e]??Lp.get(e)??``,matchesEvent:(e,n)=>{let r=t().getBinding(n);return r?zp(e,Rp(r)):!1},setBinding:(n,r)=>{e({overrides:{...t().overrides,[n]:r}}),B.put(`/api/settings/keybindings`,{[n]:r}).catch(()=>{})},resetBinding:n=>{let r={...t().overrides};delete r[n],e({overrides:r}),B.put(`/api/settings/keybindings`,{[n]:null}).catch(()=>{})},resetAll:()=>{e({overrides:{}});let n={};for(let e of Object.keys(t().overrides))n[e]=null;Object.keys(n).length>0&&B.put(`/api/settings/keybindings`,n).catch(()=>{})},loadFromServer:async()=>{try{e({overrides:await B.get(`/api/settings/keybindings`),loaded:!0})}catch{e({loaded:!0})}}}));function Up(e){window.dispatchEvent(new CustomEvent(`open-command-palette`,{detail:e}))}function Wp(){let[e,t]=(0,H.useState)(!1),[n,r]=(0,H.useState)(``);return(0,H.useEffect)(()=>{let e=0,n=!1,{matchesEvent:i}=Hp.getState(),a=!1;function o(){a=!0}function s(){a=!1}function c(i){if(i.type===`keydown`&&i.key===`Shift`){n=!0;return}if(i.type===`keydown`&&i.shiftKey&&(n=!1),i.type===`keydown`&&i.key!==`Shift`&&(e=0),i.type===`keyup`&&i.key===`Shift`&&n&&!i.ctrlKey&&!i.metaKey&&!i.altKey&&!a&&!i.isComposing){let n=Date.now();if(n-e<400){e=0,r(``),t(!0);return}e=n;return}if(i.type!==`keydown`||a||i.isComposing)return;let{matchesEvent:o}=Hp.getState();if(o(i,`save-prevent`)){i.preventDefault();return}if(o(i,`command-palette`)){i.preventDefault(),r(``),t(!0);return}if(o(i,`toggle-sidebar`)){i.preventDefault(),U.getState().toggleSidebar();return}if(o(i,`next-tab`)||o(i,`prev-tab`)){i.preventDefault();let{tabs:e,activeTabId:t,setActiveTab:n}=op.getState();if(e.length<2)return;let r=e.findIndex(e=>e.id===t);n(e[o(i,`next-tab`)?(r+1)%e.length:(r-1+e.length)%e.length].id);return}for(let e of[{action:`open-chat`,type:`chat`,title:`AI Chat`},{action:`open-terminal`,type:`terminal`,title:`Terminal`},{action:`open-git-graph`,type:`git-graph`,title:`Git Graph`}])if(o(i,e.action)){i.preventDefault();let t=ap.getState().activeProject;op.getState().openTab({type:e.type,title:e.title,projectId:t?.name??null,metadata:t?{projectName:t.name}:void 0,closable:!0});return}if(o(i,`open-settings`)){i.preventDefault();let e=U.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`settings`);return}if(o(i,`open-git-status`)){i.preventDefault();let e=U.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`git`);return}if(o(i,`voice-input`)){i.preventDefault(),window.dispatchEvent(new CustomEvent(`toggle-voice-input`));return}if(o(i,`open-search`)){i.preventDefault();let e=U.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`search`);return}for(let e=1;e<=9;e++)if(o(i,`switch-project-${e}`)){i.preventDefault();let t=ap.getState().projects[e-1];t&&(ap.getState().setActiveProject(t),op.getState().switchProject(t.name));return}}function l(e){let n=e.detail;r(typeof n==`string`?n:``),t(!0)}return window.addEventListener(`keydown`,c),window.addEventListener(`keyup`,c),window.addEventListener(`compositionstart`,o),window.addEventListener(`compositionend`,s),window.addEventListener(`open-command-palette`,l),()=>{window.removeEventListener(`keydown`,c),window.removeEventListener(`keyup`,c),window.removeEventListener(`compositionstart`,o),window.removeEventListener(`compositionend`,s),window.removeEventListener(`open-command-palette`,l)}},[]),{paletteOpen:e,paletteInitialQuery:n,closePalette:(0,H.useCallback)(()=>{t(!1),r(``)},[])}}var Gp={approval_request:`bg-red-500`,question:`bg-amber-500`,done:`bg-blue-500`},Kp={done:0,question:1,approval_request:2};function qp(e){return e&&Gp[e]||`bg-red-500`}var Jp=c()(e=>({notifications:new Map,addNotification:(t,n,r)=>{e(e=>{let i=new Map(e.notifications),a=i.get(t);return i.set(t,{count:(a?.count??0)+1,type:n,projectName:r}),{notifications:i}})},clearForSession:t=>{e(e=>{if(!e.notifications.has(t))return e;let n=new Map(e.notifications);return n.delete(t),{notifications:n}})},clearAll:()=>e({notifications:new Map})}));function Yp(e){let t=0;for(let[,n]of e.notifications)t+=n.count;return t}function Xp(e){return t=>{let n=null,r=-1;for(let[,i]of t.notifications){if(i.projectName!==e)continue;let t=Kp[i.type]??0;t>r&&(r=t,n=i.type)}return n}}function Zp(e){let[t,n]=(0,H.useState)(!1),[r,i]=(0,H.useState)(!1),a=(0,H.useCallback)(()=>{let t=e.current;t&&(n(t.scrollLeft>1),i(t.scrollLeft+t.clientWidth<t.scrollWidth-1))},[e]);return(0,H.useEffect)(()=>{let t=e.current;if(!t)return;a(),t.addEventListener(`scroll`,a,{passive:!0});let n=new ResizeObserver(a);n.observe(t);let r=new MutationObserver(a);return r.observe(t,{childList:!0,subtree:!0}),()=>{t.removeEventListener(`scroll`,a),n.disconnect(),r.disconnect()}},[e,a]),{canScrollLeft:t,canScrollRight:r,scrollLeft:(0,H.useCallback)(()=>{e.current?.scrollBy({left:-150,behavior:`smooth`})},[e]),scrollRight:(0,H.useCallback)(()=>{e.current?.scrollBy({left:150,behavior:`smooth`})},[e])}}var Qp={done:0,question:1,approval_request:2};function $p(e,t,n,r){if(!e)return{left:null,right:null};let i=e.scrollLeft,a=i+e.clientWidth,o=null,s=-1,c=null,l=-1,u=e.getBoundingClientRect();for(let d of n){if(d.type!==`chat`)continue;let n=d.metadata?.sessionId,f=n?r.get(n):void 0;if(!f||f.count===0)continue;let p=t.get(d.id);if(!p)continue;let m=p.getBoundingClientRect(),h=m.left-u.left+e.scrollLeft,g=h+m.width,_=Qp[f.type]??0;g<=i&&_>s&&(s=_,o=f.type),h>=a&&_>l&&(l=_,c=f.type)}return{left:o,right:c}}function em(e){let t=/^#([0-9a-fA-F]{6})$/.exec(e.trim());if(!t)return null;let n=parseInt(t[1],16);return{r:n>>16&255,g:n>>8&255,b:n&255}}function tm(e,t,n){let[r,i,a]=[e,t,n].map(e=>{let t=e/255;return t<=.04045?t/12.92:((t+.055)/1.055)**2.4});return .2126*r+.7152*i+.0722*a}function nm(e){let t=em(e);return t?tm(t.r,t.g,t.b)<.4:!1}function rm({tab:e,isActive:t,icon:n,showDropBefore:r,notificationType:i,onSelect:a,onClose:s,onDragStart:c,onDragOver:l,onDragEnd:u,onTouchStart:d,onTouchMove:f,onTouchEnd:p,tabRef:m,onRename:h}){let[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(e.title),b=(0,H.useRef)(null);(0,H.useEffect)(()=>{g&&(y(e.title),setTimeout(()=>b.current?.select(),0))},[g]);let x=()=>{_(!1);let t=v.trim();t&&t!==e.title&&h&&h(t)},S=e.metadata?.connectionColor,C=S?{backgroundColor:t?S:`${S}33`,color:t&&nm(S)?`#fff`:void 0}:void 0;return(0,W.jsxs)(`div`,{className:`relative flex items-center`,children:[r&&(0,W.jsx)(`div`,{className:`absolute left-0 top-1 bottom-1 w-0.5 bg-primary rounded-full z-10`}),(0,W.jsxs)(`button`,{ref:m,"data-tab-item":!0,draggable:!g,onClick:a,onAuxClick:t=>{t.button===1&&e.closable&&(t.preventDefault(),s())},onDragStart:c,onDragOver:l,onDragEnd:u,onTouchStart:d,onTouchMove:f,onTouchEnd:p,style:C,className:L(`group flex items-center gap-1 px-3 h-10 whitespace-nowrap text-xs transition-colors`,`border-b-2 -mb-px cursor-grab active:cursor-grabbing`,!C&&(t?`border-primary text-primary`:`border-transparent text-text-secondary hover:text-foreground`),C&&`border-transparent`),children:[(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(n,{className:`size-4`}),i&&!t&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -right-1 size-2 rounded-full`,qp(i))})]}),g?(0,W.jsx)(`input`,{ref:b,value:v,onChange:e=>y(e.target.value),onBlur:x,onKeyDown:e=>{e.key===`Enter`&&x(),e.key===`Escape`&&_(!1),e.stopPropagation()},onClick:e=>e.stopPropagation(),className:`max-w-[120px] bg-surface-elevated text-xs px-1 py-0.5 rounded border border-border outline-none focus:border-primary`,autoFocus:!0}):(0,W.jsx)(`span`,{className:`max-w-[120px] truncate`,onDoubleClick:e=>{h&&(e.stopPropagation(),_(!0))},children:e.title}),e.closable&&!g&&(0,W.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),s()},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),s())},className:`ml-1 can-hover:opacity-0 can-hover:group-hover:opacity-100 rounded-sm hover:bg-surface-elevated p-0.5 transition-opacity`,children:(0,W.jsx)(o,{className:`size-3`})})]})]})}var im={terminal:Yt,chat:vt,editor:Ge,database:Re,sqlite:Re,postgres:Re,"git-graph":tt,"git-diff":Ke,settings:Gt,ports:rt,"extension-webview":It};function am({panelId:e}){ap(e=>e.activeProject);let t=(0,H.useRef)(new Map),n=(0,H.useRef)(null),r=(0,H.useRef)(0),i=Q(t=>e?t.panels[e]:t.panels[t.focusedPanelId]),a=i?.tabs??[],o=i?.activeTabId??null,c=i?.id??Q.getState().focusedPanelId,{dropIndex:l,handleDragStart:u,handleDragOver:d,handleDragOverBar:f,handleDrop:p,handleDragEnd:m}=mp(c),{handleTouchStart:h,handleTouchMove:g,handleTouchEnd:_}=Pp(c),v=Jp(e=>e.notifications),{canScrollLeft:y,canScrollRight:b,scrollLeft:x,scrollRight:S}=Zp(n),C=$p(n.current,t.current,a,v);(0,H.useEffect)(()=>{if(a.length>r.current&&o){let e=t.current.get(o);e&&e.scrollIntoView({behavior:`smooth`,block:`nearest`,inline:`nearest`})}r.current=a.length},[a.length,o]);let w=(0,H.useCallback)((e,t)=>{op.getState().updateTab(e.id,{title:t});let n=e.metadata?.projectName,r=e.metadata?.sessionId;n&&r&&B.patch(`${z(n)}/chat/sessions/${r}`,{title:t}).catch(()=>{})},[]);function T(e){e.target.closest(`[data-tab-item]`)||Up()}function E(e){e.target.closest(`[data-tab-item]`)||(e.preventDefault(),Up())}return(0,W.jsxs)(`div`,{className:`hidden md:flex items-center h-10 border-b border-border bg-background relative`,onDragOver:f,onDrop:p,onDoubleClick:T,onContextMenu:E,children:[y&&(0,W.jsx)(`button`,{onClick:x,className:`absolute left-0 z-10 flex items-center justify-center size-8 bg-gradient-to-r from-background via-background to-transparent`,children:(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(De,{className:`size-4 text-text-secondary`}),C.left&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -right-0.5 size-2 rounded-full`,qp(C.left))})]})}),(0,W.jsx)(`div`,{ref:n,className:`flex-1 overflow-x-auto overflow-y-hidden min-w-0 scrollbar-none`,children:(0,W.jsxs)(`div`,{className:`flex items-center h-10`,children:[a.map((e,n)=>{let r=e.type===`chat`?e.metadata?.sessionId:void 0,i=r?v.get(r):void 0,a=i&&i.count>0?i.type:null;return(0,W.jsx)(rm,{tab:e,isActive:e.id===o,icon:im[e.type],showDropBefore:l===n,notificationType:a,onSelect:()=>{xp()||(Q.getState().setActiveTab(e.id,c),r&&Jp.getState().clearForSession(r))},onClose:()=>Q.getState().closeTab(e.id,c),onDragStart:t=>u(t,e.id),onDragOver:t=>d(t,e.id,n),onDragEnd:m,onTouchStart:t=>h(t,e.id,e.title),onTouchMove:g,onTouchEnd:_,tabRef:n=>{n?t.current.set(e.id,n):t.current.delete(e.id)},onRename:e.type===`chat`?t=>w(e,t):void 0},e.id)}),l!==null&&l>=a.length&&(0,W.jsx)(`div`,{className:`w-0.5 h-6 bg-primary rounded-full`}),(0,W.jsx)(`button`,{onClick:()=>Up(),title:`Open command palette (Shift+Shift)`,className:`flex items-center justify-center size-10 shrink-0 sticky right-0 border-b-2 border-transparent text-text-secondary hover:text-foreground transition-colors bg-background`,children:(0,W.jsx)(Nt,{className:`size-4`})})]})}),b&&(0,W.jsx)(`button`,{onClick:S,className:`absolute right-10 z-10 flex items-center justify-center size-8 bg-gradient-to-l from-background via-background to-transparent`,children:(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(s,{className:`size-4 text-text-secondary`}),C.right&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -left-0.5 size-2 rounded-full`,qp(C.right))})]})})]})}function om({panelId:e}){let[t,n]=(0,H.useState)(null),r=fp(),i=bp(),a=(i?.panelId===e?i.zone:null)??t,o=Q(e=>e.grid),s=Q(e=>e.isMobile()),c=Lf(o,e),l=!s&&o.length<3,u=c?!s&&(o[c.row]?.length??0)<Ff(!1):!1,d=(0,H.useCallback)(e=>{let t=e.currentTarget.getBoundingClientRect(),n=(e.clientX-t.left)/t.width,r=(e.clientY-t.top)/t.height,i=.25;return n<i&&u?`left`:n>1-i&&u?`right`:r<i&&l?`top`:r>1-i&&l?`bottom`:`center`},[u,l]),f=(0,H.useCallback)(e=>{e.dataTransfer.types.includes(`application/ppm-tab`)&&(e.preventDefault(),e.stopPropagation(),n(d(e)))},[d]),p=(0,H.useCallback)(e=>{e.currentTarget.contains(e.relatedTarget)||n(null)},[]),m=(0,H.useCallback)(t=>{t.preventDefault(),t.stopPropagation();let r=d(t);if(n(null),pp(),!r)return;let i=t.dataTransfer.getData(cp);if(i)try{let t=JSON.parse(i),n=Q.getState();if(r===`center`)t.panelId!==e&&n.moveTab(t.tabId,t.panelId,e);else{let i=r===`top`?`up`:r===`bottom`?`down`:r;n.splitPanel(i,t.tabId,t.panelId,e)}}catch{}},[d,e]);return r?(0,W.jsxs)(`div`,{className:`absolute inset-0 z-20`,onDragOver:f,onDragLeave:p,onDrop:m,children:[a===`left`&&(0,W.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-1/3 bg-primary/10 border-2 border-primary/30 rounded-l-md`}),a===`right`&&(0,W.jsx)(`div`,{className:`absolute inset-y-0 right-0 w-1/3 bg-primary/10 border-2 border-primary/30 rounded-r-md`}),a===`top`&&(0,W.jsx)(`div`,{className:`absolute inset-x-0 top-0 h-1/3 bg-primary/10 border-2 border-primary/30 rounded-t-md`}),a===`bottom`&&(0,W.jsx)(`div`,{className:`absolute inset-x-0 bottom-0 h-1/3 bg-primary/10 border-2 border-primary/30 rounded-b-md`}),a===`center`&&(0,W.jsx)(`div`,{className:`absolute inset-0 bg-primary/5 border-2 border-dashed border-primary/30 rounded-md`})]}):null}var sm=[{type:`terminal`,label:`Terminal`,icon:Yt},{type:`chat`,label:`AI Chat`,icon:vt},{type:`git-graph`,label:`Git Graph`,icon:tt}],cm={terminal:(0,H.lazy)(()=>l(()=>import(`./terminal-tab-TIJmxHl6.js`).then(e=>({default:e.TerminalTab})),__vite__mapDeps([3,1,4,5,6,7]))),chat:(0,H.lazy)(()=>l(()=>import(`./chat-tab-CT2XUgsc.js`).then(e=>({default:e.ChatTab})),__vite__mapDeps([8,1,9,10,11,12,6,5,13,14,15,16,17,18,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,2,34,35,36,37,38,39,0]))),editor:(0,H.lazy)(()=>l(()=>import(`./code-editor-DQiPtcNd.js`).then(e=>({default:e.CodeEditor})),__vite__mapDeps([40,1,9,10,11,12,6,5,13,14,15,16,17,18,41,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,2,36,42,43,44]))),database:(0,H.lazy)(()=>l(()=>import(`./database-viewer-Camu01H4.js`).then(e=>({default:e.DatabaseViewer})),__vite__mapDeps([45,1,41,6,21,35,36,5,46,44,2,47]))),sqlite:(0,H.lazy)(()=>l(()=>import(`./sqlite-viewer-srSbGg1D.js`).then(e=>({default:e.SqliteViewer})),__vite__mapDeps([48,1,41,6,49,36,21,42,5,46,44,2]))),postgres:(0,H.lazy)(()=>l(()=>import(`./postgres-viewer-BQdPMowm.js`).then(e=>({default:e.PostgresViewer})),__vite__mapDeps([50,1,49,6,36,21,42,5,2]))),"git-graph":(0,H.lazy)(()=>l(()=>import(`./git-graph-BnFbmpom.js`).then(e=>({default:e.GitGraph})),__vite__mapDeps([51,1,11,12,6,5,4,21,35,39,2]))),"git-diff":(0,H.lazy)(()=>l(()=>import(`./diff-viewer-CTwcVIP_.js`).then(e=>({default:e.DiffViewer})),__vite__mapDeps([52,1,41,6,21,37,43,5,2]))),settings:(0,H.lazy)(()=>l(()=>import(`./settings-tab-BNoboN6E.js`).then(e=>({default:e.SettingsTab})),__vite__mapDeps([53,11,1,12,6,5,2,0]))),ports:(0,H.lazy)(()=>l(()=>import(`./port-forwarding-tab-Bgr8dmsw.js`).then(e=>({default:e.PortForwardingTab})),__vite__mapDeps([54,1,21,6,38,12,5,2]))),"extension-webview":(0,H.lazy)(()=>l(()=>import(`./extension-webview-pU1xJyoc.js`).then(e=>({default:e.ExtensionWebview})),__vite__mapDeps([55,1,5,6])))};function lm({panelId:e,projectName:t}){let n=Q(t=>t.panels[e]),r=Q(t=>t.focusedPanelId===e),i=Q(e=>(e.currentProject===t?e.grid:e.projectGrids[t]??[[]]).flat().length);return n?(0,W.jsxs)(`div`,{className:L(`flex flex-col h-full overflow-hidden`,i>1&&`border border-transparent`,i>1&&r&&`border-primary/30`),onMouseDown:()=>{Q.getState().focusedPanelId!==e&&Q.getState().setFocusedPanel(e)},children:[(0,W.jsx)(am,{panelId:e}),(0,W.jsxs)(`div`,{className:`flex-1 overflow-hidden relative`,"data-panel-drop-zone":e,children:[n.tabs.length===0?(0,W.jsx)(pm,{panelId:e}):n.tabs.map(e=>{let t=cm[e.type];return(0,W.jsx)(`div`,{className:e.id===n.activeTabId?`h-full w-full`:`hidden`,children:(0,W.jsx)(H.Suspense,{fallback:(0,W.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,W.jsx)(V,{className:`size-6 animate-spin text-primary`})}),children:(0,W.jsx)(t,{metadata:e.metadata,tabId:e.id})})},e.id)}),(0,W.jsx)(om,{panelId:e})]})]}):null}function um(e){try{let t=new Date(e),n=new Date().getTime()-t.getTime(),r=Math.floor(n/6e4);if(r<1)return`Just now`;if(r<60)return`${r}m ago`;let i=Math.floor(r/60);if(i<24)return`${i}h ago`;let a=Math.floor(i/24);return a<7?`${a}d ago`:t.toLocaleDateString(void 0,{month:`short`,day:`numeric`})}catch{return``}}var dm=5,fm=20;function pm({panelId:e}){let t=ap(e=>e.activeProject),[n,r]=(0,H.useState)([]),[i,o]=(0,H.useState)(!1),[s,c]=(0,H.useState)(!1),l=(0,H.useCallback)(async()=>{if(t?.name){o(!0);try{r((await B.get(`${z(t.name)}/chat/sessions?limit=${fm}`)).sessions.slice(0,fm))}catch{}finally{o(!1)}}},[t?.name]);(0,H.useEffect)(()=>{l()},[l]);let u=(0,H.useCallback)(async(e,n)=>{if(e.stopPropagation(),!t?.name)return;let i=`${z(t.name)}/chat/sessions/${n.id}/pin`;try{n.pinned?await B.del(i):await B.put(i),r(e=>e.map(e=>e.id===n.id?{...e,pinned:!e.pinned}:e).sort((e,t)=>e.pinned&&!t.pinned?-1:!e.pinned&&t.pinned?1:new Date(t.createdAt).getTime()-new Date(e.createdAt).getTime()))}catch{}},[t?.name]);function d(n){let r=n!==`settings`&&t?{projectName:t.name}:void 0;Q.getState().openTab({type:n,title:sm.find(e=>e.type===n)?.label??n,metadata:r,projectId:t?.name??null,closable:!0},e)}function f(n){Q.getState().openTab({type:`chat`,title:n.title||`Chat`,projectId:t?.name??null,metadata:{projectName:t?.name,sessionId:n.id,providerId:n.providerId},closable:!0},e)}let p=n.filter(e=>e.pinned),m=n.filter(e=>!e.pinned),h=s?m:m.slice(0,dm),g=m.length>dm;function _(e){return(0,W.jsxs)(`button`,{onClick:()=>f(e),className:`group flex items-center gap-2.5 w-full px-3 py-2.5 text-left hover:bg-surface-elevated active:bg-surface-elevated transition-colors border-b border-border/50 last:border-0`,children:[(0,W.jsx)(vt,{className:`size-3.5 shrink-0 text-text-subtle`}),(0,W.jsx)(`span`,{className:`flex-1 min-w-0 text-xs font-medium truncate text-text-primary`,children:e.title||`Untitled`}),e.updatedAt&&(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0`,children:um(e.updatedAt)}),(0,W.jsx)(`span`,{role:`button`,tabIndex:0,onClick:t=>u(t,e),className:`p-1 rounded transition-colors shrink-0 ${e.pinned?`text-primary hover:text-primary/70`:`text-text-subtle can-hover:opacity-0 can-hover:group-hover:opacity-100 hover:text-text-primary`}`,"aria-label":e.pinned?`Unpin session`:`Pin session`,children:e.pinned?(0,W.jsx)(kt,{className:`size-3`}):(0,W.jsx)(At,{className:`size-3`})})]},e.id)}return(0,W.jsx)(`div`,{className:`flex flex-col h-full overflow-y-auto text-text-secondary`,children:(0,W.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-6 px-4 flex-1`,children:[(0,W.jsx)(`p`,{className:`text-sm`,children:`Open a tab to get started`}),(0,W.jsx)(`div`,{className:`grid grid-cols-3 gap-2 w-full max-w-sm`,children:sm.map(e=>{let t=e.icon;return(0,W.jsxs)(`button`,{onClick:()=>d(e.type),className:`flex flex-col items-center justify-center gap-1.5 px-2 py-3 rounded-md border border-border bg-surface hover:bg-surface-elevated active:bg-surface-elevated text-xs text-foreground transition-colors`,children:[(0,W.jsx)(t,{className:`size-5`}),e.label]},e.type)})}),t&&!i&&p.length>0&&(0,W.jsxs)(`div`,{className:`flex flex-col gap-2 w-full max-w-sm`,children:[(0,W.jsx)(`p`,{className:`text-xs text-text-subtle text-center`,children:`Pinned`}),(0,W.jsx)(`div`,{className:`w-full rounded-md border border-border bg-surface overflow-hidden`,children:p.map(_)})]}),t&&!i&&h.length>0&&(0,W.jsxs)(`div`,{className:`flex flex-col gap-2 w-full max-w-sm`,children:[(0,W.jsx)(`p`,{className:`text-xs text-text-subtle text-center`,children:`Recent chats`}),(0,W.jsx)(`div`,{className:`w-full rounded-md border border-border bg-surface overflow-hidden`,children:h.map(_)}),g&&(0,W.jsxs)(`button`,{onClick:()=>c(!s),className:`flex items-center justify-center gap-1 text-[11px] text-text-subtle hover:text-text-primary transition-colors py-1`,children:[s?(0,W.jsx)(Oe,{className:`size-3`}):(0,W.jsx)(a,{className:`size-3`}),s?`Show less`:`Show more (${m.length-dm})`]})]})]})})}function mm({projectName:e}){let t=ep(`(min-width: 768px)`),n=Q(t=>t.currentProject===e?t.grid:t.projectGrids[e]??[[]]),r=Q(e=>e.focusedPanelId),i=n.flat().length;if((0,H.useEffect)(()=>{if(i===0){let e=Pf();Q.setState(t=>({panels:{...t.panels,[e.id]:e},grid:[[e.id]],focusedPanelId:e.id}))}},[i]),i===0)return null;if(!t){let t=n.flat(),i=t.includes(r)?r:t[0];return i?(0,W.jsx)(lm,{panelId:i,projectName:e}):null}return i===1&&n[0]?.[0]?(0,W.jsx)(lm,{panelId:n[0][0],projectName:e}):(0,W.jsx)(Ef,{orientation:`vertical`,style:{height:`100%`},children:n.map((t,r)=>(0,W.jsx)(hm,{row:t,rowIdx:r,totalRows:n.length,projectName:e},`row-${r}`))})}function hm({row:e,rowIdx:t,totalRows:n,projectName:r}){return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(kf,{minSize:`15%`,defaultSize:`${Math.round(100/n)}%`,children:e.length===1?(0,W.jsx)(lm,{panelId:e[0],projectName:r}):(0,W.jsx)(Ef,{orientation:`horizontal`,children:e.map((t,n)=>(0,W.jsx)(gm,{panelId:t,colIdx:n,totalCols:e.length,projectName:r},t))})}),t<n-1&&(0,W.jsx)(_m,{orientation:`horizontal`})]})}function gm({panelId:e,colIdx:t,totalCols:n,projectName:r}){return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(kf,{minSize:`15%`,defaultSize:`${Math.round(100/n)}%`,children:(0,W.jsx)(lm,{panelId:e,projectName:r})}),t<n-1&&(0,W.jsx)(_m,{orientation:`vertical`})]})}function _m({orientation:e}){let t=e===`vertical`;return(0,W.jsx)(Mf,{className:`
|
|
15
15
|
group/handle relative flex items-center justify-center
|
|
16
16
|
${t?`w-1 cursor-col-resize`:`h-1 cursor-row-resize`}
|
|
17
17
|
bg-border/30 hover:bg-primary/30 active:bg-primary/50
|
|
18
18
|
transition-colors duration-150
|
|
19
|
-
`,children:(0,W.jsx)(`div`,{className:`absolute can-hover:opacity-0 can-hover:group-hover/handle:opacity-70 transition-opacity text-foreground/50`,children:t?(0,W.jsx)(at,{className:`size-3`}):(0,W.jsx)(it,{className:`size-3`})})})}var vm=c((e,t)=>({statusBarItems:[],addStatusBarItem:t=>e(e=>({statusBarItems:[...e.statusBarItems.filter(e=>e.id!==t.id),t]})),removeStatusBarItem:t=>e(e=>({statusBarItems:e.statusBarItems.filter(e=>e.id!==t)})),updateStatusBarItem:(t,n)=>e(e=>({statusBarItems:e.statusBarItems.map(e=>e.id===t?{...e,...n}:e)})),treeViews:{},updateTree:(t,n)=>e(e=>({treeViews:{...e.treeViews,[t]:n}})),updateTreeChildren:(t,n,r)=>e(e=>{let i=e.treeViews[t];if(!i)return e;let a=e=>e.map(e=>e.id===n?{...e,children:r,collapsibleState:`expanded`}:e.children?{...e,children:a(e.children)}:e);return{treeViews:{...e.treeViews,[t]:a(i)}}}),removeTree:t=>e(e=>{let{[t]:n,...r}=e.treeViews;return{treeViews:r}}),webviewPanels:{},addWebviewPanel:t=>e(e=>({webviewPanels:{...e.webviewPanels,[t.id]:t}})),removeWebviewPanel:t=>e(e=>{let{[t]:n,...r}=e.webviewPanels;return{webviewPanels:r}}),updateWebviewPanel:(t,n)=>e(e=>{let r=e.webviewPanels[t];return r?{webviewPanels:{...e.webviewPanels,[t]:{...r,...n}}}:e}),contributions:null,setContributions:t=>e({contributions:t}),quickPick:null,showQuickPick:(n,r={})=>{let i=t().quickPick;return i&&i.resolve(void 0),new Promise(t=>{e({quickPick:{items:n,options:r,resolve:t}})})},resolveQuickPick:n=>{let r=t().quickPick;r&&(r.resolve(n),e({quickPick:null}))},inputBox:null,showInputBox:(n={})=>{let r=t().inputBox;return r&&r.resolve(void 0),new Promise(t=>{e({inputBox:{options:n,resolve:t}})})},resolveInputBox:n=>{let r=t().inputBox;r&&(r.resolve(n),e({inputBox:null}))},clearExtension:t=>e(e=>{let n={...e.webviewPanels};for(let[e,r]of Object.entries(n))r.extensionId===t&&delete n[e];return{statusBarItems:e.statusBarItems.filter(e=>e.extensionId!==t),webviewPanels:n}})})),ym=c((e,t)=>({tree:[],loading:!1,error:null,expandedPaths:new Set,selectedFiles:[],fetchTree:async t=>{e({loading:!0,error:null});try{e({tree:await B.get(`${z(t)}/files/tree?depth=3`),loading:!1})}catch(t){e({error:t instanceof Error?t.message:`Failed to load files`,loading:!1})}},toggleExpand:n=>{let r=new Set(t().expandedPaths);r.has(n)?r.delete(n):r.add(n),e({expandedPaths:r})},setExpanded:(n,r)=>{let i=new Set(t().expandedPaths);r?i.add(n):i.delete(n),e({expandedPaths:i})},toggleFileSelect:n=>{let r=t().selectedFiles;r.indexOf(n)>=0?e({selectedFiles:r.filter(e=>e!==n)}):e({selectedFiles:r.length>=2?[r[1],n]:[...r,n]})},clearSelection:()=>e({selectedFiles:[]}),reset:()=>e({tree:[],expandedPaths:new Set,error:null,selectedFiles:[]})}));function bm({className:e,children:t,...n}){return(0,W.jsxs)(sc,{"data-slot":`scroll-area`,className:L(`relative`,e),...n,children:[(0,W.jsx)(cc,{"data-slot":`scroll-area-viewport`,className:`size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 [&>div]:!block`,children:t}),(0,W.jsx)(xm,{}),(0,W.jsx)(lc,{})]})}function xm({className:e,orientation:t=`vertical`,...n}){return(0,W.jsx)(Fs,{"data-slot":`scroll-area-scrollbar`,orientation:t,className:L(`flex touch-none p-px transition-colors select-none`,t===`vertical`&&`h-full w-1.5 border-l border-l-transparent`,t===`horizontal`&&`h-1.5 flex-col border-t border-t-transparent`,e),...n,children:(0,W.jsx)(Ks,{"data-slot":`scroll-area-thumb`,className:`relative flex-1 rounded-full bg-border`})})}function Sm({...e}){return(0,W.jsx)(To,{"data-slot":`context-menu`,...e})}function Cm({...e}){return(0,W.jsx)(Eo,{"data-slot":`context-menu-trigger`,...e})}function wm({className:e,...t}){return(0,W.jsx)(Do,{children:(0,W.jsx)(Oo,{"data-slot":`context-menu-content`,className:L(`z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...t})})}function Tm({className:e,inset:t,variant:n=`default`,...r}){return(0,W.jsx)(ko,{"data-slot":`context-menu-item`,"data-inset":t,"data-variant":n,className:L(`relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!`,e),...r})}function Em({className:e,...t}){return(0,W.jsx)(Ao,{"data-slot":`context-menu-separator`,className:L(`-mx-1 my-1 h-px bg-border`,e),...t})}var Dm=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,Om=re,km=((e,t)=>n=>{if(t?.variants==null)return Om(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=Dm(t)||Dm(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return Om(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)})(`inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/90`,destructive:`bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40`,outline:`border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-9 px-4 py-2 has-[>svg]:px-3`,xs:`h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3`,sm:`h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5`,lg:`h-10 rounded-md px-6 has-[>svg]:px-4`,icon:`size-9`,"icon-xs":`size-6 rounded-md [&_svg:not([class*='size-'])]:size-3`,"icon-sm":`size-8`,"icon-lg":`size-10`}},defaultVariants:{variant:`default`,size:`default`}});function $({className:e,variant:t=`default`,size:n=`default`,asChild:r=!1,...i}){return(0,W.jsx)(r?g:`button`,{"data-slot":`button`,"data-variant":t,"data-size":n,className:L(km({variant:t,size:n,className:e})),...i})}function Am({...e}){return(0,W.jsx)(Ar,{"data-slot":`dialog`,...e})}function jm({...e}){return(0,W.jsx)(jr,{"data-slot":`dialog-trigger`,...e})}function Mm({...e}){return(0,W.jsx)(Mr,{"data-slot":`dialog-portal`,...e})}function Nm({className:e,...t}){return(0,W.jsx)(Nr,{"data-slot":`dialog-overlay`,className:L(`fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0`,e),...t})}function Pm({className:e,children:t,showCloseButton:n=!0,...r}){return(0,W.jsxs)(Mm,{"data-slot":`dialog-portal`,children:[(0,W.jsx)(Nm,{}),(0,W.jsxs)(Pr,{"data-slot":`dialog-content`,className:L(`fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background text-foreground p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg`,e),...r,children:[t,n&&(0,W.jsxs)(Lr,{"data-slot":`dialog-close`,className:`absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,children:[(0,W.jsx)(o,{}),(0,W.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function Fm({className:e,...t}){return(0,W.jsx)(`div`,{"data-slot":`dialog-header`,className:L(`flex flex-col gap-2 text-center sm:text-left`,e),...t})}function Im({className:e,showCloseButton:t=!1,children:n,...r}){return(0,W.jsxs)(`div`,{"data-slot":`dialog-footer`,className:L(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,e),...r,children:[n,t&&(0,W.jsx)(Lr,{asChild:!0,children:(0,W.jsx)($,{variant:`outline`,children:`Close`})})]})}function Lm({className:e,...t}){return(0,W.jsx)(Fr,{"data-slot":`dialog-title`,className:L(`text-lg leading-none font-semibold`,e),...t})}function Rm({className:e,...t}){return(0,W.jsx)(Ir,{"data-slot":`dialog-description`,className:L(`text-sm text-muted-foreground`,e),...t})}function zm({className:e,type:t,...n}){return(0,W.jsx)(`input`,{type:t,"data-slot":`input`,className:L(`h-9 w-full min-w-0 rounded-lg border border-border bg-surface px-3 py-2 text-base md:text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:border-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,`selection:bg-primary selection:text-primary-foreground`,`file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground`,`aria-invalid:border-destructive`,e),...n})}function Bm({action:e,node:t,projectName:n,onClose:r,onRefresh:i}){let[a,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(null),d=(0,H.useRef)(null);(0,H.useEffect)(()=>{o(e===`rename`?t.name:``)},[e,t.name]),(0,H.useEffect)(()=>{let e=setTimeout(()=>d.current?.focus(),100);return()=>clearTimeout(e)},[]);async function f(e){if(a.trim()){c(!0),u(null);try{let o=t.type===`directory`?t.path:t.path.split(`/`).slice(0,-1).join(`/`),s=o?`${o}/${a.trim()}`:a.trim();await B.post(`${z(n)}/files/create`,{path:s,type:e}),i(),r()}catch(e){u(e instanceof Error?e.message:`Failed to create`)}finally{c(!1)}}}async function p(){if(!a.trim()||a.trim()===t.name){r();return}c(!0),u(null);try{let e=t.path.split(`/`).slice(0,-1).join(`/`),o=e?`${e}/${a.trim()}`:a.trim();await B.post(`${z(n)}/files/rename`,{oldPath:t.path,newPath:o}),i(),r()}catch(e){u(e instanceof Error?e.message:`Failed to rename`)}finally{c(!1)}}async function m(){c(!0),u(null);try{await B.del(`${z(n)}/files/delete`,{path:t.path}),i(),r()}catch(e){u(e instanceof Error?e.message:`Failed to delete`)}finally{c(!1)}}function h(t){t.key===`Enter`&&(e===`new-file`?f(`file`):e===`new-folder`?f(`directory`):e===`rename`&&p()),t.key===`Escape`&&r()}if(e===`delete`)return(0,W.jsx)(Am,{open:!0,onOpenChange:e=>!e&&r(),children:(0,W.jsxs)(Pm,{children:[(0,W.jsxs)(Fm,{children:[(0,W.jsxs)(Lm,{children:[`Delete `,t.type===`directory`?`Folder`:`File`]}),(0,W.jsxs)(Rm,{children:[`Are you sure you want to delete`,` `,(0,W.jsx)(`span`,{className:`font-mono font-semibold`,children:t.name}),`?`,t.type===`directory`&&` This will delete all contents.`]})]}),l&&(0,W.jsx)(`p`,{className:`text-sm text-error`,children:l}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,onClick:r,disabled:s,children:`Cancel`}),(0,W.jsx)($,{variant:`destructive`,onClick:m,disabled:s,children:s?`Deleting...`:`Delete`})]})]})});let g=e===`new-file`?`New File`:e===`new-folder`?`New Folder`:`Rename`,_=e===`rename`?t.name:e===`new-file`?`filename.ts`:`folder-name`;return(0,W.jsx)(Am,{open:!0,onOpenChange:e=>!e&&r(),children:(0,W.jsxs)(Pm,{children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{children:g}),(0,W.jsx)(Rm,{children:e===`rename`?`Rename "${t.name}" to:`:`Create in ${t.type===`directory`?t.path||`/`:t.path.split(`/`).slice(0,-1).join(`/`)||`/`}`})]}),(0,W.jsx)(zm,{ref:d,value:a,onChange:e=>o(e.target.value),onKeyDown:h,placeholder:_,disabled:s}),l&&(0,W.jsx)(`p`,{className:`text-sm text-error`,children:l}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,onClick:r,disabled:s,children:`Cancel`}),(0,W.jsx)($,{onClick:()=>{e===`new-file`?f(`file`):e===`new-folder`?f(`directory`):p()},disabled:s||!a.trim(),children:s?`Saving...`:e===`rename`?`Rename`:`Create`})]})]})})}async function Vm(e,t){let{token:n}=await B.post(`${z(e)}/files/download/token`);Um(`${z(e)}/files/raw?path=${encodeURIComponent(t)}&download=true&dl_token=${encodeURIComponent(n)}`,t.split(`/`).pop()??`download`)}async function Hm(e,t){let{token:n}=await B.post(`${z(e)}/files/download/token`),r=t.split(`/`).pop()??`folder`;Um(`${z(e)}/files/download/zip?path=${encodeURIComponent(t)}&dl_token=${encodeURIComponent(n)}`,`${r}.zip`)}function Um(e,t){let n=document.createElement(`a`);n.href=e,n.download=t,n.style.display=`none`,document.body.appendChild(n),n.click(),document.body.removeChild(n)}var Wm={ts:Ge,tsx:Ge,js:Ge,jsx:Ge,py:Ge,rs:Ge,go:Ge,json:We,md:qe,txt:qe,yaml:Je,yml:Je,html:Ge,css:Ge,scss:Ge};function Gm(e){return Wm[e.split(`.`).pop()?.toLowerCase()??``]??Ye}function Km({node:e,depth:t,projectName:n,onAction:r,onFileOpen:i}){let{expandedPaths:o,toggleExpand:c,selectedFiles:l,toggleFileSelect:u}=ym(),d=op(e=>e.openTab),f=o.has(e.path),p=e.type===`directory`,m=l.includes(e.path),h=e.ignored===!0;function g(t){if(p){c(e.path);return}if(t.metaKey||t.ctrlKey){u(e.path);return}let r=e.name.split(`.`).pop()?.toLowerCase()??``;d({type:r===`db`||r===`sqlite`||r===`sqlite3`?`sqlite`:`editor`,title:e.name,metadata:{filePath:e.path,projectName:n},projectId:n,closable:!0}),i?.()}let _=p?f?Ze:et:Gm(e.name),v=e.children?[...e.children].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1):[];return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(Sm,{children:[(0,W.jsx)(Cm,{asChild:!0,children:(0,W.jsxs)(`button`,{onClick:g,className:L(`flex items-center w-full gap-1.5 px-2 py-1 rounded-sm text-sm`,`min-h-[32px] hover:bg-surface-elevated transition-colors text-left`,`select-none`,h&&`opacity-40`,m&&`bg-primary/15 ring-1 ring-primary/40`),style:{paddingLeft:`${t*16+8}px`},children:[p?f?(0,W.jsx)(a,{className:`size-3.5 shrink-0 text-text-subtle`}):(0,W.jsx)(s,{className:`size-3.5 shrink-0 text-text-subtle`}):(0,W.jsx)(`span`,{className:`w-3.5 shrink-0`}),(0,W.jsx)(_,{className:L(`size-4 shrink-0`,p?`text-primary`:`text-text-secondary`)}),(0,W.jsx)(`span`,{className:`truncate`,children:e.name})]})}),(0,W.jsxs)(wm,{children:[p&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Tm,{onClick:()=>r(`new-file`,e),children:`New File`}),(0,W.jsx)(Tm,{onClick:()=>r(`new-folder`,e),children:`New Folder`}),(0,W.jsx)(Em,{})]}),(0,W.jsx)(Tm,{onClick:()=>r(`rename`,e),children:`Rename`}),(0,W.jsx)(Tm,{variant:`destructive`,onClick:()=>r(`delete`,e),children:`Delete`}),(0,W.jsx)(Em,{}),(0,W.jsx)(Tm,{onClick:()=>r(`copy-path`,e),children:`Copy Path`}),(0,W.jsx)(Em,{}),(0,W.jsxs)(Tm,{onClick:()=>r(`download`,e),children:[(0,W.jsx)(ze,{className:`size-3.5 mr-2`}),`Download`,p?` as Zip`:``]}),!p&&l.length===2&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Em,{}),(0,W.jsx)(Tm,{onClick:()=>r(`compare-selected`,e),children:`Compare Selected`})]})]})]}),p&&f&&v.map(e=>(0,W.jsx)(Km,{node:e,depth:t+1,projectName:n,onAction:r,onFileOpen:i},e.path))]})}function qm({onFileOpen:e}={}){let{tree:t,loading:n,error:r,fetchTree:i,reset:a,selectedFiles:o,clearSelection:s}=ym(),c=ap(e=>e.activeProject),l=op(e=>e.openTab),[u,d]=(0,H.useState)(null),f=(0,H.useCallback)(()=>{c&&i(c.name)},[c,i]);(0,H.useEffect)(()=>{c&&(a(),f())},[c?.name]),(0,H.useEffect)(()=>{let e=()=>{c&&i(c.name)};return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[c,i]);function p(e,t){if(e===`copy-path`){navigator.clipboard.writeText(t.path).catch(()=>{});return}if(e===`download`){t.type===`directory`?Hm(c.name,t.path):Vm(c.name,t.path);return}if(e===`compare-selected`&&o.length===2){let e=o[0],t=o[1];l({type:`git-diff`,title:`Compare ${ie(e)} vs ${ie(t)}`,closable:!0,metadata:{projectName:c.name,file1:e,file2:t},projectId:c.name}),s();return}d({action:e,node:t})}if(!c)return(0,W.jsx)(`div`,{className:`p-3 text-xs text-text-subtle`,children:`Select a project to browse files.`});if(n&&t.length===0)return(0,W.jsxs)(`div`,{className:`flex items-center gap-2 p-3 text-xs text-text-secondary`,children:[(0,W.jsx)(V,{className:`size-3 animate-spin`}),`Loading files...`]});if(r)return(0,W.jsxs)(`div`,{className:`p-3 text-xs text-error`,children:[r,(0,W.jsx)(`button`,{onClick:f,className:`block mt-1 text-primary underline`,children:`Retry`})]});let m=[...t].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(bm,{className:`flex-1`,children:(0,W.jsxs)(`div`,{className:`py-1`,children:[m.map(t=>(0,W.jsx)(Km,{node:t,depth:0,projectName:c.name,onAction:p,onFileOpen:e},t.path)),m.length===0&&(0,W.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:`Empty project.`})]})}),u&&(0,W.jsx)(Bm,{action:u.action,node:u.node,projectName:c.name,onClose:()=>d(null),onRefresh:f})]})}function Jm({className:e,...t}){return(0,W.jsx)(Cs,{"data-slot":`label`,className:L(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,e),...t})}function Ym({open:e,onOpenChange:t,projectName:n,onCreated:r}){let[i,a]=(0,H.useState)(``),[s,c]=(0,H.useState)(`new`),[l,u]=(0,H.useState)(``),[d,f]=(0,H.useState)(``),[p,m]=(0,H.useState)([]),[h,g]=(0,H.useState)(!1),[_,v]=(0,H.useState)(null);(0,H.useEffect)(()=>{!e||!n||B.get(`${z(n)}/git/branches`).then(e=>{let t=e.filter(e=>!e.remote).map(e=>e.name);m(t),t.length>0&&!d&&f(t[0])}).catch(()=>m([]))},[e,n]);function y(){a(``),c(`new`),u(``),v(null)}function b(){y(),t(!1)}async function x(){if(!i.trim()){v(`Worktree path is required`);return}let e=s===`existing`?d:void 0,t=s===`new`&&l.trim()?l.trim():void 0;g(!0),v(null);try{await B.post(`${z(n)}/git/worktree/add`,{path:i.trim(),branch:e,newBranch:t}),r(),b()}catch(e){v(e instanceof Error?e.message:`Failed to create worktree`)}finally{g(!1)}}let S=(0,W.jsxs)(`div`,{className:`space-y-4`,children:[_&&(0,W.jsx)(`p`,{className:`text-xs text-destructive bg-destructive/10 px-3 py-2 rounded-md`,children:_}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(Jm,{htmlFor:`wt-path`,children:`Worktree Path`}),(0,W.jsx)(zm,{id:`wt-path`,placeholder:`../my-feature`,value:i,onChange:e=>a(e.target.value),autoFocus:!0,className:`w-full`}),(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Relative or absolute path for the new worktree directory`})]}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(Jm,{children:`Branch`}),(0,W.jsxs)(`div`,{className:`flex gap-3`,children:[(0,W.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,W.jsx)(`input`,{type:`radio`,checked:s===`new`,onChange:()=>c(`new`),className:`accent-primary`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Create new branch`})]}),(0,W.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,W.jsx)(`input`,{type:`radio`,checked:s===`existing`,onChange:()=>c(`existing`),className:`accent-primary`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Use existing branch`})]})]}),s===`new`?(0,W.jsx)(zm,{placeholder:`feature/my-branch`,value:l,onChange:e=>u(e.target.value),className:`w-full`}):(0,W.jsxs)(`select`,{value:d,onChange:e=>f(e.target.value),className:`w-full h-9 px-3 rounded-md border border-input bg-transparent text-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,children:[p.length===0&&(0,W.jsx)(`option`,{value:``,children:`No branches available`}),p.map(e=>(0,W.jsx)(`option`,{value:e,children:e},e))]})]})]}),C=(0,W.jsxs)(`div`,{className:`flex gap-2 justify-end pt-2`,children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:b,disabled:h,children:`Cancel`}),(0,W.jsxs)($,{size:`sm`,onClick:x,disabled:h||!i.trim(),children:[h?(0,W.jsx)(V,{className:`size-3 animate-spin mr-1`}):null,`Create Worktree`]})]});return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Am,{open:e,onOpenChange:e=>{e||b()},children:(0,W.jsxs)(Pm,{className:`hidden md:grid sm:max-w-md`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Add Worktree`})}),S,(0,W.jsx)(Im,{children:C})]})}),e&&(0,W.jsxs)(`div`,{className:`md:hidden`,children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/50`,onClick:b}),(0,W.jsxs)(`div`,{className:L(`fixed bottom-0 left-0 right-0 z-50 bg-background rounded-t-2xl border-t border-border shadow-2xl`,`animate-in slide-in-from-bottom-2 duration-200`),children:[(0,W.jsx)(`div`,{className:`flex justify-center pt-3 pb-1`,children:(0,W.jsx)(`div`,{className:`w-10 h-1 rounded-full bg-border`})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,W.jsx)(`span`,{className:`text-sm font-semibold`,children:`Add Worktree`}),(0,W.jsx)(`button`,{onClick:b,className:`flex items-center justify-center size-7 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,W.jsx)(o,{className:`size-4`})})]}),(0,W.jsxs)(`div`,{className:`px-4 py-4 space-y-4 max-h-[70vh] overflow-y-auto`,children:[S,C]})]})]})]})}function Xm({projectName:e,projectPath:t}){let[n,r]=(0,H.useState)(!1),[i,o]=(0,H.useState)([]),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(null),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(!1),v=(0,H.useCallback)(async()=>{if(e){l(!0),d(null);try{o(await B.get(`${z(e)}/git/worktrees`))}catch(e){d(e instanceof Error?e.message:`Failed to load worktrees`)}finally{l(!1)}}},[e]);(0,H.useEffect)(()=>{n&&v()},[n,v]);async function y(t=!1){if(m){_(!0);try{await B.post(`${z(e)}/git/worktree/remove`,{path:m.path,force:t}),h(null),await v()}catch(e){d(e instanceof Error?e.message:`Failed to remove worktree`),h(null)}finally{_(!1)}}}async function b(){try{await B.post(`${z(e)}/git/worktree/prune`,{}),await v()}catch(e){d(e instanceof Error?e.message:`Prune failed`)}}return(0,W.jsxs)(`div`,{className:`border-t border-border`,children:[(0,W.jsxs)(`button`,{type:`button`,className:`flex items-center justify-between w-full px-3 py-2 hover:bg-muted/50 transition-colors`,onClick:()=>r(e=>!e),children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[n?(0,W.jsx)(a,{className:`size-3.5 text-muted-foreground`}):(0,W.jsx)(s,{className:`size-3.5 text-muted-foreground`}),(0,W.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase`,children:`Worktrees`}),i.length>0&&(0,W.jsx)(`span`,{className:`text-[10px] bg-muted text-muted-foreground rounded px-1`,children:i.length})]}),(0,W.jsx)(`div`,{className:`flex items-center gap-0.5`,children:n&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{role:`button`,tabIndex:0,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-foreground transition-colors`,onClick:e=>{e.stopPropagation(),b()},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),b())},title:`Prune stale worktrees`,"aria-label":`Prune stale worktrees`,children:(0,W.jsx)(Lt,{className:L(`size-3`,c&&`animate-spin`)})}),(0,W.jsx)(`span`,{role:`button`,tabIndex:0,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-foreground transition-colors`,onClick:e=>{e.stopPropagation(),p(!0)},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),p(!0))},title:`Add worktree`,"aria-label":`Add worktree`,children:(0,W.jsx)(Nt,{className:`size-3`})})]})})]}),n&&(0,W.jsxs)(`div`,{className:`pb-1`,children:[u&&(0,W.jsx)(`p`,{className:`text-xs text-destructive px-3 py-1`,children:u}),c&&i.length===0&&(0,W.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 text-muted-foreground`,children:[(0,W.jsx)(V,{className:`size-3.5 animate-spin`}),(0,W.jsx)(`span`,{className:`text-xs`,children:`Loading worktrees...`})]}),!c&&i.length===0&&!u&&(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground px-3 py-1`,children:`No worktrees found.`}),i.map(e=>(0,W.jsx)(Zm,{worktree:e,isActive:!!t&&e.path===t,onRemove:()=>h(e)},e.path)),(0,W.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 w-full px-3 py-2 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors`,onClick:()=>p(!0),children:[(0,W.jsx)(Nt,{className:`size-3.5`}),`Add worktree`]})]}),(0,W.jsx)(Ym,{open:f,onOpenChange:p,projectName:e,onCreated:v}),(0,W.jsx)(Am,{open:!!m,onOpenChange:e=>!e&&h(null),children:(0,W.jsxs)(Pm,{showCloseButton:!1,children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{children:`Remove Worktree`}),(0,W.jsxs)(Rm,{children:[`Remove worktree at`,` `,(0,W.jsx)(`code`,{className:`px-1 py-0.5 rounded bg-muted text-xs font-mono`,children:m?.path}),m?.branch&&(0,W.jsxs)(W.Fragment,{children:[` (branch: `,(0,W.jsx)(`strong`,{children:m.branch}),`)`]}),`? The directory will be deleted.`]})]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:()=>h(null),disabled:g,children:`Cancel`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:()=>y(!0),disabled:g,children:g?(0,W.jsx)(V,{className:`size-3 animate-spin`}):`Force Remove`}),(0,W.jsx)($,{variant:`destructive`,size:`sm`,onClick:()=>y(!1),disabled:g,children:g?(0,W.jsx)(V,{className:`size-3 animate-spin`}):`Remove`})]})]})})]})}function Zm({worktree:e,isActive:t,onRemove:n}){let r=e.branch||e.head.slice(0,7)||`detached`,i=e.path.replace(/^\/home\/[^/]+/,`~`);return(0,W.jsxs)(`div`,{className:L(`group flex items-center gap-2 px-3 py-1.5 hover:bg-muted/50 transition-colors`,t&&`bg-accent/10`),children:[(0,W.jsx)(tt,{className:`size-3.5 text-muted-foreground shrink-0`}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1 min-w-0`,children:[(0,W.jsx)(`span`,{className:`text-xs font-mono truncate`,title:e.branch,children:r}),t&&(0,W.jsx)(Ee,{className:`size-3 text-green-500 shrink-0`}),e.isMain&&(0,W.jsx)(`span`,{className:`text-[10px] bg-muted text-muted-foreground rounded px-1 shrink-0`,children:`main`}),e.locked&&(0,W.jsx)(`span`,{title:e.lockReason??`locked`,children:(0,W.jsx)(ht,{className:`size-3 text-yellow-500 shrink-0`})}),e.prunable&&(0,W.jsx)(`span`,{title:`stale/prunable`,children:(0,W.jsx)(ke,{className:`size-3 text-destructive shrink-0`})})]}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground truncate`,title:e.path,children:i})]}),!e.isMain&&(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-destructive opacity-0 group-hover:opacity-100 can-hover:opacity-0 can-hover:group-hover:opacity-100 transition-all active:scale-95 shrink-0`,onClick:n,title:`Remove worktree`,"aria-label":`Remove worktree`,children:(0,W.jsx)(Xt,{className:`size-3`})})]})}function Qm({...e}){return(0,W.jsx)(ps,{"data-slot":`dropdown-menu`,...e})}function $m({...e}){return(0,W.jsx)(ms,{"data-slot":`dropdown-menu-trigger`,...e})}function eh({className:e,sideOffset:t=4,...n}){return(0,W.jsx)(hs,{children:(0,W.jsx)(gs,{"data-slot":`dropdown-menu-content`,sideOffset:t,className:L(`z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...n})})}function th({className:e,inset:t,variant:n=`default`,...r}){return(0,W.jsx)(_s,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:L(`relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!`,e),...r})}function nh({...e}){return(0,W.jsx)(vs,{"data-slot":`dropdown-menu-sub`,...e})}function rh({className:e,inset:t,children:n,...r}){return(0,W.jsxs)(ys,{"data-slot":`dropdown-menu-sub-trigger`,"data-inset":t,className:L(`flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...r,children:[n,(0,W.jsx)(s,{className:`ml-auto size-4`})]})}function ih({className:e,...t}){return(0,W.jsx)(bs,{"data-slot":`dropdown-menu-sub-content`,className:L(`z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...t})}var ah={M:`text-yellow-500`,A:`text-green-500`,D:`text-red-500`,R:`text-blue-500`,C:`text-purple-500`,"?":`text-gray-400`};function oh(e){let t=[];for(let n of e){let e=n.path.split(`/`),r=t;for(let t=0;t<e.length;t++){let i=e[t],a=e.slice(0,t+1).join(`/`),o=t===e.length-1,s=r.find(e=>e.name===i);s||(s={name:i,fullPath:a,file:o?n:void 0,children:[]},r.push(s)),o&&(s.file=n),r=s.children}}return t}function sh(e){let t=[];e.file&&t.push(e.file);for(let n of e.children)t.push(...sh(n));return t}function ch({metadata:e,tabId:t,onNavigate:n}){let r=e?.projectName,[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(!0),[c,l]=(0,H.useState)(null),[u,d]=(0,H.useState)(``),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(null),{openTab:g}=op(),_=U(e=>e.gitStatusViewMode),v=U(e=>e.setGitStatusViewMode),y=ap(e=>e.projects.find(e=>e.name===r)?.path),b=(0,H.useCallback)(async()=>{if(r)try{s(!0),a(await B.get(`${z(r)}/git/status`)),l(null)}catch(e){l(e instanceof Error?e.message:`Failed to fetch status`)}finally{s(!1)}},[r]);(0,H.useEffect)(()=>{b();let e=setInterval(b,5e3);return()=>clearInterval(e)},[b]);let x=async e=>{if(r){p(!0);try{await B.post(`${z(r)}/git/stage`,{files:e}),await b()}catch(e){l(e instanceof Error?e.message:`Stage failed`)}finally{p(!1)}}},S=async e=>{if(r){p(!0);try{await B.post(`${z(r)}/git/unstage`,{files:e}),await b()}catch(e){l(e instanceof Error?e.message:`Unstage failed`)}finally{p(!1)}}},C=async e=>{if(r){p(!0);try{await B.post(`${z(r)}/git/discard`,{files:e}),await b()}catch(e){l(e instanceof Error?e.message:`Discard failed`)}finally{p(!1)}}},w=async()=>{m&&(await C(m.files),h(null))},T=async()=>{if(!(!r||!u.trim()||!i?.staged.length)){p(!0);try{await B.post(`${z(r)}/git/commit`,{message:u.trim()}),d(``),await b()}catch(e){l(e instanceof Error?e.message:`Commit failed`)}finally{p(!1)}}},E=async()=>{if(r){p(!0);try{await B.post(`${z(r)}/git/push`,{}),await b()}catch(e){l(e instanceof Error?e.message:`Push failed`)}finally{p(!1)}}},D=async()=>{if(r){p(!0);try{await B.post(`${z(r)}/git/pull`,{}),await b()}catch(e){l(e instanceof Error?e.message:`Pull failed`)}finally{p(!1)}}},O=e=>{g({type:`git-diff`,title:ie(e.path),closable:!0,metadata:{projectName:r,filePath:e.path},projectId:r??null}),n?.()},k=e=>{g({type:`editor`,title:ie(e.path),closable:!0,metadata:{projectName:r,filePath:e.path},projectId:r??null}),n?.()},A=(0,H.useMemo)(()=>[...i?.unstaged??[],...i?.untracked.map(e=>({path:e,status:`?`}))??[]],[i]);return r?o&&!i?(0,W.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,W.jsx)(V,{className:`size-5 animate-spin`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Loading git status...`})]}):c&&!i?(0,W.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-destructive text-sm`,children:[(0,W.jsx)(`p`,{children:c}),(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:b,children:`Retry`})]}):(0,W.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b shrink-0`,children:[(0,W.jsx)(`span`,{className:`text-sm font-medium`,children:i?.current?`On: ${i.current}`:`Git Status`}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsx)($,{variant:_===`flat`?`secondary`:`ghost`,size:`icon-xs`,onClick:()=>v(`flat`),title:`Flat view`,children:(0,W.jsx)(mt,{className:`size-3.5`})}),(0,W.jsx)($,{variant:_===`tree`?`secondary`:`ghost`,size:`icon-xs`,onClick:()=>v(`tree`),title:`Tree view`,children:(0,W.jsx)($e,{className:`size-3.5`})}),(0,W.jsx)($,{variant:`ghost`,size:`icon-xs`,onClick:b,disabled:f,children:(0,W.jsx)(Lt,{className:o?`animate-spin`:``})})]})]}),c&&(0,W.jsx)(`div`,{className:`px-3 py-1.5 text-xs text-destructive bg-destructive/10 shrink-0`,children:c}),r&&(0,W.jsx)(Xm,{projectName:r,projectPath:y}),(0,W.jsx)(bm,{className:`flex-1 overflow-hidden`,children:(0,W.jsxs)(`div`,{className:`p-1.5 space-y-2 overflow-hidden`,children:[(0,W.jsx)(uh,{title:`Staged Changes`,count:i?.staged.length??0,files:i?.staged??[],viewMode:_,actionIcon:(0,W.jsx)(bt,{className:`size-3`}),actionAllIcon:(0,W.jsx)(bt,{className:`size-3`}),actionTitle:`Unstage`,onAction:e=>S([e.path]),onActionAll:i?.staged.length?()=>S(i.staged.map(e=>e.path)):void 0,actionAllLabel:`Unstage All`,onFolderAction:e=>S(e.map(e=>e.path)),onClickFile:O,onOpenFile:k,disabled:f}),(0,W.jsx)(uh,{title:`Changes`,count:A.length,files:A,viewMode:_,actionIcon:(0,W.jsx)(Nt,{className:`size-3`}),actionAllIcon:(0,W.jsx)(Nt,{className:`size-3`}),actionTitle:`Stage`,onAction:e=>x([e.path]),onActionAll:A.length?()=>x(A.map(e=>e.path)):void 0,actionAllLabel:`Stage All`,onFolderAction:e=>x(e.map(e=>e.path)),onClickFile:O,onOpenFile:k,disabled:f,showRevert:!0,onRevert:e=>h({label:e.path,files:[e.path]}),onFolderRevert:(e,t)=>h({label:`${t}/ (${e.length} files)`,files:e.map(e=>e.path)})})]})}),(0,W.jsxs)(`div`,{className:`border-t p-2 space-y-2 shrink-0`,children:[(0,W.jsx)(`textarea`,{className:`w-full h-16 px-3 py-2 text-base md:text-sm text-foreground bg-surface border border-border rounded-lg resize-none focus:outline-none focus:border-ring placeholder:text-muted-foreground`,placeholder:`Commit message...`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&T()}}),(0,W.jsx)($,{size:`sm`,className:`w-full`,disabled:f||!u.trim()||!i?.staged.length,onClick:T,children:f?(0,W.jsx)(V,{className:`size-3 animate-spin`}):`Commit (${i?.staged.length??0})`}),(0,W.jsxs)(`div`,{className:`flex gap-2`,children:[(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`flex-1`,disabled:f,onClick:E,children:[(0,W.jsx)(ve,{className:`size-3`}),`Push`]}),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`flex-1`,disabled:f,onClick:D,children:[(0,W.jsx)(he,{className:`size-3`}),`Pull`]})]})]}),(0,W.jsx)(Am,{open:!!m,onOpenChange:e=>!e&&h(null),children:(0,W.jsxs)(Pm,{showCloseButton:!1,children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{children:`Discard Changes`}),(0,W.jsxs)(Rm,{children:[`Are you sure you want to discard all changes to`,` `,(0,W.jsx)(`code`,{className:`px-1 py-0.5 rounded bg-muted text-sm font-mono`,children:m?.label}),`? This action cannot be undone.`]})]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,onClick:()=>h(null),children:`Cancel`}),(0,W.jsx)($,{variant:`destructive`,onClick:w,disabled:f,children:f?(0,W.jsx)(V,{className:`size-3 animate-spin`}):`Discard`})]})]})})]}):(0,W.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`})}function lh({showRevert:e,onRevert:t,onAction:n,onOpenFile:r,actionIcon:i,actionTitle:a,disabled:o}){return(0,W.jsxs)(`div`,{className:`hidden md:flex absolute right-0 top-0 bottom-0 items-center gap-0.5 pl-6 pr-1 bg-gradient-to-l from-background from-70% to-transparent can-hover:opacity-0 can-hover:group-hover:opacity-100 transition-opacity`,children:[r&&(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-primary active:scale-95 transition-colors`,onClick:e=>{e.stopPropagation(),r()},disabled:o,title:`Open file`,children:(0,W.jsx)(qe,{className:`size-3`})}),e&&t&&(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-destructive active:scale-95 transition-colors`,onClick:e=>{e.stopPropagation(),t()},disabled:o,title:`Discard changes`,children:(0,W.jsx)(Qt,{className:`size-3`})}),(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-accent-foreground active:scale-95 transition-colors`,onClick:e=>{e.stopPropagation(),n()},disabled:o,title:a,children:i})]})}function uh({title:e,count:t,files:n,viewMode:r,actionIcon:i,actionAllIcon:a,actionTitle:o,onAction:s,onActionAll:c,actionAllLabel:l,onFolderAction:u,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h,onFolderRevert:g}){return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between mb-0.5`,children:[(0,W.jsxs)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase`,children:[e,` (`,t,`)`]}),c&&t>0&&(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-accent-foreground active:scale-95 transition-colors`,onClick:c,disabled:p,title:l,children:a})]}),n.length===0?(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground px-1`,children:`No changes`}):r===`flat`?(0,W.jsx)(`div`,{className:`w-full overflow-hidden`,children:n.map(e=>(0,W.jsx)(fh,{file:e,actionIcon:i,actionTitle:o,onAction:s,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h},e.path))}):(0,W.jsx)(ph,{files:n,actionIcon:i,actionTitle:o,onAction:s,onFolderAction:u,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h,onFolderRevert:g})]})}function dh(e,t,n=400){let r=(0,H.useRef)(null),i=(0,H.useRef)(!1),a=(0,H.useRef)(!1),o=(0,H.useCallback)(()=>{r.current&&=(clearTimeout(r.current),null)},[]);return{onTouchStart:(0,H.useCallback)(t=>{i.current=!1,a.current=!1,r.current=setTimeout(()=>{a.current=!0,e()},n)},[e,n]),onTouchMove:(0,H.useCallback)(()=>{i.current=!0,o()},[o]),onTouchEnd:(0,H.useCallback)(e=>{o(),!i.current&&!a.current&&(e.preventDefault(),t())},[o,t])}}function fh({file:e,actionIcon:t,actionTitle:n,onAction:r,onClickFile:i,onOpenFile:a,disabled:o,showRevert:s,onRevert:c,displayName:l}){let[u,d]=(0,H.useState)(!1),f=dh((0,H.useCallback)(()=>d(!0),[]),(0,H.useCallback)(()=>i(e),[i,e])),p=(0,W.jsxs)(`div`,{className:`group relative flex items-center gap-1 hover:bg-muted/50 rounded pl-1 py-px w-full min-w-0`,children:[(0,W.jsx)(`span`,{className:`text-xs font-mono w-4 text-center shrink-0 ${ah[e.status]??``}`,children:e.status}),(0,W.jsx)(`button`,{type:`button`,className:`hidden md:block flex-1 text-left text-xs font-mono truncate hover:underline min-w-0`,onClick:()=>i(e),title:e.path,children:l??e.path}),(0,W.jsx)(`span`,{className:`md:hidden flex-1 text-left text-xs font-mono truncate min-w-0 select-none`,children:l??e.path}),(0,W.jsx)(lh,{showRevert:s,onRevert:c?()=>c(e):void 0,onOpenFile:a?()=>a(e):void 0,onAction:()=>r(e),actionIcon:t,actionTitle:n,disabled:o})]});return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`hidden md:block`,children:p}),(0,W.jsx)(`div`,{className:`md:hidden select-none`,...f,children:(0,W.jsxs)(Qm,{open:u,onOpenChange:d,children:[(0,W.jsx)($m,{asChild:!0,children:p}),(0,W.jsxs)(eh,{align:`start`,className:`min-w-40`,children:[(0,W.jsx)(th,{onClick:()=>i(e),children:`View Diff`}),a&&(0,W.jsx)(th,{onClick:()=>a(e),children:`Open File`}),(0,W.jsx)(th,{onClick:()=>r(e),disabled:o,children:n}),s&&c&&(0,W.jsx)(th,{className:`text-destructive focus:text-destructive`,onClick:()=>c(e),disabled:o,children:`Discard Changes`})]})]})})]})}function ph({files:e,actionIcon:t,actionTitle:n,onAction:r,onFolderAction:i,onClickFile:a,onOpenFile:o,disabled:s,showRevert:c,onRevert:l,onFolderRevert:u}){let d=(0,H.useMemo)(()=>oh(e),[e]);return(0,W.jsx)(`div`,{children:d.map((e,f)=>(0,W.jsx)(mh,{node:e,depth:0,isLast:f===d.length-1,actionIcon:t,actionTitle:n,onAction:r,onFolderAction:i,onClickFile:a,onOpenFile:o,disabled:s,showRevert:c,onRevert:l,onFolderRevert:u},e.fullPath))})}function mh({node:e,depth:t,isLast:n,actionIcon:r,actionTitle:i,onAction:o,onFolderAction:c,onClickFile:l,onOpenFile:u,disabled:d,showRevert:f,onRevert:p,onFolderRevert:m}){let[h,g]=(0,H.useState)(!0),_=e.children.length>0&&!e.file,v=t*12-6,y=`absolute border-dashed border-border`;if(e.file)return(0,W.jsxs)(`div`,{className:`relative`,style:{paddingLeft:t*12},children:[t>0&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`${y} border-l`,style:{left:v,top:0,bottom:n?`50%`:0}}),(0,W.jsx)(`div`,{className:`${y} border-t`,style:{left:v,top:`50%`,width:6}})]}),(0,W.jsx)(fh,{file:e.file,displayName:e.name,actionIcon:r,actionTitle:i,onAction:o,onClickFile:l,onOpenFile:u,disabled:d,showRevert:f,onRevert:p})]});if(_){let _=sh(e);return(0,W.jsxs)(`div`,{className:`relative`,children:[t>0&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`${y} border-l`,style:{left:v,top:0,...n?{height:13}:{bottom:0}}}),(0,W.jsx)(`div`,{className:`${y} border-t`,style:{left:v,top:13,width:8}})]}),(()=>{let n=(0,W.jsxs)(`div`,{className:`group relative flex items-center hover:bg-muted/50 rounded py-0.5`,style:{paddingLeft:t*12+2},children:[(0,W.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 flex-1 min-w-0 text-xs font-mono text-muted-foreground`,onClick:()=>g(!h),children:[h?(0,W.jsx)(a,{className:`size-3.5 shrink-0`}):(0,W.jsx)(s,{className:`size-3.5 shrink-0`}),(0,W.jsx)(`span`,{className:`truncate font-semibold`,children:e.name}),(0,W.jsxs)(`span`,{className:`text-[10px] opacity-60 shrink-0`,children:[`(`,_.length,`)`]})]}),(0,W.jsx)(lh,{showRevert:f,onRevert:m?()=>m(_,e.fullPath):void 0,onAction:()=>c?.(_),actionIcon:r,actionTitle:`${i} ${e.name}/`,disabled:d})]});return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`hidden md:block`,children:n}),(0,W.jsx)(`div`,{className:`md:hidden`,children:(0,W.jsxs)(Qm,{children:[(0,W.jsx)($m,{asChild:!0,children:n}),(0,W.jsxs)(eh,{align:`start`,className:`min-w-40`,children:[(0,W.jsxs)(th,{onClick:()=>c?.(_),disabled:d,children:[i,` `,e.name,`/`]}),m&&(0,W.jsx)(th,{className:`text-destructive focus:text-destructive`,onClick:()=>m(_,e.fullPath),disabled:d,children:`Discard Changes`})]})]})})]})})(),h&&(0,W.jsx)(`div`,{children:e.children.map((n,a)=>(0,W.jsx)(mh,{node:n,depth:t+1,isLast:a===e.children.length-1,actionIcon:r,actionTitle:i,onAction:o,onFolderAction:c,onClickFile:l,onOpenFile:u,disabled:d,showRevert:f,onRevert:p,onFolderRevert:m},n.fullPath))})]})}return null}function hh({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,W.jsx)(J,{"data-slot":`separator`,decorative:n,orientation:t,className:L(`shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px`,e),...r})}function gh({...e}){return(0,W.jsx)(Cl,{"data-slot":`select`,...e})}function _h({...e}){return(0,W.jsx)(Tl,{"data-slot":`select-value`,...e})}function vh({className:e,size:t=`default`,children:n,...r}){return(0,W.jsxs)(wl,{"data-slot":`select-trigger`,"data-size":t,className:L(`flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...r,children:[n,(0,W.jsx)(El,{asChild:!0,children:(0,W.jsx)(a,{className:`size-4 opacity-50`})})]})}function yh({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,W.jsx)(Dl,{children:(0,W.jsxs)(Ol,{"data-slot":`select-content`,className:L(`relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...i,children:[(0,W.jsx)(xh,{}),(0,W.jsx)(kl,{className:L(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1`),children:t}),(0,W.jsx)(Sh,{})]})})}function bh({className:e,children:t,...n}){return(0,W.jsxs)(Al,{"data-slot":`select-item`,className:L(`relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,W.jsx)(`span`,{"data-slot":`select-item-indicator`,className:`absolute right-2 flex size-3.5 items-center justify-center`,children:(0,W.jsx)(Ml,{children:(0,W.jsx)(Ee,{className:`size-4`})})}),(0,W.jsx)(jl,{children:t})]})}function xh({className:e,...t}){return(0,W.jsx)(Nl,{"data-slot":`select-scroll-up-button`,className:L(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,W.jsx)(Oe,{className:`size-4`})})}function Sh({className:e,...t}){return(0,W.jsx)(Pl,{"data-slot":`select-scroll-down-button`,className:L(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,W.jsx)(a,{className:`size-4`})})}var Ch=H.forwardRef(({className:e,...t},n)=>(0,W.jsx)(Yl,{className:L(`peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input`,e),...t,ref:n,children:(0,W.jsx)(Xl,{className:L(`pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0`)})}));Ch.displayName=Yl.displayName;var wh={claude:`C`,cursor:`▶`,codex:`◆`,gemini:`G`};function Th({value:e,onChange:t,projectName:n}){let[r,i]=(0,H.useState)([]),[a,o]=(0,H.useState)(!1),s=(0,H.useRef)(null),c=(0,H.useRef)(0);(0,H.useEffect)(()=>{n&&B.get(`${z(n)}/chat/providers`).then(i).catch(()=>{})},[n]),(0,H.useEffect)(()=>{if(!a)return;let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[a]),(0,H.useEffect)(()=>{a&&(c.current=Math.max(0,r.findIndex(t=>t.id===e)))},[a,e,r]);let l=(0,H.useCallback)(e=>{if(e.key===`Escape`){o(!1);return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=e.key===`ArrowDown`?1:-1;c.current=(c.current+t+r.length)%r.length,(s.current?.querySelector(`[data-idx="${c.current}"]`))?.focus()}if(e.key===`Enter`){e.preventDefault();let n=r[c.current];n&&(t(n.id),o(!1))}},[t,r]);if(r.length<=1)return null;let u=r.find(t=>t.id===e),d=wh[e]||`?`;return(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),o(e=>!e)},className:`inline-flex items-center gap-1 px-2 py-1 rounded-md text-[11px] text-text-subtle hover:text-text-primary hover:bg-surface-elevated transition-colors border border-transparent hover:border-border`,"aria-label":`AI Provider: ${u?.name??e}`,children:[(0,W.jsx)(`span`,{className:`inline-flex h-3.5 w-3.5 items-center justify-center rounded text-[9px] font-bold bg-surface-elevated shrink-0`,children:d}),(0,W.jsx)(`span`,{className:`max-w-[80px] truncate capitalize`,children:u?.name??e})]}),a&&(0,W.jsxs)(`div`,{ref:s,role:`listbox`,"aria-label":`AI Providers`,onKeyDown:l,onMouseDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),className:`absolute bottom-full left-0 mb-1 z-50 w-56 rounded-lg border border-border bg-surface shadow-lg`,children:[(0,W.jsx)(`div`,{className:`px-3 py-2 border-b border-border`,children:(0,W.jsx)(`span`,{className:`text-xs font-medium text-text-secondary`,children:`Provider`})}),(0,W.jsx)(`div`,{className:`py-1`,children:r.map((n,r)=>{let i=wh[n.id]||`?`,a=n.id===e;return(0,W.jsxs)(`button`,{"data-idx":r,role:`option`,"aria-selected":a,tabIndex:0,onClick:()=>{t(n.id),o(!1)},className:`w-full flex items-center gap-3 px-3 py-2 text-left transition-colors hover:bg-surface-elevated focus:bg-surface-elevated focus:outline-none ${a?`bg-surface-elevated`:``}`,children:[(0,W.jsx)(`span`,{className:`inline-flex h-5 w-5 items-center justify-center rounded text-[11px] font-bold bg-surface-elevated text-text-subtle shrink-0`,children:i}),(0,W.jsx)(`span`,{className:`flex-1 text-sm font-medium text-text-primary capitalize`,children:n.name}),a&&(0,W.jsx)(Ee,{className:`size-4 shrink-0 text-primary`})]},n.id)})})]})]})}function Eh({providerId:e}){return(0,W.jsx)(`span`,{className:`inline-flex h-4 w-4 items-center justify-center rounded text-[10px] font-bold bg-surface-elevated text-text-subtle shrink-0`,title:e,children:wh[e]||`?`})}var Dh=[{value:`low`,label:`Low`},{value:`medium`,label:`Medium`},{value:`high`,label:`High`}],Oh=[{value:`bypassPermissions`,label:`Bypass permissions (default)`},{value:`default`,label:`Ask before edits`},{value:`acceptEdits`,label:`Edit automatically`},{value:`plan`,label:`Plan mode`}],kh={claude:`Claude`,cursor:`Cursor`,codex:`Codex`,gemini:`Gemini`};function Ah({compact:e}={}){let[t,n]=(0,H.useState)(null),[r,i]=(0,H.useState)(``),[a,o]=(0,H.useState)([]),[s,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(null),[p,m]=(0,H.useState)(0);(0,H.useEffect)(()=>{ce().then(e=>{n(e),i(e.default_provider??`claude`)}).catch(e=>f(e.message))},[]),(0,H.useEffect)(()=>{r&&(c(!0),B.get(`/api/settings/ai/providers/${r}/models`).then(o).catch(()=>o([])).finally(()=>c(!1)))},[r]);let h=t?Object.keys(t.providers).filter(e=>e!==`mock`).map(e=>({id:e,name:kh[e]??e})):[],g=t?.providers[r],_=g?.type===`agent-sdk`||!g?.type&&r===`claude`,v=async(e,i)=>{if(t){u(!0),f(null);try{n(await ue({providers:{[r]:{[e]:i}}})),m(e=>e+1)}catch(e){f(e.message)}finally{u(!1)}}},y=e?`text-[11px]`:`text-sm`,b=e?`text-xs`:`text-sm`,x=e?`space-y-2`:`space-y-4`,S=e?`space-y-1.5`:`space-y-3`,C=e?`space-y-1`:`space-y-1.5`;if(!t)return(0,W.jsxs)(`div`,{className:S,children:[(0,W.jsx)(`h3`,{className:`${b} font-medium text-text-secondary`,children:`AI Settings`}),(0,W.jsx)(`p`,{className:`${y} text-text-subtle`,children:d?`Error: ${d}`:`Loading...`})]});let w=_?a:[{value:`__default__`,label:`Auto (default)`},...a];return(0,W.jsxs)(`div`,{className:x,children:[(0,W.jsx)(`h3`,{className:`${b} font-medium text-text-secondary`,children:`AI Settings`}),h.length>1&&(0,W.jsx)(`div`,{className:`flex gap-0.5 border-b border-border/50 -mx-1 px-1`,children:h.map(e=>(0,W.jsxs)(`button`,{onClick:()=>i(e.id),className:`flex items-center gap-1 px-2 py-1 text-[11px] rounded-t transition-colors ${r===e.id?`text-primary border-b-2 border-primary font-medium`:`text-text-subtle hover:text-text-secondary`}`,children:[(0,W.jsx)(Eh,{providerId:e.id}),(0,W.jsx)(`span`,{className:`capitalize`,children:e.name})]},e.id))}),(0,W.jsxs)(`div`,{className:S,children:[a.length>0&&(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Jm,{htmlFor:`ai-model`,className:e?y:void 0,children:`Model`}),(0,W.jsxs)(gh,{value:_?g?.model??a[0]?.value:g?.model||`__default__`,onValueChange:e=>v(`model`,e===`__default__`?void 0:e),disabled:s,children:[(0,W.jsx)(vh,{id:`ai-model`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,W.jsx)(_h,{placeholder:s?`Loading models...`:`Select model`})}),(0,W.jsx)(yh,{className:`max-h-[300px]`,children:w.map(e=>(0,W.jsx)(bh,{value:e.value,children:e.label},e.value))})]})]}),_&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Jm,{htmlFor:`ai-base-url`,className:e?y:void 0,children:`Base URL`}),(0,W.jsx)(zm,{id:`ai-base-url`,type:`url`,defaultValue:g?.base_url??``,placeholder:`https://api.anthropic.com (default)`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{v(`base_url`,e.target.value.trim()||void 0)}},`baseurl-${r}-${p}`)]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Jm,{htmlFor:`ai-api-key`,className:e?y:void 0,children:`API Key / Token`}),(0,W.jsx)(zm,{id:`ai-api-key`,type:`password`,defaultValue:g?.api_key??``,placeholder:`sk-ant-... (optional, overrides accounts)`,className:e?`h-7 text-[11px] font-mono`:`font-mono`,onBlur:e=>{let t=e.target.value.trim();t.startsWith(`••••`)||v(`api_key`,t||void 0)}},`apikey-${r}-${p}`),(0,W.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Direct API key or OAuth token. Leave empty to use connected accounts.`})]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Jm,{htmlFor:`ai-effort`,className:e?y:void 0,children:`Effort`}),(0,W.jsxs)(gh,{value:g?.effort??`high`,onValueChange:e=>v(`effort`,e),children:[(0,W.jsx)(vh,{id:`ai-effort`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,W.jsx)(_h,{})}),(0,W.jsx)(yh,{children:Dh.map(e=>(0,W.jsx)(bh,{value:e.value,children:e.label},e.value))})]})]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Jm,{htmlFor:`ai-max-turns`,className:e?y:void 0,children:`Max Turns (1-500)`}),(0,W.jsx)(zm,{id:`ai-max-turns`,type:`number`,min:1,max:500,defaultValue:g?.max_turns??100,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseInt(e.target.value);isNaN(t)||v(`max_turns`,t)}},`turns-${r}-${p}`)]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Jm,{htmlFor:`ai-budget`,className:e?y:void 0,children:`Max Budget (USD)`}),(0,W.jsx)(zm,{id:`ai-budget`,type:`number`,step:.1,min:.01,max:50,defaultValue:g?.max_budget_usd??``,placeholder:`No limit`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseFloat(e.target.value);v(`max_budget_usd`,isNaN(t)?void 0:t)}},`budget-${r}-${p}`)]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Jm,{htmlFor:`ai-thinking`,className:e?y:void 0,children:`Thinking Budget (tokens)`}),(0,W.jsx)(zm,{id:`ai-thinking`,type:`number`,min:0,defaultValue:g?.thinking_budget_tokens??``,placeholder:`Disabled`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseInt(e.target.value);v(`thinking_budget_tokens`,isNaN(t)?void 0:t)}},`thinking-${r}-${p}`)]}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(Jm,{htmlFor:`ai-agent-teams`,className:e?y:void 0,children:`Agent Teams`}),(0,W.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Experimental. Enables multi-agent collaboration with shared tasks and messaging. Uses ~7x more tokens.`})]}),(0,W.jsx)(Ch,{id:`ai-agent-teams`,checked:g?.agent_teams??!1,onCheckedChange:e=>v(`agent_teams`,e)})]}),g?.agent_teams&&(0,W.jsx)(jh,{compact:e})]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Jm,{htmlFor:`ai-permission-mode`,className:e?y:void 0,children:`Default Permission Mode`}),(0,W.jsxs)(gh,{value:g?.permission_mode??`bypassPermissions`,onValueChange:e=>v(`permission_mode`,e),children:[(0,W.jsx)(vh,{id:`ai-permission-mode`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,W.jsx)(_h,{})}),(0,W.jsx)(yh,{children:Oh.map(e=>(0,W.jsx)(bh,{value:e.value,children:e.label},e.value))})]})]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Jm,{htmlFor:`ai-system-prompt`,className:e?y:void 0,children:`Additional Instructions`}),(0,W.jsx)(`textarea`,{id:`ai-system-prompt`,rows:e?3:4,defaultValue:g?.system_prompt??``,placeholder:`Enter additional instructions for ${r}...`,className:`w-full rounded-md border border-input bg-background px-3 py-2 ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${e?`text-[11px]`:`text-sm`}`,onBlur:e=>{v(`system_prompt`,e.target.value.trim()||void 0)}},`sysprompt-${r}-${p}`)]})]}),l&&(0,W.jsx)(`p`,{className:`text-xs text-text-subtle`,children:`Saving...`}),d&&(0,W.jsx)(`p`,{className:`text-xs text-red-500`,children:d})]})}function jh({compact:e}){let[t,n]=(0,H.useState)([]),[r,i]=(0,H.useState)(!1),[a,o]=(0,H.useState)(null),s=(0,H.useCallback)(async()=>{i(!0);try{n(await B.get(`/api/teams`)??[])}catch{}i(!1)},[]);(0,H.useEffect)(()=>{s()},[s]);let c=async e=>{try{await B.del(`/api/teams/${encodeURIComponent(e)}`),n(t=>t.filter(t=>t.name!==e)),o(null)}catch{}};return t.length===0&&!r?null:(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(Jm,{className:e?`text-[11px]`:void 0,children:[`Teams (`,t.length,`)`]}),(0,W.jsx)(`button`,{onClick:s,className:`text-text-subtle hover:text-foreground p-1`,"aria-label":`Refresh teams`,children:(0,W.jsx)(Lt,{className:`size-3 ${r?`animate-spin`:``}`})})]}),t.map(e=>(0,W.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded bg-surface-elevated text-xs`,children:[(0,W.jsxs)(`div`,{className:`min-w-0`,children:[(0,W.jsx)(`div`,{className:`font-medium truncate`,children:e.name}),e.description&&(0,W.jsx)(`div`,{className:`text-text-subtle truncate`,children:e.description}),(0,W.jsxs)(`div`,{className:`text-text-subtle`,children:[e.members?.length??e.memberCount??0,` members`,e.createdAt?` · ${new Date(e.createdAt).toLocaleDateString()}`:``]})]}),a===e.name?(0,W.jsxs)(`div`,{className:`flex gap-1 shrink-0 ml-2`,children:[(0,W.jsx)(`button`,{onClick:()=>c(e.name),className:`px-2 py-1 bg-red-600 text-white rounded text-[10px]`,children:`Delete`}),(0,W.jsx)(`button`,{onClick:()=>o(null),className:`px-2 py-1 bg-zinc-600 text-white rounded text-[10px]`,children:`Cancel`})]}):(0,W.jsx)(`button`,{onClick:()=>o(e.name),className:`shrink-0 text-text-subtle hover:text-red-500 p-1 ml-2`,"aria-label":`Delete team ${e.name}`,children:(0,W.jsx)(Xt,{className:`size-3.5`})})]},e.name))]})}var Mh=[{key:`general`,label:`General`},{key:`tabs`,label:`Tabs`},{key:`projects`,label:`Projects`}],Nh=[`Ctrl+T`,`Ctrl+W`,`Ctrl+N`,`Ctrl+Tab`,`Ctrl+L`,`Ctrl+H`,`Ctrl+J`,`F5`,`Ctrl+R`,`Ctrl+Shift+I`,`Ctrl+Shift+J`];function Ph({actionId:e,combo:t,locked:n}){let[r,i]=(0,H.useState)(!1),a=Hp(e=>e.setBinding),o=(0,H.useRef)(null),s=(0,H.useCallback)(t=>{if(t.preventDefault(),t.stopPropagation(),t.key===`Escape`){i(!1);return}let n=Vp(t);n&&(a(e,n),i(!1))},[e,a]);return(0,H.useEffect)(()=>{if(r)return document.addEventListener(`keydown`,s,!0),()=>document.removeEventListener(`keydown`,s,!0)},[r,s]),(0,H.useEffect)(()=>{if(!r)return;let e=e=>{o.current&&!o.current.contains(e.target)&&i(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[r]),n?(0,W.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border border-border bg-muted px-2 py-0.5 text-[11px] font-mono text-muted-foreground`,children:[(0,W.jsx)(ht,{className:`size-2.5`}),Bp(t)]}):r?(0,W.jsx)(`button`,{ref:o,className:`inline-flex items-center rounded border-2 border-primary bg-primary/10 px-2 py-0.5 text-[11px] font-mono text-primary animate-pulse`,children:`Press keys...`}):(0,W.jsx)(`button`,{ref:o,onClick:()=>i(!0),className:`inline-flex items-center rounded border border-border bg-surface px-2 py-0.5 text-[11px] font-mono text-foreground hover:border-primary hover:bg-primary/5 transition-colors cursor-pointer`,title:`Click to change shortcut`,children:Bp(t)})}function Fh(){let{getBinding:e,resetBinding:t,resetAll:n,overrides:r}=Hp();return(0,W.jsxs)(`div`,{className:`space-y-3`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-text-secondary`,children:`Keyboard Shortcuts`}),Object.keys(r).length>0&&(0,W.jsxs)($,{variant:`ghost`,size:`sm`,className:`h-6 text-[10px] text-muted-foreground`,onClick:n,children:[(0,W.jsx)(Bt,{className:`size-3 mr-1`}),`Reset all`]})]}),(0,W.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-amber-500/30 bg-amber-500/5 px-2.5 py-2`,children:[(0,W.jsx)(Zt,{className:`size-3.5 text-amber-500 shrink-0 mt-0.5`}),(0,W.jsxs)(`p`,{className:`text-[10px] text-muted-foreground leading-relaxed`,children:[`Some shortcuts (`,Nh.slice(0,4).join(`, `),`...) are reserved by the browser and cannot be overridden.`]})]}),Mh.map(n=>{let i=Ip.filter(e=>e.category===n.key);return i.length===0?null:(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:n.label}),(0,W.jsx)(`div`,{className:`space-y-0.5`,children:i.map(n=>{let i=e(n.id),a=n.id in r;return(0,W.jsxs)(`div`,{className:`flex items-center justify-between py-1 px-1 rounded hover:bg-surface-elevated/50 transition-colors`,children:[(0,W.jsxs)(`div`,{className:`flex flex-col min-w-0`,children:[(0,W.jsx)(`span`,{className:`text-xs text-foreground`,children:n.label}),n.note&&(0,W.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:n.note})]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0 ml-2`,children:[(0,W.jsx)(Ph,{actionId:n.id,combo:i,locked:n.locked}),a&&!n.locked&&(0,W.jsx)(`button`,{onClick:()=>t(n.id),className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-foreground hover:bg-surface-elevated transition-colors`,title:`Reset to default`,children:(0,W.jsx)(Bt,{className:`size-3`})})]})]},n.id)})})]},n.key)})]})}var Ih=`Hello! Reply briefly.`,Lh=`claude-sonnet-4-6`;function Rh(e){let[t,n]=(0,H.useState)(!1);return(0,W.jsxs)(Am,{open:t,onOpenChange:n,children:[(0,W.jsx)(jm,{asChild:!0,children:(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-7 text-[11px] gap-1.5 cursor-pointer`,children:[(0,W.jsx)(Xe,{className:`size-3`}),`Test`]})}),(0,W.jsxs)(Pm,{className:`sm:max-w-md max-h-[85vh] overflow-y-auto`,children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{className:`text-sm`,children:`Test Proxy`}),(0,W.jsx)(Rm,{className:`text-[11px]`,children:`Send a test request and inspect the raw response.`})]}),t&&(0,W.jsx)(zh,{...e})]})]})}function zh({authKey:e,baseUrl:t}){let[n,r]=(0,H.useState)(`anthropic`),[i,a]=(0,H.useState)(Ih),[o,s]=(0,H.useState)(Lh),[c,l]=(0,H.useState)(!0),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(null),v=(0,H.useRef)(null),y=(0,H.useRef)(null);(0,H.useEffect)(()=>{v.current?.select()},[]),(0,H.useEffect)(()=>{y.current&&(y.current.scrollTop=y.current.scrollHeight)},[f]);let b=e=>{r(e),p(null),h(null),_(null)},x=async()=>{d(!0),p(null),h(null),_(null);let r=Date.now(),a=n===`openai`,s=a?`${t}/proxy/v1/chat/completions`:`${t}/proxy/v1/messages`,l=JSON.stringify({model:o,max_tokens:256,stream:c,messages:[{role:`user`,content:i}]}),u={"Content-Type":`application/json`};a?u.Authorization=`Bearer ${e}`:(u[`x-api-key`]=e,u[`anthropic-version`]=`2023-06-01`);try{let e=await fetch(s,{method:`POST`,headers:u,body:l});if(!e.ok){let t=await e.text();h(`HTTP ${e.status}: ${t}`),d(!1),_(Date.now()-r);return}if(c){let t=e.body?.getReader();if(!t){h(`No response body`),d(!1);return}let n=new TextDecoder,i=``;for(;;){let{done:e,value:r}=await t.read();if(e)break;i+=n.decode(r,{stream:!0}),p(i)}_(Date.now()-r)}else{let t=await e.text();try{p(JSON.stringify(JSON.parse(t),null,2))}catch{p(t)}_(Date.now()-r)}}catch(e){h(e.message)}finally{d(!1),_(e=>e??Date.now()-r)}};return(0,W.jsxs)(`div`,{className:`space-y-3 min-w-0`,children:[(0,W.jsxs)(`div`,{className:`space-y-1.5 min-w-0`,children:[(0,W.jsx)(Jm,{className:`text-[11px]`,children:`Auth Style`}),(0,W.jsx)(`div`,{className:`flex gap-1`,children:[`anthropic`,`openai`].map(e=>(0,W.jsx)(`button`,{onClick:()=>b(e),className:`flex-1 h-8 rounded-md text-[11px] font-medium border transition-colors cursor-pointer ${n===e?`bg-primary text-primary-foreground border-primary`:`bg-muted text-muted-foreground border-transparent hover:bg-muted/80`}`,children:e===`anthropic`?`Anthropic`:`OpenAI`},e))}),(0,W.jsx)(`p`,{className:`text-[9px] text-muted-foreground`,children:n===`anthropic`?`x-api-key header`:`Authorization: Bearer header`})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(Jm,{className:`text-[11px]`,children:`Model`}),(0,W.jsxs)(`select`,{value:o,onChange:e=>s(e.target.value),className:`h-8 w-full rounded-md border bg-background px-2 text-[11px]`,children:[(0,W.jsx)(`option`,{value:`claude-sonnet-4-6`,children:`claude-sonnet-4-6`}),(0,W.jsx)(`option`,{value:`claude-haiku-4-5-20251001`,children:`claude-haiku-4-5`}),(0,W.jsx)(`option`,{value:`claude-opus-4-6`,children:`claude-opus-4-6`})]})]}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(Jm,{className:`text-[11px]`,children:`Streaming`}),(0,W.jsx)(`div`,{className:`flex gap-1`,children:[!0,!1].map(e=>(0,W.jsx)(`button`,{onClick:()=>l(e),className:`h-7 px-3 rounded-md text-[11px] font-medium border transition-colors cursor-pointer ${c===e?`bg-primary text-primary-foreground border-primary`:`bg-muted text-muted-foreground border-transparent hover:bg-muted/80`}`,children:e?`Stream`:`JSON`},String(e)))})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(Jm,{className:`text-[11px]`,children:`Message`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{ref:v,value:i,onChange:e=>a(e.target.value),placeholder:`Type a test message...`,className:`h-9 text-[11px] flex-1 min-w-0`,onKeyDown:e=>{e.key===`Enter`&&!u&&x()}}),(0,W.jsxs)($,{size:`sm`,className:`h-9 px-3 cursor-pointer shrink-0`,onClick:x,disabled:u||!i.trim(),children:[u?(0,W.jsx)(V,{className:`size-3.5 animate-spin`}):(0,W.jsx)(jt,{className:`size-3.5`}),(0,W.jsx)(`span`,{className:`ml-1 text-[11px]`,children:u?`...`:`Send`})]})]})]}),(f||m)&&(0,W.jsxs)(`div`,{className:`space-y-1 min-w-0`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(Jm,{className:`text-[10px] text-muted-foreground`,children:`Raw Response`}),g!=null&&(0,W.jsxs)(`span`,{className:`text-[9px] font-mono text-muted-foreground`,children:[(g/1e3).toFixed(1),`s`]})]}),m?(0,W.jsx)(`pre`,{className:`text-[9px] font-mono bg-red-500/10 text-red-500 p-2 rounded overflow-auto max-h-52 whitespace-pre-wrap break-all`,children:m}):(0,W.jsx)(`pre`,{ref:y,className:`text-[9px] font-mono bg-muted p-2 rounded overflow-auto max-h-52 whitespace-pre-wrap break-all`,children:f})]})]})}function Bh(){let[e,t]=(0,H.useState)(null),[n,r]=(0,H.useState)(!0),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(null),[c,l]=(0,H.useState)(null);(0,H.useEffect)(()=>{r(!0),le().then(t).catch(e=>s(e.message)).finally(()=>r(!1))},[]);let u=async e=>{a(!0),s(null);try{t(await se(e))}catch(e){s(e.message)}finally{a(!1)}},d=(e,t)=>{navigator.clipboard.writeText(e),l(t),setTimeout(()=>l(null),2e3)};if(n||!e)return(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-text-secondary`,children:`API Proxy`}),(0,W.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:o?`Error: ${o}`:`Loading...`})]});let f=!!e.authKey,p=!!e.tunnelUrl,m=e.localEndpoint,h=m.replace(/\/proxy\/v1\/messages$/,``);return(0,W.jsxs)(`div`,{className:`space-y-4`,children:[(0,W.jsx)(`div`,{className:`space-y-1.5`,children:(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Expose your Claude accounts as an Anthropic-compatible API endpoint. External tools (OpenCode, Cursor, etc.) can use your accounts via this proxy.`})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,W.jsx)(Jm,{className:`text-xs`,children:`Enable Proxy`}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Accept API requests on /proxy/v1/messages`})]}),(0,W.jsx)(Ch,{checked:e.enabled,onCheckedChange:e=>u({enabled:e}),disabled:i})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(Jm,{className:`text-[11px]`,children:`Auth Key`}),f?(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{readOnly:!0,value:e.authKey,className:`h-7 text-[11px] font-mono flex-1`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 px-2 cursor-pointer shrink-0`,onClick:()=>d(e.authKey,`key`),children:c===`key`?`Copied!`:(0,W.jsx)(Le,{className:`size-3`})}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 px-2 cursor-pointer shrink-0`,onClick:()=>u({generateKey:!0}),disabled:i,children:(0,W.jsx)(Lt,{className:`size-3`})})]}):(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs cursor-pointer`,onClick:()=>u({generateKey:!0}),disabled:i,children:`Generate Auth Key`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Use as Bearer token or x-api-key when calling the proxy.`})]}),e.enabled&&f&&(0,W.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3 bg-muted/30`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`h4`,{className:`text-[11px] font-medium`,children:`Connection Info`}),(0,W.jsx)(Rh,{authKey:e.authKey,baseUrl:window.location.origin})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(Jm,{className:`text-[10px] text-muted-foreground`,children:`Anthropic Endpoint`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,W.jsx)(`code`,{className:`text-[10px] font-mono bg-muted px-1.5 py-0.5 rounded flex-1 truncate`,children:p?e.proxyEndpoint:m}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 cursor-pointer shrink-0`,onClick:()=>d(p?e.proxyEndpoint:m,`anthropic`),children:c===`anthropic`?`Copied!`:(0,W.jsx)(Le,{className:`size-3`})})]})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(Jm,{className:`text-[10px] text-muted-foreground`,children:`OpenAI-Compatible Endpoint`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,W.jsx)(`code`,{className:`text-[10px] font-mono bg-muted px-1.5 py-0.5 rounded flex-1 truncate`,children:p?e.openAiEndpoint:e.localOpenAiEndpoint}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 cursor-pointer shrink-0`,onClick:()=>d(p?e.openAiEndpoint:e.localOpenAiEndpoint,`openai`),children:c===`openai`?`Copied!`:(0,W.jsx)(Le,{className:`size-3`})})]})]}),!p&&(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Start a Cloudflare tunnel (Share) to get a public URL.`}),(0,W.jsxs)(`div`,{className:`space-y-1 pt-1`,children:[(0,W.jsx)(Jm,{className:`text-[10px] text-muted-foreground`,children:`Anthropic Format`}),(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(`pre`,{className:`text-[9px] font-mono bg-muted p-2 rounded overflow-x-auto whitespace-pre`,children:`ANTHROPIC_BASE_URL=${p?e.tunnelUrl+`/proxy`:h+`/proxy`}
|
|
20
|
-
ANTHROPIC_API_KEY=${e.authKey}`}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`absolute top-1 right-1 h-5 px-1 cursor-pointer`,onClick:()=>d(`ANTHROPIC_BASE_URL=${p?e.tunnelUrl+`/proxy`:h+`/proxy`}\nANTHROPIC_API_KEY=${e.authKey}`,`anthropic-env`),children:c===`anthropic-env`?`Copied!`:(0,W.jsx)(Le,{className:`size-2.5`})})]})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(
|
|
21
|
-
OPENAI_API_KEY=${e.authKey}`}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`absolute top-1 right-1 h-5 px-1 cursor-pointer`,onClick:()=>d(`OPENAI_BASE_URL=${p?e.tunnelUrl+`/proxy/v1`:h+`/proxy/v1`}\nOPENAI_API_KEY=${e.authKey}`,`openai-env`),children:c===`openai-env`?`Copied!`:(0,W.jsx)(Le,{className:`size-2.5`})})]})]}),(0,W.jsx)(`div`,{className:`flex items-center gap-3 pt-1`,children:(0,W.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[`Requests served: `,(0,W.jsx)(`span`,{className:`font-mono`,children:e.requestCount})]})})]}),i&&(0,W.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:`Saving...`}),o&&(0,W.jsx)(`p`,{className:`text-[11px] text-red-500`,children:o})]})}function Vh(){return B.get(`/api/settings/mcp`)}function Hh(e,t){return B.post(`/api/settings/mcp`,{name:e,config:t})}function Uh(e,t){return B.put(`/api/settings/mcp/${encodeURIComponent(e)}`,t)}function Wh(e){return B.del(`/api/settings/mcp/${encodeURIComponent(e)}`)}function Gh(){return B.post(`/api/settings/mcp/import`,{})}function Kh(e){return!e||!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(e)?`Name must start with a letter/digit, then alphanumeric, hyphens, or underscores`:e.length>50?`Name max 50 chars`:null}function qh(e){let t=[];if(!e||typeof e!=`object`)return[`Config must be an object`];let n=e,r=n.type??`stdio`;return r===`stdio`?(!n.command||typeof n.command!=`string`)&&t.push(`command is required for stdio`):r===`http`||r===`sse`?((!n.url||typeof n.url!=`string`)&&t.push(`url is required for `+r),n.url&&typeof n.url==`string`&&!/^https?:\/\/.+/.test(n.url)&&t.push(`url must be HTTP(S)`)):t.push(`type must be stdio, http, or sse`),t}var Jh=[`stdio`,`http`,`sse`];function Yh({open:e,onClose:t,editServer:n}){let r=!!n,[i,a]=(0,H.useState)(``),[s,c]=(0,H.useState)(`stdio`),[l,u]=(0,H.useState)(``),[d,f]=(0,H.useState)(``),[p,m]=(0,H.useState)(``),[h,g]=(0,H.useState)([]),[_,v]=(0,H.useState)(!1),[y,b]=(0,H.useState)(null);(0,H.useEffect)(()=>{if(e)if(b(null),v(!1),n){a(n.name),c(n.transport||`stdio`);let e=n.config;`command`in e?(u(e.command||``),f((e.args??[]).join(` `)),g(Xh(e.env))):`url`in e&&(m(e.url||``),g(Xh(e.headers)))}else a(``),c(`stdio`),u(``),f(``),m(``),g([])},[e,n]);let x=()=>{let e=Zh(h);return s===`stdio`?{type:`stdio`,command:l,...d.trim()&&{args:d.trim().split(/\s+/)},...Object.keys(e).length>0&&{env:e}}:{type:s,url:p,...Object.keys(e).length>0&&{headers:e}}},S=async()=>{if(b(null),!r){let e=Kh(i);if(e){b(e);return}}let e=x(),n=qh(e);if(n.length){b(n.join(`; `));return}v(!0);try{r?await Uh(i,e):await Hh(i,e),t(!0)}catch(e){b(e.message||`Save failed`)}finally{v(!1)}},C=()=>g([...h,{key:``,value:``}]),w=e=>g(h.filter((t,n)=>n!==e)),T=(e,t,n)=>{g(h.map((r,i)=>i===e?{key:t===`key`?n:r.key,value:t===`value`?n:r.value}:r))},E=s===`stdio`,D=E?`Environment Variables`:`Headers`;return(0,W.jsx)(Am,{open:e,onOpenChange:e=>{e||t()},children:(0,W.jsxs)(Pm,{className:`max-h-[85vh] overflow-y-auto sm:max-w-md`,children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{className:`text-sm`,children:r?`Edit MCP Server`:`Add MCP Server`}),(0,W.jsx)(Rm,{className:`text-[11px]`,children:`Configure a Model Context Protocol server connection.`})]}),(0,W.jsxs)(`div`,{className:`space-y-3`,children:[(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Name`}),(0,W.jsx)(zm,{value:i,onChange:e=>a(e.target.value),placeholder:`my-mcp-server`,className:`h-8 text-xs`,disabled:r})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Transport`}),(0,W.jsx)(`div`,{className:`flex gap-1`,children:Jh.map(e=>(0,W.jsx)($,{variant:s===e?`default`:`outline`,size:`sm`,className:`flex-1 h-7 text-xs cursor-pointer`,onClick:()=>{c(e),g([]),u(``),f(``),m(``)},children:e},e))})]}),E?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Command *`}),(0,W.jsx)(zm,{value:l,onChange:e=>u(e.target.value),placeholder:`npx`,className:`h-8 text-xs`})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Arguments (space-separated)`}),(0,W.jsx)(zm,{value:d,onChange:e=>f(e.target.value),placeholder:`@playwright/mcp@latest`,className:`h-8 text-xs`})]})]}):(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`URL *`}),(0,W.jsx)(zm,{value:p,onChange:e=>m(e.target.value),placeholder:`https://mcp.example.com`,className:`h-8 text-xs`})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:D}),h.map((e,t)=>(0,W.jsxs)(`div`,{className:`flex gap-1 items-center`,children:[(0,W.jsx)(zm,{value:e.key,onChange:e=>T(t,`key`,e.target.value),placeholder:`KEY`,className:`h-7 text-xs flex-1`}),(0,W.jsx)(zm,{value:e.value,onChange:e=>T(t,`value`,e.target.value),placeholder:`value`,className:`h-7 text-xs flex-1`}),(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer`,onClick:()=>w(t),children:(0,W.jsx)(o,{className:`size-3`})})]},t)),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs gap-1 cursor-pointer`,onClick:C,children:[(0,W.jsx)(Nt,{className:`size-3`}),` Add `,E?`Variable`:`Header`]})]}),y&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:y})]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs cursor-pointer`,onClick:()=>t(),children:`Cancel`}),(0,W.jsx)($,{size:`sm`,className:`h-8 text-xs cursor-pointer`,onClick:S,disabled:_,children:_?`Saving...`:`Save`})]})]})})}function Xh(e){return e?Object.entries(e).map(([e,t])=>({key:e,value:t})):[]}function Zh(e){let t={};for(let{key:n,value:r}of e)n.trim()&&(t[n.trim()]=r);return t}function Qh(){let[e,t]=(0,H.useState)([]),[n,r]=(0,H.useState)(!0),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(null),[c,l]=(0,H.useState)(null),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),m=(0,H.useCallback)(async()=>{try{t(await Vh())}catch(e){console.error(`Failed to load MCP servers:`,e)}finally{r(!1)}},[]);(0,H.useEffect)(()=>{m()},[m]);let h=async e=>{try{await Wh(e),l(null),m()}catch(e){console.error(`Failed to delete:`,e)}},g=async()=>{d(!0),p(null);try{let e=await Gh();p(`Imported ${e.imported}, skipped ${e.skipped}`),m()}catch(e){p(e.message||`Import failed`)}finally{d(!1)}},_=e=>{a(!1),s(null),e&&m()},v=()=>{s(null),a(!0)},y=e=>{s(e),a(!0)};return n?(0,W.jsx)(`div`,{className:`space-y-3`,children:[1,2,3].map(e=>(0,W.jsx)(`div`,{className:`h-16 rounded-lg bg-muted animate-pulse`},e))}):(0,W.jsxs)(`div`,{className:`space-y-3`,children:[e.length===0?(0,W.jsxs)(`div`,{className:`text-center py-8 space-y-2`,children:[(0,W.jsx)(Wt,{className:`size-8 mx-auto text-muted-foreground`}),(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No MCP servers configured. Add one or import from Claude Code.`})]}):(0,W.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>(0,W.jsxs)(`div`,{className:`rounded-lg border bg-card p-3 space-y-1.5`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(`span`,{className:`text-xs font-medium truncate flex-1`,children:e.name}),(0,W.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded bg-muted text-muted-foreground shrink-0`,children:e.transport})]}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground truncate`,children:$h(e)}),(0,W.jsx)(`div`,{className:`flex justify-end gap-1.5`,children:c===e.name?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{className:`text-[11px] text-destructive self-center mr-1`,children:`Delete?`}),(0,W.jsx)($,{variant:`destructive`,size:`sm`,className:`h-8 min-w-[44px] text-xs cursor-pointer`,onClick:()=>h(e.name),children:`Yes`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-8 min-w-[44px] text-xs cursor-pointer`,onClick:()=>l(null),children:`No`})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)($,{variant:`ghost`,size:`sm`,className:`h-7 text-xs gap-1 cursor-pointer`,onClick:()=>y(e),children:[(0,W.jsx)(Ot,{className:`size-3`}),` Edit`]}),(0,W.jsxs)($,{variant:`ghost`,size:`sm`,className:`h-7 text-xs gap-1 text-destructive hover:text-destructive cursor-pointer`,onClick:()=>l(e.name),children:[(0,W.jsx)(Xt,{className:`size-3`}),` Delete`]})]})})]},e.name))}),(0,W.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[(0,W.jsxs)($,{className:`w-full h-10 text-xs gap-1.5 cursor-pointer`,onClick:v,children:[(0,W.jsx)(Nt,{className:`size-3.5`}),` Add MCP Server`]}),(0,W.jsxs)($,{variant:`outline`,className:`w-full h-10 text-xs gap-1.5 cursor-pointer`,onClick:g,disabled:u,children:[(0,W.jsx)(ze,{className:`size-3.5`}),` `,u?`Importing...`:`Import from Claude Code`]}),f&&(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground text-center`,children:f})]}),(0,W.jsx)(Yh,{open:i,onClose:_,editServer:o})]})}function $h(e){let t=e.config;if(e.transport===`stdio`||!(`url`in t)){let e=t;return[e.command,...e.args??[]].join(` `)}return t.url??``}function eg(){let[e,t]=(0,H.useState)([]),[n,r]=(0,H.useState)(!0),[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)(null),g=(0,H.useCallback)(async()=>{try{t(await B.get(`/api/extensions`))}catch(e){console.error(`Failed to load extensions:`,e)}finally{r(!1)}},[]);(0,H.useEffect)(()=>{g()},[g]);let _=async()=>{let e=i.trim();if(e){s(!0);try{await B.post(`/api/extensions/install`,{name:e}),Cn.success(`Installed ${e}`),a(``),g()}catch(e){Cn.error(e.message||`Install failed`)}finally{s(!1)}}},v=async e=>{p(e.id);try{await B.patch(`/api/extensions/${e.id}`,{enabled:!e.enabled}),g()}catch(e){Cn.error(e.message||`Toggle failed`)}finally{p(null)}},y=async e=>{h(e);try{await B.del(`/api/extensions/${e}`),Cn.success(`Removed ${e}`),g()}catch(e){Cn.error(e.message||`Remove failed`)}finally{h(null)}};return n?(0,W.jsx)(`div`,{className:`flex items-center justify-center py-8`,children:(0,W.jsx)(V,{className:`size-4 animate-spin text-muted-foreground`})}):(0,W.jsxs)(`div`,{className:`space-y-4`,children:[(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Install Extension`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&_()},placeholder:`npm package name (e.g. @ppm/ext-database)`,className:`h-8 text-xs flex-1`}),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs px-3 gap-1 cursor-pointer`,disabled:!i.trim()||o,onClick:_,children:[o?(0,W.jsx)(V,{className:`size-3 animate-spin`}):(0,W.jsx)(Nt,{className:`size-3`}),`Install`]})]}),(0,W.jsx)(`button`,{onClick:()=>d(!u),className:`text-[11px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer`,children:u?`Hide`:`Dev link local extension...`}),u&&(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{value:c,onChange:e=>l(e.target.value),placeholder:`Local path (e.g. ./packages/ext-database)`,className:`h-8 text-xs flex-1`}),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs px-3 gap-1 cursor-pointer`,disabled:!c.trim(),onClick:async()=>{try{await B.post(`/api/extensions/dev-link`,{path:c.trim()}),Cn.success(`Dev-linked successfully`),l(``),g()}catch(e){Cn.error(e.message||`Dev link failed`)}},children:[(0,W.jsx)(Qe,{className:`size-3`}),`Link`]})]})]}),(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsxs)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:[`Installed (`,e.length,`)`]}),e.length===0?(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground py-4 text-center`,children:`No extensions installed`}):(0,W.jsx)(`div`,{className:`space-y-1`,children:e.map(e=>(0,W.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-2 rounded-lg bg-muted/50 hover:bg-muted transition-colors`,children:[(0,W.jsx)(`div`,{className:`size-8 rounded-md bg-background flex items-center justify-center shrink-0`,children:(0,W.jsx)(It,{className:`size-4 text-muted-foreground`})}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsx)(`p`,{className:`text-xs font-medium truncate`,children:e.displayName||e.id}),(0,W.jsxs)(`p`,{className:`text-[11px] text-muted-foreground truncate`,children:[e.id,` v`,e.version,e.activated&&(0,W.jsx)(`span`,{className:`ml-1 text-green-500`,children:`active`})]})]}),(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer`,title:e.enabled?`Disable`:`Enable`,disabled:f===e.id,onClick:()=>v(e),children:f===e.id?(0,W.jsx)(V,{className:`size-3.5 animate-spin`}):e.enabled?(0,W.jsx)(Ft,{className:`size-3.5 text-green-500`}):(0,W.jsx)(Pt,{className:`size-3.5 text-muted-foreground`})}),(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer text-destructive hover:text-destructive`,title:`Remove`,disabled:m===e.id,onClick:()=>y(e.id),children:m===e.id?(0,W.jsx)(V,{className:`size-3.5 animate-spin`}):(0,W.jsx)(Xt,{className:`size-3.5`})})]},e.id))})]})]})}function tg(){let[e,t]=(0,H.useState)(null),[n,r]=(0,H.useState)(!1),[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(``),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(``),[g,_]=(0,H.useState)(!0),[v,y]=(0,H.useState)(!1),[b,x]=(0,H.useState)(2e3),[S,C]=(0,H.useState)([]),[w,T]=(0,H.useState)(``),[E,D]=(0,H.useState)(!1),[O,k]=(0,H.useState)(!1),[A,j]=(0,H.useState)([]),[ee,te]=(0,H.useState)(`_global`),[M,N]=(0,H.useState)([]),P=(0,H.useRef)(void 0),F=(0,H.useCallback)(async()=>{try{C(await B.get(`/api/settings/clawbot/paired`))}catch{}},[]),ne=(0,H.useCallback)(async(e=ee)=>{try{j(await B.get(`/api/settings/clawbot/memories?project=${encodeURIComponent(e)}`))}catch{}},[ee]),I=(0,H.useCallback)(async()=>{try{N(await B.get(`/api/settings/clawbot/tasks?limit=20`))}catch{}},[]),re=async e=>{try{await B.del(`/api/settings/clawbot/memories/${e}`),j(t=>t.filter(t=>t.id!==e))}catch{}};(0,H.useEffect)(()=>(B.get(`/api/settings/clawbot`).then(e=>{t(e),p(e.enabled),h(e.system_prompt),_(e.show_tool_calls),y(e.show_thinking),x(e.debounce_ms)}).catch(()=>{}),B.get(`/api/settings/telegram`).then(e=>{l(!!e.bot_token)}).catch(()=>{}),F(),ne(`_global`),I(),P.current=setInterval(I,1e4),()=>{P.current&&clearInterval(P.current)}),[F,ne,I]);let L=async()=>{if(o.trim()){d(!0),a(null);try{await B.put(`/api/settings/telegram`,{bot_token:o}),l(!0),s(``),a({type:`ok`,msg:`Bot token saved`})}catch(e){a({type:`err`,msg:e.message})}finally{d(!1)}}},R=async()=>{r(!0),a(null);try{let e={enabled:f,system_prompt:m,show_tool_calls:g,show_thinking:v,debounce_ms:b};t(await B.put(`/api/settings/clawbot`,e)),a({type:`ok`,msg:f?`Saved — bot started`:`Saved — bot stopped`})}catch(e){a({type:`err`,msg:e.message})}finally{r(!1)}},ie=async()=>{if(w.trim()){D(!0);try{await B.post(`/api/settings/clawbot/paired/approve`,{code:w.trim().toUpperCase()}),T(``),await F(),a({type:`ok`,msg:`Device approved`})}catch(e){a({type:`err`,msg:e.message})}finally{D(!1)}}},ae=async e=>{try{await B.del(`/api/settings/clawbot/paired/${e}`),await F(),a({type:`ok`,msg:`Device revoked`})}catch(e){a({type:`err`,msg:e.message})}},z=async()=>{k(!0),a(null);try{await B.post(`/api/settings/telegram/test`,{}),a({type:`ok`,msg:`Test notification sent to all paired devices!`})}catch(e){a({type:`err`,msg:e.message})}finally{k(!1)}};if(!e)return(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading...`});let oe=S.filter(e=>e.status===`approved`).length,se={pending:`⏳`,running:`🔄`,completed:`✅`,failed:`❌`,timeout:`⏱`},ce={running:`text-blue-500`,completed:`text-green-500`,failed:`text-destructive`,timeout:`text-yellow-500`};return(0,W.jsxs)(`div`,{className:`space-y-4`,children:[(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{className:`text-[11px] text-muted-foreground`,children:`Telegram Bot Token`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{type:`password`,placeholder:c?`•••••• (saved)`:`123456:ABC-DEF...`,value:o,onChange:e=>s(e.target.value),className:`h-7 text-xs flex-1`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs shrink-0 cursor-pointer`,disabled:u||!o.trim(),onClick:L,children:u?`...`:`Save`})]}),(0,W.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[`Create a bot via `,(0,W.jsx)(`b`,{children:`@BotFather`}),` on Telegram. Used for both chat and notifications.`]})]}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Enable PPMBot`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`AI coordinator on Telegram — delegates tasks to your projects`})]}),(0,W.jsx)(Ch,{checked:f,onCheckedChange:p})]}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Paired Devices`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Send any message to the bot on Telegram to get a pairing code. Enter it below to approve. Notifications are sent to all approved devices.`}),(0,W.jsxs)(`div`,{className:`flex gap-2`,children:[(0,W.jsx)(zm,{placeholder:`Enter pairing code (e.g. A3K7WR)`,value:w,onChange:e=>T(e.target.value.toUpperCase()),className:`h-8 text-xs font-mono tracking-wider uppercase`,maxLength:6}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs shrink-0 cursor-pointer`,disabled:E||w.length<6,onClick:ie,children:E?`...`:`Approve`})]}),S.length===0?(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground italic`,children:`No paired devices yet.`}):(0,W.jsx)(`div`,{className:`space-y-1`,children:S.map(e=>(0,W.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[e.status===`approved`?(0,W.jsx)(Ae,{className:`size-3.5 text-green-500 shrink-0`}):(0,W.jsx)(Fe,{className:`size-3.5 text-yellow-500 shrink-0`}),(0,W.jsxs)(`div`,{className:`min-w-0`,children:[(0,W.jsx)(`p`,{className:`text-xs truncate`,children:e.display_name||`Chat ${e.telegram_chat_id}`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:e.status===`pending`&&e.pairing_code?`Code: ${e.pairing_code}`:e.status})]})]}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0 text-destructive hover:text-destructive cursor-pointer`,onClick:()=>ae(e.telegram_chat_id),children:(0,W.jsx)(Xt,{className:`size-3.5`})})]},e.id))}),c&&oe>0&&(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs gap-1 w-full cursor-pointer`,disabled:O,onClick:z,children:[(0,W.jsx)(Ht,{className:`size-3`}),O?`Sending...`:`Test Notification`]})]}),(0,W.jsx)(hh,{}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Delegated Tasks`}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 cursor-pointer`,onClick:I,children:(0,W.jsx)(Lt,{className:`size-3`})})]}),M.length===0?(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground italic`,children:`No delegated tasks yet. The coordinator will create tasks when you ask it to work on a project.`}):(0,W.jsx)(`div`,{className:`space-y-1 max-h-[200px] overflow-y-auto`,children:M.map(e=>{let t=e.completed_at?`${Math.round((e.completed_at-e.created_at)/60)}m`:`${Math.round((Date.now()/1e3-e.created_at)/60)}m`;return(0,W.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border p-2 text-[11px]`,children:[(0,W.jsx)(`span`,{className:ce[e.status]??``,children:se[e.status]??`?`}),(0,W.jsx)(`span`,{className:`font-medium shrink-0`,children:e.project_name}),(0,W.jsx)(`span`,{className:`truncate text-muted-foreground flex-1`,children:e.prompt.slice(0,60)}),(0,W.jsx)(`span`,{className:`text-[10px] text-muted-foreground shrink-0`,children:t})]},e.id)})})]}),(0,W.jsx)(hh,{}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,W.jsx)(Ce,{className:`size-3.5 text-muted-foreground`}),(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Memory & Identity`})]}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 cursor-pointer`,onClick:()=>ne(ee),children:(0,W.jsx)(Lt,{className:`size-3`})})]}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Facts the bot remembers across sessions. Use /remember on Telegram to add, or delete here.`}),A.length===0?(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground italic`,children:`No memories stored yet. Send /start on Telegram and introduce yourself.`}):(0,W.jsx)(`div`,{className:`space-y-1 max-h-[200px] overflow-y-auto`,children:A.map(e=>(0,W.jsxs)(`div`,{className:`flex items-start justify-between rounded-md border p-2 gap-1`,children:[(0,W.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,W.jsx)(`p`,{className:`text-[11px] break-words`,children:e.content}),(0,W.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[e.category,` · `,e.project]})]}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 text-destructive hover:text-destructive cursor-pointer shrink-0`,onClick:()=>re(e.id),children:(0,W.jsx)(Xt,{className:`size-3`})})]},e.id))})]}),(0,W.jsx)(hh,{}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{className:`text-[11px] text-muted-foreground`,children:`Custom Instructions`}),(0,W.jsx)(`textarea`,{placeholder:`Additional instructions for the coordinator (optional)...`,value:m,onChange:e=>h(e.target.value),className:`flex w-full rounded-md border border-input bg-background px-3 py-2 text-xs min-h-[60px] resize-y ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,rows:3}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Extra instructions added to the coordinator identity. Leave empty to use defaults from coordinator.md.`})]}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`p`,{className:`text-xs`,children:`Show tool calls`}),(0,W.jsx)(Ch,{checked:g,onCheckedChange:_})]}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`p`,{className:`text-xs`,children:`Show thinking`}),(0,W.jsx)(Ch,{checked:v,onCheckedChange:y})]})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{className:`text-[11px] text-muted-foreground`,children:`Debounce (ms)`}),(0,W.jsx)(zm,{type:`number`,min:0,max:3e4,step:500,value:b,onChange:e=>x(Number(e.target.value)),className:`h-7 text-xs w-24`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Merge rapid messages within this window. 0 = no debounce.`})]}),(0,W.jsx)($,{variant:`default`,size:`sm`,className:`h-8 text-xs w-full cursor-pointer`,disabled:n,onClick:R,children:n?`Saving...`:`Save`}),i&&(0,W.jsx)(`p`,{className:`text-[11px] ${i.type===`ok`?`text-green-600 dark:text-green-400`:`text-destructive`}`,children:i.msg})]})}function ng(){let[e,t]=(0,H.useState)(!1),[n,r]=(0,H.useState)(``),[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),m=i.length>0&&n!==i,h=n.trim().length>=4&&n===i&&!c,g=(0,H.useCallback)(async()=>{if(h){l(!0),p(null);try{let{token:e}=await B.put(`/api/settings/auth/password`,{password:n.trim(),confirm:i.trim()});ae(e),d(!0),r(``),a(``),setTimeout(()=>{d(!1),t(!1)},1500)}catch(e){p(e instanceof Error?e.message:`Failed to change password`)}finally{l(!1)}}},[h,n,i]);return e?(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Change Password`}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(zm,{type:o?`text`:`password`,placeholder:`New password`,value:n,onChange:e=>r(e.target.value),className:`h-8 text-xs pr-8`,autoFocus:!0}),(0,W.jsx)(`button`,{type:`button`,className:`absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground cursor-pointer`,onClick:()=>s(!o),tabIndex:-1,children:o?(0,W.jsx)(He,{className:`size-3.5`}):(0,W.jsx)(Ue,{className:`size-3.5`})})]}),(0,W.jsx)(zm,{type:o?`text`:`password`,placeholder:`Confirm password`,value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&g()},className:`h-8 text-xs`}),m&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Passwords do not match`}),f&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:f}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs flex-1 cursor-pointer`,onClick:()=>{t(!1),r(``),a(``),p(null)},children:`Cancel`}),(0,W.jsx)($,{variant:u?`default`:`outline`,size:`sm`,className:`h-8 text-xs flex-1 cursor-pointer`,disabled:!h,onClick:g,children:c?`...`:u?(0,W.jsx)(Ee,{className:`size-3.5`}):`Save`})]}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Min 4 characters. You'll stay logged in on this device.`})]})]}):(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Security`}),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs gap-1.5 cursor-pointer`,onClick:()=>t(!0),children:[(0,W.jsx)(ct,{className:`size-3.5`}),`Change Password`]})]})}function rg(e){let t=(e+`=`.repeat((4-e.length%4)%4)).replace(/-/g,`+`).replace(/_/g,`/`),n=atob(t);return Uint8Array.from(n,e=>e.charCodeAt(0))}function ig(){let[e,t]=(0,H.useState)(`default`),[n,r]=(0,H.useState)(!1),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(null);return(0,H.useEffect)(()=>{`Notification`in window&&t(Notification.permission),r(localStorage.getItem(`ppm-push-subscribed`)===`true`)},[]),{permission:e,isSubscribed:n,loading:i,error:o,subscribe:(0,H.useCallback)(async()=>{a(!0),s(null);try{let e=await Notification.requestPermission();if(t(e),e!==`granted`){s(`Permission denied`);return}if(!navigator.serviceWorker?.controller&&!navigator.serviceWorker?.ready){s(`Service worker not available (dev mode?)`);return}let n=await Promise.race([navigator.serviceWorker.ready,new Promise((e,t)=>setTimeout(()=>t(Error(`Service worker timeout`)),5e3))]);if(!n)throw Error(`Service worker not ready`);let i={},a=oe();a&&(i.Authorization=`Bearer ${a}`);let o=await(await fetch(`/api/push/vapid-key`,{headers:i})).json();if(!o.ok)throw Error(o.error||`Failed to get VAPID key`);let c=await n.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:rg(o.data.publicKey).buffer});await fetch(`/api/push/subscribe`,{method:`POST`,headers:{...i,"Content-Type":`application/json`},body:JSON.stringify(c.toJSON())}),r(!0),localStorage.setItem(`ppm-push-subscribed`,`true`)}catch(e){s(e instanceof Error?e.message:`Subscribe failed`),console.error(`[push] Subscribe failed:`,e)}finally{a(!1)}},[]),unsubscribe:(0,H.useCallback)(async()=>{a(!0);try{let e=await(await navigator.serviceWorker.ready).pushManager.getSubscription();if(e){let t={"Content-Type":`application/json`},n=oe();n&&(t.Authorization=`Bearer ${n}`),await fetch(`/api/push/subscribe`,{method:`DELETE`,headers:t,body:JSON.stringify({endpoint:e.endpoint})}),await e.unsubscribe()}r(!1),localStorage.removeItem(`ppm-push-subscribed`)}catch(e){console.error(`[push] Unsubscribe failed:`,e)}finally{a(!1)}},[])}}var ag=[{value:`light`,label:`Light`,icon:Jt},{value:`dark`,label:`Dark`,icon:St},{value:`system`,label:`System`,icon:xt}],og=`PushManager`in window&&`serviceWorker`in navigator,sg=/iPhone|iPad/.test(navigator.userAgent)&&!window.matchMedia(`(display-mode: standalone)`).matches,cg=[{value:`ai`,label:`AI Provider`,subtitle:`Model, execution mode, limits`,icon:Se},{value:`notifications`,label:`Notifications`,subtitle:`Push & Telegram alerts`,icon:be},{value:`clawbot`,label:`PPMBot`,subtitle:`Telegram AI bot`,icon:Se},{value:`proxy`,label:`API Proxy`,subtitle:`Expose accounts as Anthropic API`,icon:rt},{value:`shortcuts`,label:`Keyboard Shortcuts`,subtitle:`Customize key bindings`,icon:ut},{value:`mcp`,label:`MCP Servers`,subtitle:`Model Context Protocol tools`,icon:Mt},{value:`extensions`,label:`Extensions`,subtitle:`Install and manage extensions`,icon:It}];function lg(){let{theme:e,setTheme:t,deviceName:n,setDeviceName:r,version:i}=U(),{permission:a,isSubscribed:o,loading:c,error:l,subscribe:u,unsubscribe:d}=ig(),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)(n??``),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(!1),b=(0,H.useRef)(void 0),x=m.trim()!==(n??``),S=(0,H.useCallback)(async()=>{if(x){_(!0);try{await r(m),y(!0),clearTimeout(b.current),b.current=setTimeout(()=>y(!1),2e3)}finally{_(!1)}}},[m,x,r]);if(f){let e=cg.find(e=>e.value===f),t=e.icon;return(0,W.jsxs)(`div`,{className:`h-full w-full flex flex-col`,children:[(0,W.jsxs)(`div`,{className:`shrink-0 px-2 pt-3 pb-1 flex items-center gap-1`,children:[(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-8 cursor-pointer shrink-0`,onClick:()=>p(null),children:(0,W.jsx)(ge,{className:`size-4`})}),(0,W.jsx)(t,{className:`size-4 text-muted-foreground shrink-0`}),(0,W.jsx)(`h2`,{className:`text-sm font-semibold truncate`,children:e.label})]}),(0,W.jsx)(hh,{}),(0,W.jsx)(bm,{className:`flex-1 min-h-0`,children:(0,W.jsxs)(`div`,{className:`p-3`,children:[f===`ai`&&(0,W.jsx)(Ah,{compact:!0}),f===`notifications`&&(0,W.jsx)(ug,{isSubscribed:o,loading:c,permission:a,pushError:l,subscribe:u,unsubscribe:d}),f===`clawbot`&&(0,W.jsx)(tg,{}),f===`proxy`&&(0,W.jsx)(Bh,{}),f===`shortcuts`&&(0,W.jsx)(Fh,{}),f===`mcp`&&(0,W.jsx)(Qh,{}),f===`extensions`&&(0,W.jsx)(eg,{})]})})]})}return(0,W.jsxs)(`div`,{className:`h-full w-full flex flex-col`,children:[(0,W.jsx)(`div`,{className:`shrink-0 px-3 pt-3 pb-1`,children:(0,W.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Settings`})}),(0,W.jsx)(bm,{className:`flex-1 min-h-0`,children:(0,W.jsxs)(`div`,{className:`p-3 space-y-4`,children:[(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Device Name`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{value:m,onChange:e=>h(e.target.value),onKeyDown:e=>{e.key===`Enter`&&S()},placeholder:`My Device`,className:`h-8 text-xs flex-1`,maxLength:100}),(0,W.jsx)($,{variant:v?`default`:`outline`,size:`sm`,className:`h-8 text-xs px-3 cursor-pointer`,disabled:!x||g,onClick:S,children:g?`...`:v?(0,W.jsx)(Ee,{className:`size-3.5`}):`Save`})]}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Shown in page title and synced to PPM Cloud.`})]}),(0,W.jsx)(ng,{}),(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Theme`}),(0,W.jsx)(`div`,{className:`flex gap-1.5`,children:ag.map(n=>{let r=n.icon;return(0,W.jsxs)($,{variant:e===n.value?`default`:`outline`,size:`sm`,onClick:()=>t(n.value),className:L(`flex-1 gap-1.5 text-xs h-8 cursor-pointer`,e===n.value&&`ring-2 ring-primary`),children:[(0,W.jsx)(r,{className:`size-3.5`}),n.label]},n.value)})})]}),(0,W.jsx)(hh,{}),(0,W.jsx)(`nav`,{className:`space-y-1`,"aria-label":`Settings categories`,children:cg.map(e=>{let t=e.icon;return(0,W.jsxs)(`button`,{onClick:()=>p(e.value),className:`w-full flex items-center gap-3 px-2.5 py-2.5 rounded-lg hover:bg-accent/50 active:bg-accent transition-colors cursor-pointer text-left group`,children:[(0,W.jsx)(`div`,{className:`size-8 rounded-md bg-muted flex items-center justify-center shrink-0 group-hover:bg-accent`,children:(0,W.jsx)(t,{className:`size-4 text-muted-foreground`})}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsx)(`p`,{className:`text-xs font-medium text-foreground truncate`,children:e.label}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground truncate`,children:e.subtitle})]}),(0,W.jsx)(s,{className:`size-4 text-muted-foreground shrink-0`})]},e.value)})}),(0,W.jsx)(hh,{}),(0,W.jsxs)(`section`,{className:`space-y-1 pb-2`,children:[(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`PPM — Personal Project Manager`}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`A mobile-first web IDE for managing your projects.`}),i&&(0,W.jsxs)(`p`,{className:`text-[11px] text-muted-foreground tabular-nums`,children:[`Version `,i]})]})]})})]})}function ug({isSubscribed:e,loading:t,permission:n,pushError:r,subscribe:i,unsubscribe:a}){return(0,W.jsxs)(`div`,{className:`space-y-4`,children:[(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Push Notifications`}),og?(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[e?(0,W.jsx)(xe,{className:`size-3.5`}):(0,W.jsx)(ye,{className:`size-3.5`}),(0,W.jsx)(`span`,{className:`text-xs`,children:`Push notifications`})]}),(0,W.jsx)($,{variant:e?`default`:`outline`,size:`sm`,className:`h-7 text-xs cursor-pointer`,disabled:t||n===`denied`,onClick:()=>e?a():i(),children:t?`...`:e?`On`:`Off`})]}),e&&(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs w-full cursor-pointer`,onClick:()=>{new Notification(`PPM Test`,{body:`Push notifications are working!`})},children:`Test notification`}),r&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:r}),n===`denied`&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Notifications blocked. Enable in browser settings.`}),sg&&(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`On iOS, install PPM to Home Screen for push notifications.`})]}):(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Push notifications not supported in this browser.`})]}),(0,W.jsx)(hh,{}),(0,W.jsxs)(`section`,{className:`space-y-1`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Telegram`}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Telegram notifications are sent to all approved devices in PPMBot settings. Configure your bot token and pair devices there.`})]})]})}function dg({connections:e,cachedTables:t,onOpenTable:n,onRefreshTables:r,onEdit:i,onDelete:o,onFetchColumns:c,columnCache:l}){let[u,d]=(0,H.useState)(new Set),[f,p]=(0,H.useState)(new Set([`__ungrouped__`])),[m,h]=(0,H.useState)(new Set),[g,_]=(0,H.useState)(new Set),[v,y]=(0,H.useState)(new Map),[b,x]=(0,H.useState)(new Set),S=e=>{d(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},C=e=>{p(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},w=async(e,t,n)=>{let r=`${e}:${n}.${t}`;if(m.has(r)){h(e=>{let t=new Set(e);return t.delete(r),t});return}if(h(e=>new Set(e).add(r)),c&&!l?.has(r)){x(e=>new Set(e).add(r));try{await c(e,t,n)}catch{}x(e=>{let t=new Set(e);return t.delete(r),t})}},T=async e=>{_(t=>new Set(t).add(e));try{await r(e)}finally{_(t=>{let n=new Set(t);return n.delete(e),n})}},E={};for(let t of e){let e=t.group_name??`__ungrouped__`;(E[e]??=[]).push(t)}let D=Object.keys(E).sort((e,t)=>e===`__ungrouped__`?1:t===`__ungrouped__`?-1:e.localeCompare(t)),O=(0,H.useMemo)(()=>{let n=new Map;for(let r of e){let e=t.get(r.id)??[],i=new Map;for(let t of e){let e=t.schemaName;(i.get(e)??i.set(e,[]).get(e)).push(t)}n.set(r.id,i)}return n},[e,t]);return e.length===0?(0,W.jsxs)(`p`,{className:`px-4 py-6 text-xs text-text-subtle text-center`,children:[`No connections yet.`,(0,W.jsx)(`br`,{}),`Click + to add one.`]}):(0,W.jsx)(`div`,{className:`py-1`,children:D.map(e=>{let r=f.has(e),c=e===`__ungrouped__`?`Ungrouped`:e,d=E[e],p=D.length>1||e!==`__ungrouped__`;return(0,W.jsxs)(`div`,{children:[p&&(0,W.jsxs)(`button`,{onClick:()=>C(e),className:`w-full flex items-center gap-1 px-2 py-1 text-[10px] font-semibold text-text-subtle uppercase tracking-wider hover:text-text-secondary transition-colors`,children:[r?(0,W.jsx)(a,{className:`size-3`}):(0,W.jsx)(s,{className:`size-3`}),c]}),r&&(0,W.jsx)(`div`,{className:p?`ml-[11px] border-l border-dashed border-border`:``,children:d.map(e=>{let r=u.has(e.id),c=t.get(e.id)??[],d=g.has(e.id),f=O.get(e.id)??new Map,h=f.size<=1,_=v.get(e.id)??``;return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`div`,{className:L(`group flex items-center gap-1 py-1 hover:bg-surface-elevated transition-colors`,p?`pl-3 pr-2`:`px-2`),children:[(0,W.jsx)(`button`,{onClick:()=>{S(e.id),!u.has(e.id)&&c.length===0&&T(e.id)},className:`shrink-0 text-text-subtle hover:text-foreground transition-colors`,children:r?(0,W.jsx)(a,{className:`size-3`}):(0,W.jsx)(s,{className:`size-3`})}),(0,W.jsx)(`span`,{className:`shrink-0 size-2 rounded-full border border-border`,style:{backgroundColor:e.color??`transparent`}}),(0,W.jsx)(`button`,{className:`flex-1 text-left text-xs truncate hover:text-primary transition-colors`,onClick:()=>{S(e.id),!u.has(e.id)&&c.length===0&&T(e.id)},children:e.name}),(0,W.jsx)(`span`,{className:`shrink-0 text-[9px] text-text-subtle uppercase px-1 rounded bg-surface-elevated`,children:e.type===`postgres`?`PG`:`DB`}),e.readonly===1&&(0,W.jsx)(`span`,{title:`Readonly`,children:(0,W.jsx)(ht,{className:`shrink-0 size-2.5 text-text-subtle`})}),(0,W.jsxs)(`div`,{className:`flex can-hover:hidden can-hover:group-hover:flex items-center gap-0.5 shrink-0`,children:[(0,W.jsx)(`button`,{onClick:()=>T(e.id),disabled:d,className:`p-0.5 text-text-subtle hover:text-foreground transition-colors`,title:`Refresh tables`,children:(0,W.jsx)(Lt,{className:L(`size-3`,d&&`animate-spin`)})}),(0,W.jsx)(`button`,{onClick:()=>i(e),className:`p-0.5 text-text-subtle hover:text-foreground transition-colors`,title:`Edit`,children:(0,W.jsx)(Ot,{className:`size-3`})}),(0,W.jsx)(`button`,{onClick:()=>o(e.id),className:`p-0.5 text-text-subtle hover:text-red-500 transition-colors`,title:`Delete`,children:(0,W.jsx)(Xt,{className:`size-3`})})]})]}),r&&(0,W.jsxs)(`div`,{className:`ml-[11px] border-l border-dashed border-border pl-1`,children:[d&&c.length===0&&(0,W.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`Loading…`}),!d&&c.length===0&&(0,W.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`No tables cached`}),c.length>0&&(0,W.jsxs)(W.Fragment,{children:[c.length>5&&(0,W.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-0.5`,children:[(0,W.jsx)(Vt,{className:`size-2.5 text-text-subtle shrink-0`}),(0,W.jsx)(`input`,{type:`text`,value:_,onChange:t=>y(n=>new Map(n).set(e.id,t.target.value)),placeholder:`Filter tables…`,className:`w-full text-[10px] bg-transparent border-none outline-none text-foreground placeholder:text-text-subtle`})]}),(0,W.jsx)(fg,{connId:e.id,connType:e.type,schemas:f,isSingleSchema:h,filter:_,expandedTables:m,loadingColumns:b,columnCache:l,onToggleTable:w,onOpenTable:(t,r)=>n(e,t,r)})]})]})]},e.id)})})]},e)})})}function fg({connId:e,connType:t,schemas:n,isSingleSchema:r,filter:i,expandedTables:o,loadingColumns:c,columnCache:l,onToggleTable:u,onOpenTable:d}){let f=i.toLowerCase();return(0,W.jsxs)(`div`,{className:`overflow-y-auto`,style:{maxHeight:300},children:[Array.from(n.entries()).map(([t,n])=>{let i=f?n.filter(e=>e.tableName.toLowerCase().includes(f)):n;return i.length===0?null:(0,W.jsxs)(`div`,{children:[!r&&(0,W.jsx)(`p`,{className:`px-2 py-0.5 text-[9px] font-semibold text-text-subtle uppercase tracking-wider`,children:t}),i.map(t=>{let n=`${e}:${t.schemaName}.${t.tableName}`,r=o.has(n),i=c.has(n),f=l?.get(n);return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1 pl-2 pr-2 py-0.5 hover:bg-surface-elevated transition-colors group/table`,children:[(0,W.jsx)(`button`,{onClick:()=>u(e,t.tableName,t.schemaName),className:`shrink-0 text-text-subtle hover:text-foreground transition-colors`,children:r?(0,W.jsx)(a,{className:`size-2.5`}):(0,W.jsx)(s,{className:`size-2.5`})}),(0,W.jsx)(Re,{className:`size-2.5 shrink-0 text-text-subtle`}),(0,W.jsx)(`button`,{onClick:()=>d(t.tableName,t.schemaName),className:`flex-1 text-left text-[11px] text-text-secondary hover:text-foreground transition-colors truncate`,children:t.tableName}),(0,W.jsx)(`span`,{className:`text-[9px] text-text-subtle`,children:t.rowCount})]}),r&&(0,W.jsxs)(`div`,{className:`ml-[18px] border-l border-dotted border-border pl-2`,children:[i&&(0,W.jsx)(`p`,{className:`text-[9px] text-text-subtle px-1 py-0.5`,children:`Loading…`}),f&&f.map(e=>(0,W.jsxs)(`div`,{className:`flex items-center gap-1 px-1 py-px text-[10px] text-text-subtle`,title:e.fk?`FK → ${e.fk.table}.${e.fk.column}`:void 0,children:[e.pk&&(0,W.jsx)(lt,{className:`size-2.5 text-amber-500 shrink-0`}),e.fk&&(0,W.jsx)(ft,{className:`size-2.5 text-blue-400 shrink-0`}),!e.pk&&!e.fk&&(0,W.jsx)(`span`,{className:`size-2.5 shrink-0`}),(0,W.jsxs)(`span`,{className:`truncate`,children:[e.name,e.nullable?`?`:``]}),(0,W.jsx)(`span`,{className:`ml-auto text-[9px] text-text-subtle/60 shrink-0`,children:e.type})]},e.name)),!i&&!f&&(0,W.jsx)(`p`,{className:`text-[9px] text-text-subtle px-1 py-0.5`,children:`No columns`})]})]},n)})]},t)}),i&&Array.from(n.values()).every(e=>!e.some(e=>e.tableName.toLowerCase().includes(f)))&&(0,W.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`No match`})]})}var pg=`ppm-recent-paths`,mg=5,hg=[{name:`Home`,path:`~`,icon:ot},{name:`Desktop`,path:`~/Desktop`,icon:xt},{name:`Documents`,path:`~/Documents`,icon:qe},{name:`Downloads`,path:`~/Downloads`,icon:ze}];function gg(){try{return JSON.parse(localStorage.getItem(pg)??`[]`)}catch{return[]}}function _g(e){let t=[e,...gg().filter(t=>t!==e)].slice(0,mg);localStorage.setItem(pg,JSON.stringify(t))}function vg(e){return e==null?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function yg(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4);if(n<1)return`now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function bg(e){if(e.type===`directory`)return(0,W.jsx)(et,{className:`size-4 text-blue-500`});let t=e.name.split(`.`).pop()?.toLowerCase();return t&&[`db`,`sqlite`,`sqlite3`].includes(t)?(0,W.jsx)(Re,{className:`size-4 text-amber-500`}):(0,W.jsx)(Ye,{className:`size-4 text-text-subtle`})}function xg(e,t){if(!t?.length)return!0;let n=`.`+e.split(`.`).pop()?.toLowerCase();return t.includes(n)}function Sg({open:e,mode:t,accept:n,root:r,title:i,onSelect:a,onCancel:o}){let[c,l]=(0,H.useState)([]),[u,d]=(0,H.useState)(``),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)([]),[g,_]=(0,H.useState)(null),[v,y]=(0,H.useState)(!1),[b,x]=(0,H.useState)(null),[S,C]=(0,H.useState)(``),[w,T]=(0,H.useState)(``),[E,D]=(0,H.useState)(!1),[O,k]=(0,H.useState)([]),A=(0,H.useRef)(null),j=typeof window<`u`&&window.innerWidth<768,ee=t===`folder`?`Select Folder`:t===`file`?`Select File`:`Select File or Folder`,te=(0,H.useCallback)(async(e,t)=>{y(!0),x(null),_(null),C(``);try{let n=new URLSearchParams;e&&n.set(`path`,e),t&&n.set(`showHidden`,`true`);let r=await B.get(`/api/fs/browse?${n}`);l(r.entries),d(r.current),p(r.parent),h(r.breadcrumbs),T(r.current)}catch(e){x(e.message||`Failed to browse directory`)}finally{y(!1)}},[]);(0,H.useEffect)(()=>{e&&(te(r??`~`,E),k(gg()))},[e,r,te,E]);let M=e=>te(e,E),N=()=>{let e=!E;D(e),te(u||(r??`~`),e)},P=e=>{e.key===`Enter`&&w.trim()&&te(w.trim())},F=e=>{e.type===`directory`?t===`file`?M(e.path):_(e.path):t!==`folder`&&_(e.path)},ne=e=>{e.type===`directory`&&M(e.path)},I=()=>{g&&(_g(u),a(g))},re=c.filter(e=>!(S&&!e.name.toLowerCase().includes(S.toLowerCase())||e.type===`file`&&n?.length&&!xg(e.name,n))),R=e=>e.type===`directory`?t!==`file`:t!==`folder`,ie=(0,W.jsxs)(`div`,{className:`flex flex-col flex-1 min-h-0`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 px-3 py-2 border-b border-border`,children:[f&&(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0`,onClick:()=>M(f),children:(0,W.jsx)(ge,{className:`size-4`})}),(0,W.jsx)(zm,{value:w,onChange:e=>T(e.target.value),onKeyDown:P,placeholder:`Type path and press Enter`,className:`h-7 text-xs font-mono flex-1`})]}),(0,W.jsx)(`div`,{className:`flex items-center gap-0.5 px-3 py-1.5 border-b border-border overflow-x-auto text-xs`,children:m.map((e,t)=>(0,W.jsxs)(`span`,{className:`flex items-center shrink-0`,children:[t>0&&(0,W.jsx)(s,{className:`size-3 text-text-subtle mx-0.5`}),(0,W.jsx)(`button`,{type:`button`,onClick:()=>M(e.path),className:`hover:text-primary hover:underline text-text-secondary`,children:e.name})]},e.path))}),(0,W.jsxs)(`div`,{className:`flex flex-1 min-h-0 overflow-hidden`,children:[!j&&(0,W.jsxs)(`div`,{className:`w-36 border-r border-border py-2 px-1 shrink-0 overflow-y-auto`,children:[hg.map(e=>(0,W.jsxs)(`button`,{type:`button`,onClick:()=>M(e.path),className:L(`flex items-center gap-2 w-full px-2 py-1 text-xs rounded-md hover:bg-surface-hover text-left`,u.endsWith(e.name)&&`bg-primary/10 text-primary`),children:[(0,W.jsx)(e.icon,{className:`size-3.5`}),e.name]},e.path)),O.length>0&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`text-[10px] text-text-subtle px-2 mt-3 mb-1 font-medium`,children:`Recent`}),O.map(e=>(0,W.jsxs)(`button`,{type:`button`,onClick:()=>M(e),className:`flex items-center gap-2 w-full px-2 py-1 text-xs rounded-md hover:bg-surface-hover text-left truncate`,children:[(0,W.jsx)(Fe,{className:`size-3 shrink-0`}),(0,W.jsx)(`span`,{className:`truncate`,children:e.split(`/`).pop()})]},e))]})]}),(0,W.jsx)(bm,{className:`flex-1 min-h-0`,children:v?(0,W.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,W.jsx)(V,{className:`size-5 animate-spin text-text-subtle`})}):b?(0,W.jsx)(`div`,{className:`text-center py-8 text-xs text-red-500`,children:b}):re.length===0?(0,W.jsx)(`div`,{className:`text-center py-8 text-xs text-text-subtle`,children:S?`No matching entries`:`Empty directory`}):(0,W.jsx)(`div`,{ref:A,className:`py-1`,children:re.map(e=>{let t=R(e);return(0,W.jsxs)(`button`,{type:`button`,onClick:()=>F(e),onDoubleClick:()=>ne(e),className:L(`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors`,g===e.path?`bg-primary/10 text-primary`:t?`hover:bg-surface-hover text-text-primary`:`opacity-40 cursor-default`),disabled:!t&&e.type===`file`,children:[bg(e),(0,W.jsx)(`span`,{className:L(`flex-1 truncate`,e.type===`directory`&&`font-medium`),children:e.name}),(0,W.jsx)(`span`,{className:`text-text-subtle text-[10px] shrink-0 w-14 text-right`,children:vg(e.size)}),(0,W.jsx)(`span`,{className:`text-text-subtle text-[10px] shrink-0 w-14 text-right`,children:yg(e.modified)})]},e.path)})})})]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-t border-border shrink-0`,children:[(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:L(`size-7 shrink-0`,E&&`text-primary`),onClick:N,title:E?`Hide hidden files`:`Show hidden files`,children:E?(0,W.jsx)(Ue,{className:`size-3.5`}):(0,W.jsx)(He,{className:`size-3.5`})}),n?.length?(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle bg-surface-hover px-1.5 py-0.5 rounded`,children:n.join(`, `)}):null,(0,W.jsx)(`div`,{className:`flex-1 max-w-48`,children:(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(Vt,{className:`absolute left-2 top-1/2 -translate-y-1/2 size-3 text-text-subtle`}),(0,W.jsx)(zm,{value:S,onChange:e=>C(e.target.value),placeholder:`Filter...`,className:`h-6 text-[11px] pl-6`})]})}),(0,W.jsx)(`div`,{className:`flex-1`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:o,className:`h-7 text-xs`,children:`Cancel`}),(0,W.jsx)($,{size:`sm`,onClick:I,disabled:!g,className:`h-7 text-xs`,children:`Select`})]})]});return(0,W.jsx)(Am,{open:e,onOpenChange:e=>{e||o()},children:(0,W.jsxs)(Pm,{className:L(`p-0 gap-0 overflow-hidden flex flex-col`,j?`max-w-[95vw] h-[85vh]`:`max-w-2xl h-[70vh]`),children:[(0,W.jsx)(Fm,{className:`px-3 py-2 border-b border-border`,children:(0,W.jsx)(Lm,{className:`text-sm`,children:i??ee})}),ie]})})}function Cg({mode:e,accept:t,root:n,title:r,onSelect:i,className:a}){let[o,s]=(0,H.useState)(!1);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)($,{type:`button`,variant:`ghost`,size:`icon`,className:L(`size-8 shrink-0`,a),onClick:()=>s(!0),title:r??`Browse...`,children:(0,W.jsx)(Ze,{className:`size-4`})}),(0,W.jsx)(Sg,{open:o,mode:e,accept:t,root:n,title:r,onSelect:e=>{i(e),s(!1)},onCancel:()=>s(!1)})]})}var wg=[`#ef4444`,`#f97316`,`#eab308`,`#22c55e`,`#06b6d4`,`#3b82f6`,`#8b5cf6`,`#ec4899`,`#6b7280`,`#000000`];function Tg({value:e,onChange:t}){return(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,W.jsx)(`button`,{type:`button`,onClick:()=>t(null),className:L(`size-6 rounded-full border-2 transition-all`,e?`border-border hover:scale-105`:`border-primary scale-110`,`bg-transparent relative`),title:`No color`,children:(0,W.jsx)(`span`,{className:`absolute inset-0 flex items-center justify-center text-[8px] text-text-subtle`,children:`×`})}),wg.map(n=>(0,W.jsx)(`button`,{type:`button`,onClick:()=>t(n),className:L(`size-6 rounded-full border-2 transition-all hover:scale-105`,e===n?`border-primary scale-110`:`border-transparent`),style:{backgroundColor:n},title:n},n))]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(`div`,{className:`size-6 rounded-full border border-border shrink-0`,style:{backgroundColor:e??`transparent`}}),(0,W.jsx)(`input`,{type:`text`,value:e??``,onChange:e=>{let n=e.target.value.trim();if(n===``){t(null);return}/^#[0-9a-fA-F]{6}$/.test(n),t(n)},placeholder:`#3b82f6`,className:`flex-1 h-7 text-xs px-2 rounded-md border border-border bg-background focus:outline-none focus:border-primary font-mono`})]})]})}function Eg({open:e,onClose:t,connection:n,onSave:r,onUpdate:i,onTest:a,onTestRaw:o}){let s=!!n,[c,l]=(0,H.useState)({name:``,type:`postgres`,path:``,connectionString:``,groupName:``,color:null,readonly:!0}),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)(!1),[g,_]=(0,H.useState)(null);(0,H.useEffect)(()=>{if(!e){p(null),_(null);return}l(n?{name:n.name,type:n.type,path:``,connectionString:``,groupName:n.group_name??``,color:n.color,readonly:n.readonly===1}:{name:``,type:`postgres`,path:``,connectionString:``,groupName:``,color:null,readonly:!0})},[e,n]);let v=(e,t)=>{l(n=>({...n,[e]:t})),p(null)};return(0,W.jsx)(Am,{open:e,onOpenChange:e=>{e||t()},children:(0,W.jsxs)(Pm,{className:`max-w-md`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:s?`Edit Connection`:`Add Connection`})}),(0,W.jsxs)(`div`,{className:`space-y-3 py-1`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Name *`}),(0,W.jsx)(`input`,{value:c.name,onChange:e=>v(`name`,e.target.value),placeholder:`my-database`,className:`w-full h-8 text-sm px-2.5 rounded-md border border-border bg-background focus:outline-none focus:border-primary`})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Type`}),(0,W.jsxs)(`select`,{value:c.type,onChange:e=>v(`type`,e.target.value),className:`w-full h-8 text-sm px-2 rounded-md border border-border bg-background focus:outline-none focus:border-primary`,children:[(0,W.jsx)(`option`,{value:`postgres`,children:`PostgreSQL`}),(0,W.jsx)(`option`,{value:`sqlite`,children:`SQLite`})]})]}),c.type===`postgres`?(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Connection String *`}),(0,W.jsx)(`input`,{type:`password`,value:c.connectionString,onChange:e=>v(`connectionString`,e.target.value),placeholder:`postgresql://user:pass@host:5432/db`,className:`w-full h-8 text-sm px-2.5 rounded-md border border-border bg-background focus:outline-none focus:border-primary font-mono`})]}):(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`File Path *`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,W.jsx)(`input`,{value:c.path,onChange:e=>v(`path`,e.target.value),placeholder:`/path/to/database.db`,className:`flex-1 h-8 text-sm px-2.5 rounded-md border border-border bg-background focus:outline-none focus:border-primary font-mono`}),(0,W.jsx)(Cg,{mode:`file`,accept:[`.db`,`.sqlite`,`.sqlite3`],title:`Browse for SQLite database`,onSelect:e=>v(`path`,e)})]})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Group`}),(0,W.jsx)(`input`,{value:c.groupName,onChange:e=>v(`groupName`,e.target.value),placeholder:`Production`,className:`w-full h-8 text-sm px-2.5 rounded-md border border-border bg-background focus:outline-none focus:border-primary`})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Tab Color`}),(0,W.jsx)(Tg,{value:c.color,onChange:e=>v(`color`,e)})]}),s&&(0,W.jsxs)(`div`,{className:`flex items-center justify-between py-1`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Readonly`}),(0,W.jsx)(`p`,{className:`text-[10px] text-text-subtle`,children:`Block non-SELECT queries (AI protection)`})]}),(0,W.jsx)(`button`,{type:`button`,onClick:()=>v(`readonly`,!c.readonly),className:`relative w-9 h-5 rounded-full transition-colors ${c.readonly?`bg-primary`:`bg-border`}`,children:(0,W.jsx)(`span`,{className:`absolute top-0.5 left-0.5 size-4 rounded-full bg-white transition-transform ${c.readonly?`translate-x-4`:``}`})})]}),f&&(0,W.jsx)(`p`,{className:`text-xs ${f.ok?`text-green-500`:`text-red-500`}`,children:f.ok?`✓ Connection successful`:`✗ ${f.error}`}),g&&(0,W.jsx)(`p`,{className:`text-xs text-red-500`,children:g})]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:async()=>{d(!0),p(null);try{let e;if(s)e=await a(n.id);else if(o){let t=c.type===`postgres`?{type:`postgres`,connectionString:c.connectionString}:{type:`sqlite`,path:c.path};e=await o(c.type,t)}else e={ok:!1,error:`Save connection first`};p(e)}finally{d(!1)}},disabled:u,className:`mr-auto`,children:u?`Testing…`:`Test Connection`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:t,children:`Cancel`}),(0,W.jsx)($,{size:`sm`,onClick:async()=>{if(_(null),!c.name.trim()){_(`Name is required`);return}h(!0);try{if(s&&i){let e=(c.type===`postgres`?c.connectionString.trim():c.path.trim())?c.type===`postgres`?{type:`postgres`,connectionString:c.connectionString}:{type:`sqlite`,path:c.path}:void 0;await i(n.id,{name:c.name.trim(),...e!==void 0&&{connectionConfig:e},groupName:c.groupName.trim()||null,color:c.color,readonly:c.readonly?1:0})}else if(r){let e=c.type===`postgres`?{type:`postgres`,connectionString:c.connectionString}:{type:`sqlite`,path:c.path};await r({type:c.type,name:c.name.trim(),connectionConfig:e,groupName:c.groupName.trim()||void 0,color:c.color??void 0})}t()}catch(e){_(e.message)}finally{h(!1)}},disabled:m,children:m?`Saving…`:s?`Save`:`Add`})]})]})})}function Dg({onExport:e,onImport:t}){let[n,r]=(0,H.useState)(!1),i=(0,H.useRef)(null),a=()=>r(!1),o=async()=>{a();try{let t=await e(),n=new Blob([JSON.stringify(t,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`ppm-connections-${new Date().toISOString().slice(0,10)}.json`,i.click(),URL.revokeObjectURL(r)}catch(e){alert(`Export failed: ${e.message}`)}},s=async()=>{a();try{let t=await e();await navigator.clipboard.writeText(JSON.stringify(t,null,2)),alert(`Copied ${t.connections.length} connection(s) to clipboard`)}catch(e){alert(`Export failed: ${e.message}`)}},c=async e=>{try{let n=JSON.parse(e),r=n.connections??n;if(!Array.isArray(r)){alert(`Invalid format: expected connections array`);return}let i=await t({connections:r}),a=`Imported ${i.imported} connection(s)`;i.skipped>0&&(a+=`, ${i.skipped} skipped`),i.errors?.length>0&&(a+=`\n\nErrors:\n${i.errors.join(`
|
|
22
|
-
`)}`),alert(a)}catch(e){alert(`Import failed: ${e.message}`)}};return(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(`button`,{onClick:()=>r(e=>!e),className:`flex items-center justify-center size-5 rounded hover:bg-surface-elevated transition-colors text-text-subtle hover:text-foreground`,title:`Import / Export`,children:(0,W.jsx)(Be,{className:`size-3.5`})}),n&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:a}),(0,W.jsxs)(`div`,{className:`absolute right-0 top-full mt-1 z-50 w-44 bg-background border border-border rounded-md shadow-lg py-1 text-xs`,children:[(0,W.jsxs)(`button`,{onClick:o,className:`w-full flex items-center gap-2 px-3 py-1.5 hover:bg-surface-elevated transition-colors text-left`,children:[(0,W.jsx)(ze,{className:`size-3`}),` Export to file`]}),(0,W.jsxs)(`button`,{onClick:s,className:`w-full flex items-center gap-2 px-3 py-1.5 hover:bg-surface-elevated transition-colors text-left`,children:[(0,W.jsx)(Pe,{className:`size-3`}),` Export to clipboard`]}),(0,W.jsx)(`div`,{className:`border-t border-border my-1`}),(0,W.jsxs)(`button`,{onClick:()=>{a(),i.current?.click()},className:`w-full flex items-center gap-2 px-3 py-1.5 hover:bg-surface-elevated transition-colors text-left`,children:[(0,W.jsx)(en,{className:`size-3`}),` Import from file`]}),(0,W.jsxs)(`button`,{onClick:async()=>{a();try{let e=await navigator.clipboard.readText();if(!e.trim()){alert(`Clipboard is empty`);return}await c(e)}catch(e){alert(`Clipboard read failed: ${e.message}`)}},className:`w-full flex items-center gap-2 px-3 py-1.5 hover:bg-surface-elevated transition-colors text-left`,children:[(0,W.jsx)(Ne,{className:`size-3`}),` Import from clipboard`]})]})]}),(0,W.jsx)(`input`,{ref:i,type:`file`,accept:`.json`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];if(!t)return;let n=new FileReader;n.onload=()=>c(n.result),n.readAsText(t),e.target.value=``}})]})}function Og(){let[e,t]=(0,H.useState)([]),[n,r]=(0,H.useState)(!0),[i,a]=(0,H.useState)(new Map),o=(0,H.useCallback)(async()=>{try{t(await B.get(`/api/db/connections`))}catch{}finally{r(!1)}},[]);(0,H.useEffect)(()=>{o()},[o]);let s=(0,H.useCallback)(async e=>{let n=await B.post(`/api/db/connections`,e);return t(e=>[...e,n]),n},[]),c=(0,H.useCallback)(async(e,n)=>{let r=await B.put(`/api/db/connections/${e}`,n);t(t=>t.map(t=>t.id===e?r:t))},[]),l=(0,H.useCallback)(async e=>{await B.del(`/api/db/connections/${e}`),t(t=>t.filter(t=>t.id!==e)),a(t=>{let n=new Map(t);return n.delete(e),n})},[]),u=(0,H.useCallback)(async e=>B.post(`/api/db/connections/${e}/test`),[]),d=(0,H.useCallback)(async(e,t)=>B.post(`/api/db/test`,{type:e,connectionConfig:t}),[]),f=(0,H.useCallback)(async e=>{let t=(await B.get(`/api/db/connections/${e}/tables`)).map(t=>({connectionId:e,tableName:t.name,schemaName:t.schema,rowCount:t.rowCount,cachedAt:new Date().toISOString()}));a(n=>new Map(n).set(e,t))},[]),[p,m]=(0,H.useState)(new Map);return{connections:e,loading:n,cachedTables:i,columnCache:p,createConnection:s,updateConnection:c,deleteConnection:l,testConnection:u,testRawConnection:d,refreshTables:f,fetchColumns:(0,H.useCallback)(async(e,t,n)=>{let r=`${e}:${n??`main`}.${t}`,i=p.get(r);if(i)return i;let a=await B.get(`/api/db/connections/${e}/schema?table=${encodeURIComponent(t)}${n?`&schema=${encodeURIComponent(n)}`:``}`);return m(e=>new Map(e).set(r,a)),a},[p]),exportConnections:(0,H.useCallback)(async()=>B.get(`/api/db/connections/export`),[]),importConnections:(0,H.useCallback)(async e=>{let t=await B.post(`/api/db/connections/import`,e);return await o(),t},[o])}}function kg(){let{connections:e,loading:t,cachedTables:n,columnCache:r,createConnection:i,updateConnection:a,deleteConnection:o,testConnection:s,testRawConnection:c,refreshTables:l,fetchColumns:u,exportConnections:d,importConnections:f}=Og(),p=op(e=>e.openTab),[m,h]=(0,H.useState)(!1),[g,_]=(0,H.useState)(null);return(0,W.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-semibold text-text-subtle uppercase tracking-wider`,children:`Database`}),(0,W.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,W.jsx)(Dg,{onExport:d,onImport:f}),(0,W.jsx)(`button`,{onClick:()=>h(!0),className:`flex items-center justify-center size-5 rounded hover:bg-surface-elevated transition-colors text-text-subtle hover:text-foreground`,title:`Add connection`,children:(0,W.jsx)(Nt,{className:`size-3.5`})})]})]}),(0,W.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:t?(0,W.jsx)(`p`,{className:`px-4 py-6 text-xs text-text-subtle text-center`,children:`Loading…`}):(0,W.jsx)(dg,{connections:e,cachedTables:n,onOpenTable:(e,t,n)=>{p({type:`database`,title:`${e.name} · ${t}`,projectId:null,closable:!0,metadata:{connectionId:e.id,connectionName:e.name,dbType:e.type,tableName:t,schemaName:n,connectionColor:e.color}})},onRefreshTables:l,onEdit:_,onDelete:async e=>{confirm(`Delete this connection?`)&&await o(e)},onFetchColumns:u,columnCache:r})}),(0,W.jsx)(Eg,{open:m,onClose:()=>h(!1),onSave:async e=>{let t=await i(e);t&&l(t.id).catch(()=>{})},onTest:()=>Promise.resolve({ok:!1,error:`Save connection first`}),onTestRaw:c}),g&&(0,W.jsx)(Eg,{open:!!g,onClose:()=>_(null),connection:g,onUpdate:async(e,t)=>{await a(e,t)},onTest:e=>s(e)})]})}function Ag(e,t,n,r){if(!e)return null;try{let i=r?e:e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return n&&(i=`\\b${i}\\b`),RegExp(`(${i})`,t?`g`:`gi`)}catch{return null}}function jg({text:e,re:t}){if(!t)return(0,W.jsx)(`span`,{children:e});try{t.lastIndex=0;let n=e.split(t);return t.lastIndex=0,(0,W.jsx)(`span`,{children:n.map((e,n)=>(t.lastIndex=0,t.test(e)?(0,W.jsx)(`mark`,{className:`bg-yellow-300/40 text-foreground rounded-sm`,children:e},n):e))})}catch{return(0,W.jsx)(`span`,{children:e})}}function Mg({active:e,onClick:t,title:n,children:r}){return(0,W.jsx)(`button`,{onClick:t,title:n,className:L(`flex items-center justify-center w-6 h-6 rounded border shrink-0`,e?`border-primary text-primary bg-primary/10`:`border-border text-text-subtle hover:text-foreground hover:border-border/80`),children:r})}function Ng(){let{activeProject:e}=ap(),t=op(e=>e.openTab),[n,r]=(0,H.useState)(``),[i,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(!1),[p,m]=(0,H.useState)(!1),[h,g]=(0,H.useState)(``),[_,v]=(0,H.useState)(``),[y,b]=(0,H.useState)(!1),[x,S]=(0,H.useState)(null),[C,w]=(0,H.useState)([]),[T,E]=(0,H.useState)(0),[D,O]=(0,H.useState)(!1),[k,A]=(0,H.useState)(new Set),j=(0,H.useRef)(null),ee=(0,H.useRef)(null),te=(0,H.useCallback)(async(t,n,r,i,a)=>{if(m(!1),!e||!i&&t.length<2||i&&t.length<1){w([]),E(0);return}if(i)try{new RegExp(t)}catch{m(!0),w([]);return}O(!0);try{let o=new URLSearchParams({q:t,caseSensitive:String(n),wholeWord:String(r),regex:String(i)});a&&o.set(`include`,a);let s=await B.get(`${z(e.name)}/files/search?${o}`);w(s.results),E(s.total)}catch{w([])}finally{O(!1)}},[e]);(0,H.useEffect)(()=>(ee.current&&clearTimeout(ee.current),ee.current=setTimeout(()=>te(n,i,l,d,h),300),()=>{ee.current&&clearTimeout(ee.current)}),[n,i,l,d,h,te]),(0,H.useEffect)(()=>{j.current?.focus()},[]);let M=Ag(n,i,l,d);function N(n,r){e&&t({type:`editor`,title:n.split(`/`).pop()??n,metadata:{filePath:n,projectName:e.name,lineNumber:r},projectId:e.name,closable:!0})}function P(e){A(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function F(){if(!e||!n||C.length===0||y)return;b(!0),S(null);let t=0;try{for(let r of C){let a=await B.get(`${z(e.name)}/files/read?path=${encodeURIComponent(r.file)}`),o=Ag(n,i,l,d);if(!o)continue;o.lastIndex=0;let s=a.content.match(o)??[];if(!s.length)continue;t+=s.length,o.lastIndex=0;let c=a.content.replace(o,_);await B.put(`${z(e.name)}/files/write`,{path:r.file,content:c})}S(t),te(n,i,l,d,h)}catch{}finally{b(!1)}}return(0,W.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,W.jsxs)(`div`,{className:`p-2 border-b border-border space-y-1.5`,children:[(0,W.jsx)(`div`,{className:`relative flex items-center gap-1`,children:(0,W.jsxs)(`div`,{className:`relative flex-1`,children:[(0,W.jsx)(Vt,{className:`absolute left-2 top-1/2 -translate-y-1/2 size-3.5 text-text-subtle pointer-events-none`}),(0,W.jsx)(`input`,{ref:j,value:n,onChange:e=>{r(e.target.value),S(null)},placeholder:e?`Search files…`:`Select a project first`,disabled:!e,className:L(`w-full pl-7 pr-6 py-1 text-xs bg-input border rounded focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50`,p?`border-destructive`:`border-border`)}),n&&(0,W.jsx)(`button`,{onClick:()=>{r(``),w([]),E(0),m(!1),S(null)},className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-text-subtle hover:text-foreground`,children:(0,W.jsx)(o,{className:`size-3`})})]})}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(Mg,{active:i,onClick:()=>c(e=>!e),title:`Match Case (Alt+C)`,children:(0,W.jsx)(Te,{className:`size-3.5`})}),(0,W.jsx)(Mg,{active:l,onClick:()=>{u(e=>!e),d&&f(!1)},title:`Match Whole Word (Alt+W)`,children:(0,W.jsx)(tn,{className:`size-3.5`})}),(0,W.jsx)(Mg,{active:d,onClick:()=>{f(e=>!e),l&&u(!1)},title:`Use Regular Expression (Alt+R)`,children:(0,W.jsx)(Rt,{className:`size-3.5`})}),p&&(0,W.jsx)(`span`,{className:`text-[10px] text-destructive ml-1`,children:`Invalid regex`})]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsxs)(`div`,{className:`relative flex-1`,children:[(0,W.jsx)(`input`,{value:_,onChange:e=>v(e.target.value),placeholder:`Replace…`,disabled:!e,className:`w-full pl-2 pr-6 py-1 text-xs bg-input border border-border rounded focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50`}),_&&(0,W.jsx)(`button`,{onClick:()=>v(``),className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-text-subtle hover:text-foreground`,children:(0,W.jsx)(o,{className:`size-3`})})]}),(0,W.jsx)(`button`,{onClick:F,disabled:!n||C.length===0||y,title:`Replace All`,className:`flex items-center justify-center w-6 h-6 rounded border border-border text-text-subtle hover:text-foreground hover:border-border/80 disabled:opacity-40 shrink-0`,children:y?(0,W.jsx)(V,{className:`size-3.5 animate-spin`}):(0,W.jsx)(zt,{className:`size-3.5`})})]}),(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(`input`,{value:h,onChange:e=>g(e.target.value),placeholder:`Files to include (e.g. *.ts, src/**)`,disabled:!e,className:`w-full pl-2 pr-6 py-1 text-xs bg-input border border-border rounded focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50`}),h&&(0,W.jsx)(`button`,{onClick:()=>g(``),className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-text-subtle hover:text-foreground`,children:(0,W.jsx)(o,{className:`size-3`})})]}),(0,W.jsxs)(`div`,{className:`text-[10px] text-text-subtle h-3`,children:[(D||y)&&(0,W.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(V,{className:`size-2.5 animate-spin`}),y?`Replacing…`:`Searching…`]}),!D&&!y&&x!==null&&(0,W.jsxs)(`span`,{className:`text-green-500`,children:[x,` replacement`,x===1?``:`s`,` made`]}),!D&&!y&&x===null&&!p&&n.length>=2&&C.length===0&&(0,W.jsx)(`span`,{children:`No results`}),!D&&!y&&x===null&&T>0&&(0,W.jsxs)(`span`,{children:[T,` result`,T===1?``:`s`,` in `,C.length,` file`,C.length===1?``:`s`]})]})]}),(0,W.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:C.map(e=>{let t=k.has(e.file),n=e.file.split(`/`).pop()??e.file,r=e.file.includes(`/`)?e.file.slice(0,e.file.lastIndexOf(`/`)):``;return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`button`,{onClick:()=>P(e.file),className:`w-full flex items-center gap-1 px-2 py-1 hover:bg-muted/50 text-left`,children:[t?(0,W.jsx)(s,{className:`size-3 shrink-0 text-text-subtle`}):(0,W.jsx)(a,{className:`size-3 shrink-0 text-text-subtle`}),(0,W.jsx)(qe,{className:`size-3 shrink-0 text-text-subtle`}),(0,W.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate`,children:n}),(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle truncate flex-1 min-w-0 ml-1`,children:r}),(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0 ml-1 bg-muted px-1 rounded`,children:e.matches.length})]}),!t&&e.matches.map(t=>(0,W.jsxs)(`button`,{onClick:()=>N(e.file,t.lineNum),className:`w-full flex items-start gap-2 pl-7 pr-2 py-0.5 hover:bg-primary/10 text-left`,children:[(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0 w-7 text-right pt-px`,children:t.lineNum}),(0,W.jsx)(`span`,{className:`text-xs text-text-secondary truncate font-mono leading-4`,children:(0,W.jsx)(jg,{text:t.content.trimStart(),re:M})})]},`${e.file}-${t.lineNum}`))]},e.file)})})]})}function Pg(e,t){window.dispatchEvent(new CustomEvent(`ext:tree:expand`,{detail:{viewId:e,itemId:t}}))}function Fg(e,t){window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:t}}))}var Ig={refresh:Lt,edit:Ot,trash:Xt,plus:Nt,search:Vt};function Lg({viewId:e,className:t}){let n=vm(t=>t.treeViews[e])??[],r=vm(e=>e.contributions),i=(0,H.useMemo)(()=>{if(!r)return{name:e,headerActions:[]};let t=e,n=r.views;if(n)for(let r of Object.values(n)){let n=r.find(t=>t.id===e);if(n){t=n.name;break}}let i=[],a=r.menus?.[`view/title`];if(a)for(let t of a){if(t.when){let n=t.when.match(/view\s*==\s*(\S+)/);if(n&&n[1]!==e)continue}let n=r.commands?.find(e=>e.command===t.command);n&&i.push({command:n.command,title:n.title,icon:n.icon})}return{name:t,headerActions:i}},[r,e]);return(0,W.jsxs)(`div`,{className:L(`flex flex-col h-full`,t),children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-semibold text-text-subtle uppercase tracking-wider`,children:i.name}),(0,W.jsx)(`div`,{className:`flex items-center gap-0.5`,children:i.headerActions.map(e=>{let t=Ig[e.icon??Rg(e.command)]??Lt;return(0,W.jsx)(`button`,{onClick:()=>Fg(e.command),className:`flex items-center justify-center size-5 rounded hover:bg-surface-elevated transition-colors text-text-subtle hover:text-foreground`,title:e.title,children:(0,W.jsx)(t,{className:`size-3.5`})},e.command)})})]}),(0,W.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0 py-1`,role:`tree`,"aria-label":e,children:n.length===0?(0,W.jsx)(`p`,{className:`px-4 py-6 text-xs text-text-subtle text-center`,children:`No items`}):n.map(t=>(0,W.jsx)(zg,{item:t,depth:0,viewId:e},t.id))})]})}function Rg(e){return e.includes(`refresh`)?`refresh`:e.includes(`add`)||e.includes(`create`)||e.includes(`new`)?`plus`:e.includes(`delete`)||e.includes(`remove`)?`trash`:e.includes(`edit`)||e.includes(`update`)?`edit`:e.includes(`search`)||e.includes(`find`)?`search`:`refresh`}function zg({item:e,depth:t,viewId:n}){let[r,i]=(0,H.useState)(!1),o=e.collapsibleState!==`none`,c=(0,H.useRef)(!1);e.children&&e.children.length>0&&!c.current&&(c.current=!0,r||i(!0));let l=(0,H.useCallback)(()=>{if(!o)return;let t=!r;i(t),t&&(!e.children||e.children.length===0)&&Pg(n,e.id)},[o,r,e.id,e.children,n]),u=(0,H.useCallback)(()=>{l(),e.command&&Fg(e.command,e.commandArgs)},[l,e.command,e.commandArgs]),d=8+t*16;return(0,W.jsxs)(`div`,{role:`treeitem`,"aria-expanded":o?r:void 0,children:[(0,W.jsxs)(`div`,{className:L(`group/node flex items-center gap-1 py-1 hover:bg-surface-elevated transition-colors`),style:{paddingLeft:d,paddingRight:8},children:[(0,W.jsx)(`button`,{onClick:l,className:`shrink-0 text-text-subtle hover:text-foreground transition-colors`,children:o?r?(0,W.jsx)(a,{className:`size-3`}):(0,W.jsx)(s,{className:`size-3`}):(0,W.jsx)(`span`,{className:`size-3`})}),e.color&&(0,W.jsx)(`span`,{className:`shrink-0 size-2 rounded-full border border-border`,style:{backgroundColor:e.color}}),(0,W.jsx)(`button`,{className:`flex-1 text-left text-xs truncate hover:text-primary transition-colors`,onClick:u,children:e.label}),e.description&&(0,W.jsx)(`span`,{className:`shrink-0 ml-1 text-text-subtle text-[10px]`,children:e.description}),e.badge&&(0,W.jsx)(`span`,{className:`shrink-0 text-[9px] text-text-subtle uppercase px-1 rounded bg-surface-elevated`,children:e.badge}),e.actions&&e.actions.length>0&&(0,W.jsx)(`div`,{className:`flex can-hover:hidden can-hover:group-hover/node:flex items-center gap-0.5 shrink-0`,children:e.actions.map(e=>(0,W.jsx)(Bg,{action:e},e.command))})]}),o&&r&&e.children&&(0,W.jsx)(`div`,{role:`group`,children:e.children.map(e=>(0,W.jsx)(zg,{item:e,depth:t+1,viewId:n},e.id))})]})}function Bg({action:e}){let[t,n]=(0,H.useState)(!1),r=Ig[e.icon]??Lt,i=e.icon===`trash`;return(0,W.jsx)(`button`,{onClick:(0,H.useCallback)(t=>{t.stopPropagation(),e.icon===`refresh`&&(n(!0),setTimeout(()=>n(!1),1e3)),Fg(e.command,e.commandArgs)},[e]),className:L(`p-0.5 text-text-subtle transition-colors`,i?`hover:text-red-500`:`hover:text-foreground`),title:e.tooltip,children:(0,W.jsx)(r,{className:L(`size-3`,t&&`animate-spin`)})})}var Vg=[{id:`explorer`,label:`Explorer`,icon:Ze},{id:`search`,label:`Search`,icon:Vt},{id:`git`,label:`Git`,icon:tt},{id:`database`,label:`Database`,icon:Re},{id:`settings`,label:`Settings`,icon:Gt}];function Hg({onResize:e}){let t=(0,H.useRef)(!1);return(0,W.jsx)(`div`,{className:`absolute right-0 top-0 bottom-0 w-1 cursor-col-resize hover:bg-primary/30 active:bg-primary/50 transition-colors z-10`,onPointerDown:(0,H.useCallback)(e=>{e.preventDefault(),t.current=!0,e.currentTarget.setPointerCapture(e.pointerId),document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`},[]),onPointerMove:(0,H.useCallback)(n=>{t.current&&e(n.clientX-48)},[e]),onPointerUp:(0,H.useCallback)(e=>{t.current=!1,e.currentTarget.releasePointerCapture(e.pointerId),document.body.style.cursor=``,document.body.style.userSelect=``},[])})}function Ug(){let{activeProject:e}=ap(),t=U(e=>e.sidebarCollapsed),n=U(e=>e.sidebarWidth),r=U(e=>e.toggleSidebar),i=U(e=>e.setSidebarWidth),a=U(e=>e.sidebarActiveTab),o=U(e=>e.setSidebarActiveTab),s=vm(e=>e.contributions),c=(0,H.useMemo)(()=>{let e=[...Vg];if(s?.views){let t=s.views.sidebar??s.views.explorer??[];for(let n of t)e.push({id:`ext:${n.id}`,label:n.name,icon:It})}return e},[s]);return t?(0,W.jsx)(`aside`,{className:`hidden md:flex flex-col w-10 min-w-10 bg-background border-r border-border`,children:(0,W.jsx)(`button`,{onClick:r,title:`Expand sidebar (⌘B)`,className:`flex items-center justify-center h-[41px] border-b border-border text-text-secondary hover:text-foreground transition-colors`,children:(0,W.jsx)(Dt,{className:`size-4`})})}):(0,W.jsxs)(`aside`,{className:`hidden md:flex flex-col bg-background border-r border-border overflow-hidden relative`,style:{width:n,minWidth:200,maxWidth:600},children:[(0,W.jsxs)(`div`,{className:`flex items-center h-[41px] border-b border-border shrink-0`,children:[c.map(e=>{let t=e.icon;return(0,W.jsx)(`button`,{onClick:()=>o(e.id),className:L(`flex-1 flex items-center justify-center gap-1.5 h-full text-xs transition-colors border-b-2 -mb-px`,a===e.id?`border-primary text-primary font-medium`:`border-transparent text-text-secondary hover:text-foreground`),children:(0,W.jsx)(t,{className:`size-3.5`,title:e.label})},e.id)}),(0,W.jsx)(`button`,{onClick:r,title:`Collapse sidebar (⌘B)`,className:`flex items-center justify-center w-8 h-full text-text-subtle hover:text-text-secondary transition-colors shrink-0`,children:(0,W.jsx)(Et,{className:`size-3.5`})})]}),(0,W.jsxs)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:[a===`explorer`&&(e?(0,W.jsx)(qm,{}):(0,W.jsx)(`div`,{className:`flex items-center justify-center h-24 p-4`,children:(0,W.jsx)(`p`,{className:`text-xs text-text-subtle text-center`,children:`Select a project to browse files`})})),a===`git`&&(0,W.jsx)(ch,{metadata:{projectName:e?.name}}),a===`search`&&(0,W.jsx)(Ng,{}),a===`database`&&(0,W.jsx)(kg,{}),a===`settings`&&(0,W.jsx)(lg,{}),typeof a==`string`&&a.startsWith(`ext:`)&&(0,W.jsx)(Lg,{viewId:a.slice(4),className:`h-full`})]}),(0,W.jsx)(Hg,{onResize:i})]})}var Wg=Object.defineProperty,Gg=Object.getOwnPropertySymbols,Kg=Object.prototype.hasOwnProperty,qg=Object.prototype.propertyIsEnumerable,Jg=(e,t,n)=>t in e?Wg(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Yg=(e,t)=>{for(var n in t||={})Kg.call(t,n)&&Jg(e,n,t[n]);if(Gg)for(var n of Gg(t))qg.call(t,n)&&Jg(e,n,t[n]);return e},Xg=(e,t)=>{var n={};for(var r in e)Kg.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Gg)for(var r of Gg(e))t.indexOf(r)<0&&qg.call(e,r)&&(n[r]=e[r]);return n},Zg;(e=>{let t=class t{constructor(e,n,r,a){if(this.version=e,this.errorCorrectionLevel=n,this.modules=[],this.isFunction=[],e<t.MIN_VERSION||e>t.MAX_VERSION)throw RangeError(`Version value out of range`);if(a<-1||a>7)throw RangeError(`Mask value out of range`);this.size=e*4+17;let o=[];for(let e=0;e<this.size;e++)o.push(!1);for(let e=0;e<this.size;e++)this.modules.push(o.slice()),this.isFunction.push(o.slice());this.drawFunctionPatterns();let s=this.addEccAndInterleave(r);if(this.drawCodewords(s),a==-1){let e=1e9;for(let t=0;t<8;t++){this.applyMask(t),this.drawFormatBits(t);let n=this.getPenaltyScore();n<e&&(a=t,e=n),this.applyMask(t)}}i(0<=a&&a<=7),this.mask=a,this.applyMask(a),this.drawFormatBits(a),this.isFunction=[]}static encodeText(n,r){let i=e.QrSegment.makeSegments(n);return t.encodeSegments(i,r)}static encodeBinary(n,r){let i=e.QrSegment.makeBytes(n);return t.encodeSegments([i],r)}static encodeSegments(e,r,a=1,s=40,c=-1,l=!0){if(!(t.MIN_VERSION<=a&&a<=s&&s<=t.MAX_VERSION)||c<-1||c>7)throw RangeError(`Invalid value`);let u,d;for(u=a;;u++){let n=t.getNumDataCodewords(u,r)*8,i=o.getTotalBits(e,u);if(i<=n){d=i;break}if(u>=s)throw RangeError(`Data too long`)}for(let e of[t.Ecc.MEDIUM,t.Ecc.QUARTILE,t.Ecc.HIGH])l&&d<=t.getNumDataCodewords(u,e)*8&&(r=e);let f=[];for(let t of e){n(t.mode.modeBits,4,f),n(t.numChars,t.mode.numCharCountBits(u),f);for(let e of t.getData())f.push(e)}i(f.length==d);let p=t.getNumDataCodewords(u,r)*8;i(f.length<=p),n(0,Math.min(4,p-f.length),f),n(0,(8-f.length%8)%8,f),i(f.length%8==0);for(let e=236;f.length<p;e^=253)n(e,8,f);let m=[];for(;m.length*8<f.length;)m.push(0);return f.forEach((e,t)=>m[t>>>3]|=e<<7-(t&7)),new t(u,r,m,c)}getModule(e,t){return 0<=e&&e<this.size&&0<=t&&t<this.size&&this.modules[t][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let e=0;e<this.size;e++)this.setFunctionModule(6,e,e%2==0),this.setFunctionModule(e,6,e%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);let e=this.getAlignmentPatternPositions(),t=e.length;for(let n=0;n<t;n++)for(let r=0;r<t;r++)n==0&&r==0||n==0&&r==t-1||n==t-1&&r==0||this.drawAlignmentPattern(e[n],e[r]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){let t=this.errorCorrectionLevel.formatBits<<3|e,n=t;for(let e=0;e<10;e++)n=n<<1^(n>>>9)*1335;let a=(t<<10|n)^21522;i(a>>>15==0);for(let e=0;e<=5;e++)this.setFunctionModule(8,e,r(a,e));this.setFunctionModule(8,7,r(a,6)),this.setFunctionModule(8,8,r(a,7)),this.setFunctionModule(7,8,r(a,8));for(let e=9;e<15;e++)this.setFunctionModule(14-e,8,r(a,e));for(let e=0;e<8;e++)this.setFunctionModule(this.size-1-e,8,r(a,e));for(let e=8;e<15;e++)this.setFunctionModule(8,this.size-15+e,r(a,e));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let t=0;t<12;t++)e=e<<1^(e>>>11)*7973;let t=this.version<<12|e;i(t>>>18==0);for(let e=0;e<18;e++){let n=r(t,e),i=this.size-11+e%3,a=Math.floor(e/3);this.setFunctionModule(i,a,n),this.setFunctionModule(a,i,n)}}drawFinderPattern(e,t){for(let n=-4;n<=4;n++)for(let r=-4;r<=4;r++){let i=Math.max(Math.abs(r),Math.abs(n)),a=e+r,o=t+n;0<=a&&a<this.size&&0<=o&&o<this.size&&this.setFunctionModule(a,o,i!=2&&i!=4)}}drawAlignmentPattern(e,t){for(let n=-2;n<=2;n++)for(let r=-2;r<=2;r++)this.setFunctionModule(e+r,t+n,Math.max(Math.abs(r),Math.abs(n))!=1)}setFunctionModule(e,t,n){this.modules[t][e]=n,this.isFunction[t][e]=!0}addEccAndInterleave(e){let n=this.version,r=this.errorCorrectionLevel;if(e.length!=t.getNumDataCodewords(n,r))throw RangeError(`Invalid argument`);let a=t.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][n],o=t.ECC_CODEWORDS_PER_BLOCK[r.ordinal][n],s=Math.floor(t.getNumRawDataModules(n)/8),c=a-s%a,l=Math.floor(s/a),u=[],d=t.reedSolomonComputeDivisor(o);for(let n=0,r=0;n<a;n++){let i=e.slice(r,r+l-o+(n<c?0:1));r+=i.length;let a=t.reedSolomonComputeRemainder(i,d);n<c&&i.push(0),u.push(i.concat(a))}let f=[];for(let e=0;e<u[0].length;e++)u.forEach((t,n)=>{(e!=l-o||n>=c)&&f.push(t[e])});return i(f.length==s),f}drawCodewords(e){if(e.length!=Math.floor(t.getNumRawDataModules(this.version)/8))throw RangeError(`Invalid argument`);let n=0;for(let t=this.size-1;t>=1;t-=2){t==6&&(t=5);for(let i=0;i<this.size;i++)for(let a=0;a<2;a++){let o=t-a,s=t+1&2?i:this.size-1-i;!this.isFunction[s][o]&&n<e.length*8&&(this.modules[s][o]=r(e[n>>>3],7-(n&7)),n++)}}i(n==e.length*8)}applyMask(e){if(e<0||e>7)throw RangeError(`Mask value out of range`);for(let t=0;t<this.size;t++)for(let n=0;n<this.size;n++){let r;switch(e){case 0:r=(n+t)%2==0;break;case 1:r=t%2==0;break;case 2:r=n%3==0;break;case 3:r=(n+t)%3==0;break;case 4:r=(Math.floor(n/3)+Math.floor(t/2))%2==0;break;case 5:r=n*t%2+n*t%3==0;break;case 6:r=(n*t%2+n*t%3)%2==0;break;case 7:r=((n+t)%2+n*t%3)%2==0;break;default:throw Error(`Unreachable`)}!this.isFunction[t][n]&&r&&(this.modules[t][n]=!this.modules[t][n])}}getPenaltyScore(){let e=0;for(let n=0;n<this.size;n++){let r=!1,i=0,a=[0,0,0,0,0,0,0];for(let o=0;o<this.size;o++)this.modules[n][o]==r?(i++,i==5?e+=t.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,a),r||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),r=this.modules[n][o],i=1);e+=this.finderPenaltyTerminateAndCount(r,i,a)*t.PENALTY_N3}for(let n=0;n<this.size;n++){let r=!1,i=0,a=[0,0,0,0,0,0,0];for(let o=0;o<this.size;o++)this.modules[o][n]==r?(i++,i==5?e+=t.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,a),r||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),r=this.modules[o][n],i=1);e+=this.finderPenaltyTerminateAndCount(r,i,a)*t.PENALTY_N3}for(let n=0;n<this.size-1;n++)for(let r=0;r<this.size-1;r++){let i=this.modules[n][r];i==this.modules[n][r+1]&&i==this.modules[n+1][r]&&i==this.modules[n+1][r+1]&&(e+=t.PENALTY_N2)}let n=0;for(let e of this.modules)n=e.reduce((e,t)=>e+(t?1:0),n);let r=this.size*this.size,a=Math.ceil(Math.abs(n*20-r*10)/r)-1;return i(0<=a&&a<=9),e+=a*t.PENALTY_N4,i(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{let e=Math.floor(this.version/7)+2,t=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2,n=[6];for(let r=this.size-7;n.length<e;r-=t)n.splice(1,0,r);return n}}static getNumRawDataModules(e){if(e<t.MIN_VERSION||e>t.MAX_VERSION)throw RangeError(`Version number out of range`);let n=(16*e+128)*e+64;if(e>=2){let t=Math.floor(e/7)+2;n-=(25*t-10)*t-55,e>=7&&(n-=36)}return i(208<=n&&n<=29648),n}static getNumDataCodewords(e,n){return Math.floor(t.getNumRawDataModules(e)/8)-t.ECC_CODEWORDS_PER_BLOCK[n.ordinal][e]*t.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw RangeError(`Degree out of range`);let n=[];for(let t=0;t<e-1;t++)n.push(0);n.push(1);let r=1;for(let i=0;i<e;i++){for(let e=0;e<n.length;e++)n[e]=t.reedSolomonMultiply(n[e],r),e+1<n.length&&(n[e]^=n[e+1]);r=t.reedSolomonMultiply(r,2)}return n}static reedSolomonComputeRemainder(e,n){let r=n.map(e=>0);for(let i of e){let e=i^r.shift();r.push(0),n.forEach((n,i)=>r[i]^=t.reedSolomonMultiply(n,e))}return r}static reedSolomonMultiply(e,t){if(e>>>8||t>>>8)throw RangeError(`Byte out of range`);let n=0;for(let r=7;r>=0;r--)n=n<<1^(n>>>7)*285,n^=(t>>>r&1)*e;return i(n>>>8==0),n}finderPenaltyCountPatterns(e){let t=e[1];i(t<=this.size*3);let n=t>0&&e[2]==t&&e[3]==t*3&&e[4]==t&&e[5]==t;return(n&&e[0]>=t*4&&e[6]>=t?1:0)+(n&&e[6]>=t*4&&e[0]>=t?1:0)}finderPenaltyTerminateAndCount(e,t,n){return e&&(this.finderPenaltyAddHistory(t,n),t=0),t+=this.size,this.finderPenaltyAddHistory(t,n),this.finderPenaltyCountPatterns(n)}finderPenaltyAddHistory(e,t){t[0]==0&&(e+=this.size),t.pop(),t.unshift(e)}};t.MIN_VERSION=1,t.MAX_VERSION=40,t.PENALTY_N1=3,t.PENALTY_N2=3,t.PENALTY_N3=40,t.PENALTY_N4=10,t.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],t.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e.QrCode=t;function n(e,t,n){if(t<0||t>31||e>>>t)throw RangeError(`Value out of range`);for(let r=t-1;r>=0;r--)n.push(e>>>r&1)}function r(e,t){return(e>>>t&1)!=0}function i(e){if(!e)throw Error(`Assertion error`)}let a=class e{constructor(e,t,n){if(this.mode=e,this.numChars=t,this.bitData=n,t<0)throw RangeError(`Invalid argument`);this.bitData=n.slice()}static makeBytes(t){let r=[];for(let e of t)n(e,8,r);return new e(e.Mode.BYTE,t.length,r)}static makeNumeric(t){if(!e.isNumeric(t))throw RangeError(`String contains non-numeric characters`);let r=[];for(let e=0;e<t.length;){let i=Math.min(t.length-e,3);n(parseInt(t.substring(e,e+i),10),i*3+1,r),e+=i}return new e(e.Mode.NUMERIC,t.length,r)}static makeAlphanumeric(t){if(!e.isAlphanumeric(t))throw RangeError(`String contains unencodable characters in alphanumeric mode`);let r=[],i;for(i=0;i+2<=t.length;i+=2){let a=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i))*45;a+=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i+1)),n(a,11,r)}return i<t.length&&n(e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i)),6,r),new e(e.Mode.ALPHANUMERIC,t.length,r)}static makeSegments(t){return t==``?[]:e.isNumeric(t)?[e.makeNumeric(t)]:e.isAlphanumeric(t)?[e.makeAlphanumeric(t)]:[e.makeBytes(e.toUtf8ByteArray(t))]}static makeEci(t){let r=[];if(t<0)throw RangeError(`ECI assignment value out of range`);if(t<128)n(t,8,r);else if(t<16384)n(2,2,r),n(t,14,r);else if(t<1e6)n(6,3,r),n(t,21,r);else throw RangeError(`ECI assignment value out of range`);return new e(e.Mode.ECI,0,r)}static isNumeric(t){return e.NUMERIC_REGEX.test(t)}static isAlphanumeric(t){return e.ALPHANUMERIC_REGEX.test(t)}getData(){return this.bitData.slice()}static getTotalBits(e,t){let n=0;for(let r of e){let e=r.mode.numCharCountBits(t);if(r.numChars>=1<<e)return 1/0;n+=4+e+r.bitData.length}return n}static toUtf8ByteArray(e){e=encodeURI(e);let t=[];for(let n=0;n<e.length;n++)e.charAt(n)==`%`?(t.push(parseInt(e.substring(n+1,n+3),16)),n+=2):t.push(e.charCodeAt(n));return t}};a.NUMERIC_REGEX=/^[0-9]*$/,a.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,a.ALPHANUMERIC_CHARSET=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`;let o=a;e.QrSegment=a})(Zg||={}),(e=>{(e=>{let t=class{constructor(e,t){this.ordinal=e,this.formatBits=t}};t.LOW=new t(0,1),t.MEDIUM=new t(1,0),t.QUARTILE=new t(2,3),t.HIGH=new t(3,2),e.Ecc=t})(e.QrCode||={})})(Zg||={}),(e=>{(e=>{let t=class{constructor(e,t){this.modeBits=e,this.numBitsCharCount=t}numCharCountBits(e){return this.numBitsCharCount[Math.floor((e+7)/17)]}};t.NUMERIC=new t(1,[10,12,14]),t.ALPHANUMERIC=new t(2,[9,11,13]),t.BYTE=new t(4,[8,16,16]),t.KANJI=new t(8,[8,10,12]),t.ECI=new t(7,[0,0,0]),e.Mode=t})(e.QrSegment||={})})(Zg||={});var Qg=Zg,$g={L:Qg.QrCode.Ecc.LOW,M:Qg.QrCode.Ecc.MEDIUM,Q:Qg.QrCode.Ecc.QUARTILE,H:Qg.QrCode.Ecc.HIGH},e_=128,t_=`L`,n_=`#FFFFFF`,r_=`#000000`,i_=!1,a_=1,o_=4,s_=0,c_=.1;function l_(e,t=0){let n=[];return e.forEach(function(e,r){let i=null;e.forEach(function(a,o){if(!a&&i!==null){n.push(`M${i+t} ${r+t}h${o-i}v1H${i+t}z`),i=null;return}if(o===e.length-1){if(!a)return;i===null?n.push(`M${o+t},${r+t} h1v1H${o+t}z`):n.push(`M${i+t},${r+t} h${o+1-i}v1H${i+t}z`);return}a&&i===null&&(i=o)})}),n.join(``)}function u_(e,t){return e.slice().map((e,n)=>n<t.y||n>=t.y+t.h?e:e.map((e,n)=>n<t.x||n>=t.x+t.w?e:!1))}function d_(e,t,n,r){if(r==null)return null;let i=e.length+n*2,a=Math.floor(t*c_),o=i/t,s=(r.width||a)*o,c=(r.height||a)*o,l=r.x==null?e.length/2-s/2:r.x*o,u=r.y==null?e.length/2-c/2:r.y*o,d=r.opacity==null?1:r.opacity,f=null;if(r.excavate){let e=Math.floor(l),t=Math.floor(u);f={x:e,y:t,w:Math.ceil(s+l-e),h:Math.ceil(c+u-t)}}let p=r.crossOrigin;return{x:l,y:u,h:c,w:s,excavation:f,opacity:d,crossOrigin:p}}function f_(e,t){return t==null?e?o_:s_:Math.max(Math.floor(t),0)}function p_({value:e,level:t,minVersion:n,includeMargin:r,marginSize:i,imageSettings:a,size:o,boostLevel:s}){let c=H.useMemo(()=>{let r=(Array.isArray(e)?e:[e]).reduce((e,t)=>(e.push(...Qg.QrSegment.makeSegments(t)),e),[]);return Qg.QrCode.encodeSegments(r,$g[t],n,void 0,void 0,s)},[e,t,n,s]),{cells:l,margin:u,numCells:d,calculatedImageSettings:f}=H.useMemo(()=>{let e=c.getModules(),t=f_(r,i);return{cells:e,margin:t,numCells:e.length+t*2,calculatedImageSettings:d_(e,o,t,a)}},[c,o,a,r,i]);return{qrcode:c,margin:u,cells:l,numCells:d,calculatedImageSettings:f}}var m_=function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0}(),h_=H.forwardRef(function(e,t){let n=e,{value:r,size:i=e_,level:a=t_,bgColor:o=n_,fgColor:s=r_,includeMargin:c=i_,minVersion:l=a_,boostLevel:u,marginSize:d,imageSettings:f}=n,p=Xg(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`marginSize`,`imageSettings`]),{style:m}=p,h=Xg(p,[`style`]),g=f?.src,_=H.useRef(null),v=H.useRef(null),y=H.useCallback(e=>{_.current=e,typeof t==`function`?t(e):t&&(t.current=e)},[t]),[b,x]=H.useState(!1),{margin:S,cells:C,numCells:w,calculatedImageSettings:T}=p_({value:r,level:a,minVersion:l,boostLevel:u,includeMargin:c,marginSize:d,imageSettings:f,size:i});H.useEffect(()=>{if(_.current!=null){let e=_.current,t=e.getContext(`2d`);if(!t)return;let n=C,r=v.current,a=T!=null&&r!==null&&r.complete&&r.naturalHeight!==0&&r.naturalWidth!==0;a&&T.excavation!=null&&(n=u_(C,T.excavation));let c=window.devicePixelRatio||1;e.height=e.width=i*c;let l=i/w*c;t.scale(l,l),t.fillStyle=o,t.fillRect(0,0,w,w),t.fillStyle=s,m_?t.fill(new Path2D(l_(n,S))):C.forEach(function(e,n){e.forEach(function(e,r){e&&t.fillRect(r+S,n+S,1,1)})}),T&&(t.globalAlpha=T.opacity),a&&t.drawImage(r,T.x+S,T.y+S,T.w,T.h)}}),H.useEffect(()=>{x(!1)},[g]);let E=Yg({height:i,width:i},m),D=null;return g!=null&&(D=H.createElement(`img`,{src:g,key:g,style:{display:`none`},onLoad:()=>{x(!0)},ref:v,crossOrigin:T?.crossOrigin})),H.createElement(H.Fragment,null,H.createElement(`canvas`,Yg({style:E,height:i,width:i,ref:y,role:`img`},h)),D)});h_.displayName=`QRCodeCanvas`;var g_=H.forwardRef(function(e,t){let n=e,{value:r,size:i=e_,level:a=t_,bgColor:o=n_,fgColor:s=r_,includeMargin:c=i_,minVersion:l=a_,boostLevel:u,title:d,marginSize:f,imageSettings:p}=n,m=Xg(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`title`,`marginSize`,`imageSettings`]),{margin:h,cells:g,numCells:_,calculatedImageSettings:v}=p_({value:r,level:a,minVersion:l,boostLevel:u,includeMargin:c,marginSize:f,imageSettings:p,size:i}),y=g,b=null;p!=null&&v!=null&&(v.excavation!=null&&(y=u_(g,v.excavation)),b=H.createElement(`image`,{href:p.src,height:v.h,width:v.w,x:v.x+h,y:v.y+h,preserveAspectRatio:`none`,opacity:v.opacity,crossOrigin:v.crossOrigin}));let x=l_(y,h);return H.createElement(`svg`,Yg({height:i,width:i,viewBox:`0 0 ${_} ${_}`,ref:t,role:`img`},m),!!d&&H.createElement(`title`,null,d),H.createElement(`path`,{fill:o,d:`M0,0 h${_}v${_}H0z`,shapeRendering:`crispEdges`}),H.createElement(`path`,{fill:s,d:x,shapeRendering:`crispEdges`}),b)});g_.displayName=`QRCodeSVG`;function __({onClose:e}){let[t,n]=(0,H.useState)(null),[r,i]=(0,H.useState)(null),[a,s]=(0,H.useState)(!0),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(null),[v,y]=(0,H.useState)(null),[b,x]=(0,H.useState)(!1);(0,H.useEffect)(()=>{(async()=>{try{let[e,t]=await Promise.all([B.get(`/api/cloud/status`),B.get(`/api/tunnel`)]);n(e),i(t)}catch{}s(!1)})()},[]);let S=(0,H.useCallback)(e=>{navigator.clipboard.writeText(e),_(e),setTimeout(()=>_(null),2e3)},[]),C=(0,H.useCallback)(async()=>{l(!0),h(null);try{i({active:!0,url:(await B.post(`/api/tunnel/start`,{})).url,localUrl:r?.localUrl??null}),n(await B.get(`/api/cloud/status`))}catch(e){h(e instanceof Error?e.message:`Failed to start tunnel`)}finally{l(!1)}},[r]),w=(0,H.useCallback)(async()=>{h(null);try{let{cloud_url:e}=await B.get(`/api/cloud/login-url`),t=await fetch(`${e}/auth/device-code`,{method:`POST`,headers:{"Content-Type":`application/json`}});if(!t.ok)throw Error(`Failed to get device code`);let r=await t.json();y({userCode:r.user_code,verifyUrl:r.verification_uri}),x(!0);let i=(r.interval||5)*1e3,a=Date.now()+r.expires_in*1e3,o=setInterval(async()=>{if(Date.now()>a){clearInterval(o),x(!1),y(null),h(`Login expired. Try again.`);return}try{let t=await fetch(`${e}/auth/device-code/poll`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({device_code:r.device_code})});if(!t.ok)return;let i=await t.json();i.status===`approved`&&i.access_token&&i.email&&(clearInterval(o),x(!1),y(null),await B.post(`/api/cloud/login`,{access_token:i.access_token,email:i.email,cloud_url:e}),n(await B.get(`/api/cloud/status`)))}catch{}},i)}catch(e){h(e instanceof Error?e.message:`Failed to start login`),x(!1),y(null)}},[]),T=(0,H.useCallback)(async()=>{d(!0),h(null);try{r?.active||i({active:!0,url:(await B.post(`/api/tunnel/start`,{})).url,localUrl:r?.localUrl??null}),await B.post(`/api/cloud/link`,{}),n(await B.get(`/api/cloud/status`))}catch(e){h(e instanceof Error?e.message:`Failed to link device`)}finally{d(!1)}},[r]),E=(0,H.useCallback)(async()=>{if(confirm(`Unlink this device from PPM Cloud? It will no longer appear on your cloud dashboard.`)){p(!0);try{await B.post(`/api/cloud/unlink`,{}),n(await B.get(`/api/cloud/status`))}catch{}p(!1)}},[]),D=(0,H.useCallback)(async()=>{let e=t?.linked?`Sign out from PPM Cloud? This will also unlink your device.`:`Sign out from PPM Cloud?`;if(confirm(e)){if(t?.linked)try{await B.post(`/api/cloud/unlink`,{})}catch{}await B.post(`/api/cloud/logout`,{}),n(e=>e?{...e,logged_in:!1,email:null,linked:!1,device_name:null,device_id:null}:null)}},[t?.linked]),O=r?.url||t?.tunnel_url;return(0,W.jsxs)(`div`,{className:`w-72 bg-background border border-border rounded-lg shadow-lg p-3 space-y-3`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,W.jsx)(Ie,{className:`size-4 text-primary`}),(0,W.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:`PPM Cloud`})]}),(0,W.jsx)(`button`,{onClick:e,className:`text-text-subtle hover:text-foreground`,children:(0,W.jsx)(o,{className:`size-3.5`})})]}),a&&(0,W.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground text-xs py-2`,children:[(0,W.jsx)(V,{className:`size-4 animate-spin`}),(0,W.jsx)(`span`,{children:`Loading...`})]}),!a&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`space-y-1.5`,children:t?.logged_in?(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,W.jsx)(`div`,{className:`size-2 rounded-full bg-green-500 shrink-0`}),(0,W.jsx)(`span`,{className:`text-xs text-foreground truncate`,children:t.email})]}),(0,W.jsx)(`button`,{onClick:D,className:`text-text-subtle hover:text-foreground p-1 rounded hover:bg-muted transition-colors shrink-0`,title:`Sign out`,children:(0,W.jsx)(gt,{className:`size-3`})})]}):v?(0,W.jsxs)(`div`,{className:`space-y-2 text-center`,children:[(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Open the link below and enter the code:`}),(0,W.jsx)(`div`,{className:`font-mono text-2xl font-bold tracking-[0.3em] text-primary`,children:v.userCode}),(0,W.jsx)(`a`,{href:v.verifyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`text-xs text-primary hover:underline`,children:v.verifyUrl}),b&&(0,W.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 text-xs text-muted-foreground`,children:[(0,W.jsx)(V,{className:`size-3 animate-spin`}),(0,W.jsx)(`span`,{children:`Waiting for verification...`})]})]}):(0,W.jsxs)(`button`,{onClick:w,className:`w-full flex items-center justify-center gap-1.5 px-3 py-2 text-xs font-medium rounded-md border border-border hover:bg-muted transition-colors`,children:[(0,W.jsx)(Ie,{className:`size-3.5`}),`Sign in to PPM Cloud`]})}),t?.logged_in&&(0,W.jsx)(`div`,{className:`space-y-1.5`,children:t.linked?(0,W.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,W.jsx)(pt,{className:`size-3 text-primary shrink-0`}),(0,W.jsx)(`span`,{className:`text-foreground truncate`,children:t.device_name})]}),(0,W.jsx)(`button`,{onClick:E,disabled:f,className:`text-text-subtle hover:text-destructive p-1 rounded hover:bg-muted transition-colors shrink-0`,title:`Unlink device`,children:f?(0,W.jsx)(V,{className:`size-3 animate-spin`}):(0,W.jsx)($t,{className:`size-3`})})]}):(0,W.jsx)(`button`,{onClick:T,disabled:u,className:`w-full flex items-center justify-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50`,children:u?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(V,{className:`size-3.5 animate-spin`}),` Linking...`]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(pt,{className:`size-3.5`}),` Link this machine`]})})}),(0,W.jsx)(`div`,{className:`border-t border-border`}),r?.localUrl&&(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`Local Network`}),(0,W.jsx)(v_,{url:r.localUrl,copied:g,onCopy:S})]}),!O&&!c&&(0,W.jsxs)(`button`,{onClick:C,className:`w-full flex items-center justify-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors`,children:[(0,W.jsx)(Kt,{className:`size-3.5`}),`Start Sharing`]}),c&&(0,W.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-2`,children:[(0,W.jsx)(V,{className:`size-5 animate-spin text-primary`}),(0,W.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Starting tunnel...`})]}),O&&(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`Public URL`}),(0,W.jsx)(`div`,{className:`flex justify-center`,children:(0,W.jsx)(`div`,{className:`p-3 rounded-lg`,style:{backgroundColor:`#ffffff`,colorScheme:`light`},children:(0,W.jsx)(g_,{value:O,size:180,bgColor:`#ffffff`,fgColor:`#000000`,level:`L`,style:{display:`block`}})})}),(0,W.jsx)(v_,{url:O,copied:g,onCopy:S})]}),t?.logged_in&&t.linked&&(0,W.jsxs)(`a`,{href:t.cloud_url+`/dashboard`,target:`_blank`,rel:`noopener noreferrer`,className:`flex items-center justify-center gap-1.5 w-full px-3 py-1.5 text-xs text-muted-foreground hover:text-foreground rounded-md border border-border hover:bg-muted transition-colors`,children:[(0,W.jsx)(Ve,{className:`size-3`}),`Open Cloud Dashboard`]}),m&&(0,W.jsx)(`p`,{className:`text-xs text-destructive`,children:m})]})]})}function v_({url:e,copied:t,onCopy:n}){return(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(`input`,{readOnly:!0,value:e,className:`flex-1 text-xs font-mono text-foreground bg-muted px-2 py-1.5 rounded border border-border truncate`,onClick:e=>e.target.select()}),(0,W.jsx)(`button`,{onClick:()=>n(e),className:`flex items-center justify-center size-7 rounded border border-border text-muted-foreground bg-muted hover:bg-accent hover:text-foreground transition-colors shrink-0`,title:`Copy URL`,children:t===e?(0,W.jsx)(Ee,{className:`size-3.5 text-primary`}):(0,W.jsx)(Le,{className:`size-3.5`})})]})}var y_=`hienlh/ppm`;async function b_(e,t){let n=`(could not fetch)`;try{let e=await(await fetch(`/api/logs/recent`)).json();e.ok&&(n=e.data.logs||`(empty)`)}catch{}let r=``;if(t?.sessionId&&t?.projectName)try{let e=await B.get(`${z(t.projectName)}/chat/sessions/${t.sessionId}/logs?tail=100`);e.logs&&(r=e.logs)}catch{}return[`## Environment`,`- PPM: v${e??`unknown`}`,`- Browser: ${navigator.userAgent}`,``,`## Description`,`<!-- Describe the bug -->`,``,`## Steps to Reproduce`,`1. `,``,`## Expected Behavior`,``,...r?[`## Chat Session Logs (${t?.sessionId?.slice(0,8)})`,"```",r,"```",``]:[],`## Server Logs (last 30 lines)`,"```",n,"```"].join(`
|
|
23
|
-
`)}function x_(e){let t=`https://github.com/${y_}/issues/new?title=bug%3A%20&body=${encodeURIComponent(e)}`;window.open(t,`_blank`)}async function S_(e){try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function C_(e,t){b_(e,t).then(e=>{window.dispatchEvent(new CustomEvent(`open-bug-report`,{detail:e}))})}var w_=[`linear-gradient(135deg, #667eea, #764ba2)`,`linear-gradient(135deg, #f5576c, #f093fb)`,`linear-gradient(135deg, #4facfe, #00c6ff)`,`linear-gradient(135deg, #43e97b, #38f9d7)`,`linear-gradient(135deg, #fa709a, #fee140)`,`linear-gradient(135deg, #a18cd1, #6a3de8)`,`linear-gradient(135deg, #fd7043, #ff8a65)`,`linear-gradient(135deg, #26c6da, #0097a7)`,`linear-gradient(135deg, #ab47bc, #7b1fa2)`,`linear-gradient(135deg, #ef5350, #b71c1c)`,`linear-gradient(135deg, #1976d2, #42a5f5)`,`linear-gradient(135deg, #2e7d32, #66bb6a)`];function T_(e,t){return e??w_[t%w_.length]}function E_(e,t){let n=e.split(/[-_.\s]+/).filter(Boolean),r=(n[0]?.[0]??e[0]??`?`).toUpperCase(),i=n.length>1?r+(n[1][0]??``).toUpperCase():r,a=t.filter(t=>t!==e);if(!a.map(e=>(e.split(/[-_.\s]+/).filter(Boolean)[0]?.[0]??e[0]??``).toUpperCase()).includes(r))return r;if(!a.map(e=>{let t=e.split(/[-_.\s]+/).filter(Boolean),n=(t[0]?.[0]??e[0]??``).toUpperCase(),r=t.length>1?(t[1][0]??``).toUpperCase():n;return t.length>1?n+r:n}).includes(i))return i;let o=t.indexOf(e);return String(o>=0?o+1:`?`)}function D_({onSuccess:e,onCancel:t,footerClassName:n}){let{addProject:r}=ap(),[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(``),[c,l]=(0,H.useState)([]),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(!1),[g,_]=(0,H.useState)(``),v=(0,H.useRef)(null),y=(0,H.useRef)(null);(0,H.useEffect)(()=>{if(v.current&&clearTimeout(v.current),!i.trim()){l([]),d(!1);return}v.current=setTimeout(async()=>{p(!0);try{l(await B.get(`/api/projects/suggest-dirs?q=${encodeURIComponent(i)}`)??[]),d(!0)}catch{l([])}finally{p(!1)}},250)},[i]),(0,H.useEffect)(()=>{function e(e){y.current&&!y.current.contains(e.target)&&d(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);function b(e){a(e.path),o||s(e.name),d(!1)}async function x(t){if(t?.preventDefault(),!i.trim()){_(`Path is required`);return}_(``),h(!0);try{await r(i.trim(),o.trim()||void 0),e()}catch(e){_(e instanceof Error?e.message:`Failed to add project`)}finally{h(!1)}}return(0,W.jsxs)(`form`,{onSubmit:x,className:`flex flex-col gap-3`,children:[(0,W.jsxs)(`div`,{ref:y,className:`relative`,children:[(0,W.jsx)(`label`,{className:`block text-xs font-medium text-foreground mb-1`,children:`Project path`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,W.jsxs)(`div`,{className:`relative flex items-center flex-1`,children:[(0,W.jsx)(Ze,{className:`absolute left-2.5 size-3.5 text-text-subtle pointer-events-none`}),(0,W.jsx)(`input`,{type:`text`,value:i,onChange:e=>{a(e.target.value),_(``)},onFocus:()=>c.length>0&&d(!0),placeholder:`/path/to/project`,className:`w-full pl-8 pr-3 py-2 rounded-md border border-border bg-background text-sm focus:outline-none focus:ring-1 focus:ring-primary`,autoFocus:!0,autoComplete:`off`}),f&&(0,W.jsx)(V,{className:`absolute right-2.5 size-3.5 text-text-subtle animate-spin`})]}),(0,W.jsx)(Cg,{mode:`folder`,onSelect:e=>{a(e),o||s(e.split(`/`).pop()??``),_(``)}})]}),u&&c.length>0&&(0,W.jsx)(`div`,{className:`absolute top-full left-0 right-0 mt-1 z-10 bg-popover border border-border rounded-md shadow-md max-h-48 overflow-y-auto`,children:c.map(e=>(0,W.jsxs)(`button`,{type:`button`,onMouseDown:()=>b(e),className:`w-full flex flex-col items-start px-3 py-2 text-left hover:bg-accent/50 transition-colors`,children:[(0,W.jsx)(`span`,{className:`text-sm font-medium truncate w-full`,children:e.name}),(0,W.jsx)(`span`,{className:`text-xs text-text-subtle truncate w-full`,children:e.path})]},e.path))})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`label`,{className:`block text-xs font-medium text-foreground mb-1`,children:[`Display name `,(0,W.jsx)(`span`,{className:`text-muted-foreground`,children:`(optional)`})]}),(0,W.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`my-project`,className:`w-full px-3 py-2 rounded-md border border-border bg-background text-sm focus:outline-none focus:ring-1 focus:ring-primary`})]}),g&&(0,W.jsx)(`p`,{className:`text-xs text-destructive`,children:g}),(0,W.jsxs)(`div`,{className:L(`flex justify-end gap-2 pt-1`,n),children:[(0,W.jsx)(`button`,{type:`button`,onClick:t,className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,W.jsx)(`button`,{type:`submit`,disabled:m||!i.trim(),className:`px-3 py-1.5 text-sm bg-primary text-white rounded-md hover:bg-primary/90 transition-colors disabled:opacity-50`,children:m?`Adding…`:`Add Project`})]})]})}function O_({name:e,color:t,active:n,allNames:r}){let i=E_(e,r),a=Jp((0,H.useMemo)(()=>Xp(e),[e]));return(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(`div`,{className:L(`size-10 rounded-full flex items-center justify-center text-xs font-bold text-white select-none shrink-0`,n&&`ring-2 ring-primary ring-offset-2 ring-offset-background`),style:{background:t},children:i}),a&&(0,W.jsx)(`div`,{className:L(`absolute -top-0.5 -right-0.5 size-2.5 rounded-full border-2 border-background`,qp(a))})]})}function k_({current:e,onChange:t}){return(0,W.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:w_.map(n=>(0,W.jsx)(`button`,{type:`button`,onClick:()=>t(n),className:L(`size-8 rounded-full border-2 transition-all`,e===n?`border-primary scale-110`:`border-transparent hover:scale-105`),style:{background:n}},n))})}function A_(){let{projects:e,activeProject:t,setActiveProject:n,setProjectColor:r,reorderProjects:i,renameProject:a,deleteProject:o,customOrder:s}=ap();op(e=>e.openTab);let c=U(e=>e.version),l=(0,H.useCallback)(()=>C_(c),[c]),[u,d]=(0,H.useState)(null),[f,p]=(0,H.useState)(null),m=ip(e,s),h=m.map(e=>e.name),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(``),[b,x]=(0,H.useState)(``),[S,C]=(0,H.useState)(!1),[w,T]=(0,H.useState)(``),[E,D]=(0,H.useState)(!1),[O,k]=(0,H.useState)(!1),[A,j]=(0,H.useState)(``),[ee,te]=(0,H.useState)(``),[M,N]=(0,H.useState)(!1),[P,F]=(0,H.useState)(!1),ne=(0,H.useRef)(null),I=(0,H.useRef)(null),re=(0,H.useRef)(!1),R=(0,H.useRef)(!1),ie=(0,H.useRef)(typeof window<`u`&&window.matchMedia(`(hover: hover) and (pointer: fine)`).matches);(0,H.useEffect)(()=>()=>{ne.current&&clearTimeout(ne.current),I.current&&clearTimeout(I.current)},[]);let ae=(0,H.useCallback)(()=>{ie.current&&(re.current=!0,I.current&&=(clearTimeout(I.current),null),ne.current=setTimeout(()=>F(!0),150))},[]),z=(0,H.useCallback)(()=>{ie.current&&(re.current=!1,ne.current&&=(clearTimeout(ne.current),null),!R.current&&(I.current=setTimeout(()=>F(!1),300)))},[]),oe=(0,H.useCallback)(e=>{R.current=e,!e&&!re.current&&(I.current=setTimeout(()=>F(!1),300))},[]),B=(0,H.useCallback)(e=>{y(e),x(e),_(!0)},[]),se=(0,H.useCallback)(e=>{T(e),C(!0)},[]),ce=(0,H.useCallback)((e,t)=>{j(e),te(t),k(!0)},[]);async function le(){if(!b.trim()||b===v){_(!1);return}try{await a(v,b.trim())}catch{}_(!1)}async function ue(){try{await o(w)}catch{}C(!1)}async function de(){N(!0);try{await r(A,ee),k(!1)}catch(e){console.error(`Failed to save color:`,e)}finally{N(!1)}}function fe(){D(!0)}let[pe,me]=(0,H.useState)(!1),he=(0,H.useRef)(null),[ge,_e]=(0,H.useState)(null);(0,H.useEffect)(()=>{if(!pe||!he.current){_e(null);return}let e=he.current.getBoundingClientRect();_e({left:e.right+6,bottom:window.innerHeight-e.bottom})},[pe]);function ve(){let{sidebarCollapsed:e,toggleSidebar:t,setSidebarActiveTab:n}=U.getState();e&&t(),n(`settings`)}return(0,W.jsx)(`div`,{className:`hidden md:block relative w-[52px] min-w-[52px]`,onMouseEnter:ae,onMouseLeave:z,children:(0,W.jsxs)(`aside`,{className:L(`absolute inset-y-0 left-0 flex flex-col bg-background border-r border-border overflow-hidden transition-[width] duration-200 ease-out`,P?`w-[240px] shadow-lg z-30`:`w-[52px]`),children:[(0,W.jsxs)(`div`,{className:`shrink-0 flex flex-col items-center justify-center h-[41px] border-b border-border gap-0.5`,children:[(0,W.jsx)(`span`,{className:`text-[11px] font-bold text-primary leading-none`,children:`PPM`}),c&&(0,W.jsxs)(`span`,{className:`text-[8px] text-text-subtle leading-none`,children:[`v`,c]})]}),(0,W.jsxs)(`div`,{className:L(`flex-1 overflow-y-auto py-2 flex flex-col gap-2 min-h-0`,P?`items-stretch px-1.5`:`items-center`),children:[m.map((e,r)=>{let a=T_(e.color,r),o=t?.name===e.name;return(0,W.jsxs)(Sm,{onOpenChange:oe,children:[(0,W.jsx)(Cm,{asChild:!0,children:(0,W.jsxs)(`button`,{draggable:!0,onDragStart:()=>d(r),onDragOver:e=>{e.preventDefault(),p(r)},onDragLeave:()=>p(null),onDragEnd:()=>{d(null),p(null)},onDrop:()=>{if(u!=null&&u!==r){let e=m.map(e=>e.name),[t]=e.splice(u,1);e.splice(r,0,t),i(e)}d(null),p(null)},onClick:()=>n(e),className:L(`p-1 rounded-lg transition-all`,!P&&`hover:bg-surface-elevated`,u===r&&`opacity-40 scale-90`,f===r&&u!==r&&`ring-2 ring-accent`,P&&`w-full flex items-center gap-2 px-2 hover:bg-muted/50`),children:[(0,W.jsx)(O_,{name:e.name,color:a,active:o,allNames:h}),P&&(0,W.jsxs)(`div`,{className:`min-w-0 text-left`,children:[(0,W.jsx)(`p`,{className:`text-sm font-medium truncate`,children:e.name}),(0,W.jsx)(`p`,{className:`text-[11px] text-text-subtle truncate [direction:rtl] text-left`,children:e.path})]})]})}),(0,W.jsxs)(wm,{children:[(0,W.jsxs)(Tm,{onClick:()=>B(e.name),children:[(0,W.jsx)(Ot,{className:`size-3.5 mr-2`}),` Rename`]}),(0,W.jsxs)(Tm,{onClick:()=>ce(e.name,a),children:[(0,W.jsx)(Tt,{className:`size-3.5 mr-2`}),` Change Color`]}),(0,W.jsxs)(Tm,{onClick:()=>navigator.clipboard.writeText(e.path),children:[(0,W.jsx)(Le,{className:`size-3.5 mr-2`}),` Copy Path`]}),(0,W.jsx)(Em,{}),(0,W.jsxs)(Tm,{className:`text-destructive focus:text-destructive`,onClick:()=>se(e.name),children:[(0,W.jsx)(Xt,{className:`size-3.5 mr-2`}),` Delete`]})]})]},e.name)}),(0,W.jsxs)(`button`,{onClick:fe,className:L(`border-2 border-dashed border-border flex items-center justify-center text-text-subtle hover:border-primary hover:text-primary transition-colors`,P?`w-full h-10 gap-2 rounded-lg px-2`:`size-10 rounded-full`),children:[(0,W.jsx)(Nt,{className:`size-4 shrink-0`}),P&&(0,W.jsx)(`span`,{className:`text-sm whitespace-nowrap`,children:`Add Project`})]})]}),(0,W.jsxs)(`div`,{className:L(`shrink-0 flex flex-col gap-1 py-2 border-t border-border`,P?`items-stretch px-1.5`:`items-center`),children:[(0,W.jsxs)(`button`,{ref:he,onClick:()=>me(!pe),className:L(`flex items-center rounded-md transition-colors`,P?`w-full h-8 gap-2 px-2 justify-start`:`justify-center size-8`,pe?`text-primary bg-primary/10`:`text-text-subtle hover:text-foreground hover:bg-surface-elevated`),children:[(0,W.jsx)(Ie,{className:`size-4 shrink-0`}),P&&(0,W.jsx)(`span`,{className:`text-xs whitespace-nowrap`,children:`Cloud & Share`})]}),pe&&ge&&(0,sn.createPortal)((0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>me(!1)}),(0,W.jsx)(`div`,{className:`fixed z-50`,style:{left:ge.left,bottom:ge.bottom},children:(0,W.jsx)(__,{onClose:()=>me(!1)})})]}),document.body),(0,W.jsxs)(`button`,{onClick:l,className:L(`flex items-center rounded-md text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,P?`w-full h-8 gap-2 px-2 justify-start`:`justify-center size-8`),children:[(0,W.jsx)(we,{className:`size-4 shrink-0`}),P&&(0,W.jsx)(`span`,{className:`text-xs whitespace-nowrap`,children:`Report Bug`})]}),(0,W.jsxs)(`button`,{onClick:ve,className:L(`flex items-center rounded-md text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,P?`w-full h-8 gap-2 px-2 justify-start`:`justify-center size-8`),children:[(0,W.jsx)(Gt,{className:`size-4 shrink-0`}),P&&(0,W.jsx)(`span`,{className:`text-xs whitespace-nowrap`,children:`Settings`})]})]}),(0,W.jsx)(Am,{open:E,onOpenChange:D,children:(0,W.jsxs)(Pm,{className:`sm:max-w-sm`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Add Project`})}),(0,W.jsx)(D_,{onSuccess:()=>D(!1),onCancel:()=>D(!1)})]})}),(0,W.jsx)(Am,{open:g,onOpenChange:_,children:(0,W.jsxs)(Pm,{className:`sm:max-w-sm`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Rename Project`})}),(0,W.jsx)(`input`,{type:`text`,value:b,onChange:e=>x(e.target.value),onKeyDown:e=>{e.key===`Enter`&&le()},className:`w-full px-3 py-2 rounded-md border border-border bg-background text-sm focus:outline-none focus:ring-1 focus:ring-primary`,autoFocus:!0}),(0,W.jsxs)(Im,{children:[(0,W.jsx)(`button`,{onClick:()=>_(!1),className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:le,className:`px-3 py-1.5 text-sm bg-primary text-white rounded-md hover:bg-primary/90 transition-colors`,children:`Rename`})]})]})}),(0,W.jsx)(Am,{open:S,onOpenChange:C,children:(0,W.jsxs)(Pm,{className:`sm:max-w-sm`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Delete Project`})}),(0,W.jsxs)(`p`,{className:`text-sm text-text-secondary`,children:[`Remove `,(0,W.jsx)(`strong`,{className:`text-foreground`,children:w}),` from PPM? The files on disk won't be deleted.`]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)(`button`,{onClick:()=>C(!1),className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:ue,className:`px-3 py-1.5 text-sm bg-destructive text-white rounded-md hover:bg-destructive/90 transition-colors`,children:`Delete`})]})]})}),(0,W.jsx)(Am,{open:O,onOpenChange:k,children:(0,W.jsxs)(Pm,{className:`sm:max-w-sm`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Change Color`})}),(0,W.jsx)(k_,{current:ee,onChange:te}),(0,W.jsxs)(Im,{children:[(0,W.jsx)(`button`,{onClick:()=>k(!1),className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:de,disabled:M,className:`px-3 py-1.5 text-sm bg-primary text-white rounded-md hover:bg-primary/90 transition-colors disabled:opacity-50`,children:M?`Saving…`:`Save`})]})]})})]})})}var j_=[{type:`terminal`,label:`Terminal`},{type:`chat`,label:`AI Chat`},{type:`git-graph`,label:`Git Graph`},{type:`settings`,label:`Settings`}],M_=Object.fromEntries(j_.map(e=>[e.type,e.label])),N_={terminal:Yt,chat:vt,editor:Ge,database:Re,sqlite:Re,postgres:Re,"git-graph":tt,"git-diff":Ke,settings:Gt,ports:rt,"extension-webview":It};function P_({onMenuPress:e,onProjectsPress:t}){let n=Q(e=>e.focusedPanelId),r=Q(e=>e.panels),i=Q(e=>e.grid),{tabs:a,tabPanelMap:c}=(0,H.useMemo)(()=>{let e=i.flat(),t=[],n={};for(let i of e){let e=r[i];if(e)for(let r of e.tabs)t.push(r),n[r.id]=i}return{tabs:t,tabPanelMap:n}},[r,i]),l=r[n]?.activeTabId??null,u=(0,H.useRef)(new Map),d=(0,H.useRef)(null),f=(0,H.useRef)(a.length),p=Jp(e=>e.notifications),{canScrollLeft:m,canScrollRight:h,scrollRight:g}=Zp(d),_=$p(d.current,u.current,a,p),[v,y]=(0,H.useState)(null),[b,x]=(0,H.useState)(!1),S=(0,H.useRef)(null);(0,H.useEffect)(()=>{a.length>f.current&&l&&u.current.get(l)?.scrollIntoView({behavior:`smooth`,block:`nearest`,inline:`nearest`}),f.current=a.length},[a.length,l]);let C=(0,H.useCallback)(e=>{S.current=setTimeout(()=>y(e),400)},[]),w=(0,H.useCallback)(()=>{S.current&&=(clearTimeout(S.current),null)},[]),T=v?a.find(e=>e.id===v):null,E=v?c[v]??n:n,D=r[E]?.tabs??[],O=v?D.findIndex(e=>e.id===v):-1,k=Lf(i,E)?i.length<3:!1,A=i.flat().filter(e=>e!==E);function j(e){let t=c[e]??n,r=(Q.getState().panels[t]?.tabs??[]).findIndex(t=>t.id===e);r>0&&Q.getState().reorderTab(e,t,r-1)}function ee(e){let t=c[e]??n,r=Q.getState().panels[t]?.tabs??[],i=r.findIndex(t=>t.id===e);i<r.length-1&&Q.getState().reorderTab(e,t,i+1)}function te(e){let t=c[e]??n;Q.getState().splitPanel(`down`,e,t)}function M(e,t){let r=c[e]??n;Q.getState().moveTab(e,r,t)}let{activeProject:N}=ap.getState();function P(e){let t=Q.getState(),n=t.grid[0]?.[0]??t.focusedPanelId,r=e===`git-graph`||e===`git-diff`||e===`terminal`||e===`chat`?{projectName:N?.name}:void 0;t.openTab({type:e,title:M_[e]??e,metadata:r,projectId:N?.name??null,closable:!0},n),x(!1)}let{activeProject:F,projects:ne,customOrder:I}=ap(),re=ip(ne,I??null),R=re.map(e=>e.name),ie=re.findIndex(e=>e.name===F?.name),ae=F?T_(F.color,ie>=0?ie:0):`#4f86c6`,z=F?E_(F.name,R):null;return(0,W.jsxs)(`nav`,{className:`fixed bottom-0 left-0 right-0 md:hidden bg-background border-t border-border z-40 select-none`,children:[(0,W.jsxs)(`div`,{className:`flex items-center h-12`,children:[(0,W.jsxs)(`div`,{className:L(`flex items-center shrink-0 bg-background relative z-10 transition-all duration-200`,m?`rounded-r-2xl shadow-[6px_0_12px_-4px_rgba(0,0,0,0.12)]`:`border-r border-border`),children:[(0,W.jsx)(`button`,{onClick:e,className:`flex items-center justify-center size-12 shrink-0 text-text-secondary`,children:(0,W.jsx)(_t,{className:`size-5`})}),(0,W.jsx)(`div`,{className:`w-px self-stretch bg-border shrink-0`}),(0,W.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-12 shrink-0 text-text-secondary`,title:`Switch project`,children:z?(0,W.jsx)(`div`,{className:`size-7 rounded-full flex items-center justify-center text-[10px] font-bold text-white`,style:{background:ae},children:z}):(0,W.jsx)(dt,{className:`size-5`})}),(0,W.jsx)(`div`,{className:`w-px self-stretch bg-border shrink-0`}),(0,W.jsxs)(`button`,{onClick:()=>Up(),className:L(`flex items-center justify-center shrink-0 text-text-secondary gap-1.5 h-12`,a.length===0?`px-4`:`w-12`),children:[(0,W.jsx)(Nt,{className:`size-4`}),a.length===0&&(0,W.jsx)(`span`,{className:`text-xs`,children:`New Tab`})]})]}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0 relative flex items-center h-12 -ml-4`,children:[(0,W.jsx)(`div`,{ref:d,className:`flex-1 min-w-0 flex items-center h-12 overflow-x-auto scrollbar-none pl-4`,children:a.map(e=>{let t=N_[e.type],n=e.id===l,r=e.type===`chat`?e.metadata?.sessionId:void 0,i=r?p.get(r):void 0,a=i&&i.count>0?i.type:null;return(0,W.jsxs)(`button`,{ref:t=>{t?u.current.set(e.id,t):u.current.delete(e.id)},onClick:()=>{Q.getState().setActiveTab(e.id),r&&Jp.getState().clearForSession(r)},onTouchStart:()=>C(e.id),onTouchEnd:w,onTouchMove:w,onContextMenu:e=>e.preventDefault(),className:L(`flex items-center gap-1 px-3 h-12 whitespace-nowrap text-xs shrink-0 border-t-2 transition-colors`,n?`border-primary bg-surface text-primary`:`border-transparent text-text-secondary`),children:[(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(t,{className:`size-4`}),a&&!n&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -right-1 size-2 rounded-full`,qp(a))})]}),(0,W.jsx)(`span`,{className:`max-w-[80px] truncate`,children:e.title}),e.closable&&(0,W.jsx)(`span`,{role:`button`,tabIndex:0,onClick:t=>{t.stopPropagation(),Q.getState().closeTab(e.id)},className:`ml-0.5 p-0.5 rounded hover:bg-surface-elevated`,children:(0,W.jsx)(o,{className:`size-3`})})]},e.id)})}),h&&(0,W.jsx)(`button`,{onClick:g,className:`absolute right-0 z-10 flex items-center justify-center size-8 bg-gradient-to-l from-background via-background to-transparent`,children:(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(s,{className:`size-3.5 text-text-secondary`}),_.right&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -left-0.5 size-1.5 rounded-full`,qp(_.right))})]})})]})]}),b&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-50`,onClick:()=>x(!1)}),(0,W.jsxs)(`div`,{className:`fixed bottom-14 left-2 right-2 z-50 bg-surface border border-border rounded-lg shadow-lg overflow-hidden animate-in slide-in-from-bottom-2 duration-150`,children:[(0,W.jsx)(`div`,{className:`px-3 py-2 text-xs text-text-secondary border-b border-border`,children:`New Tab`}),j_.map(e=>{let t=N_[e.type];return(0,W.jsxs)(`button`,{onClick:()=>P(e.type),className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(t,{className:`size-4`}),` `,e.label]},e.type)})]})]}),T&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-50`,onClick:()=>y(null)}),(0,W.jsxs)(`div`,{className:`fixed bottom-14 left-2 right-2 z-50 bg-surface border border-border rounded-lg shadow-lg overflow-hidden animate-in slide-in-from-bottom-2 duration-150`,children:[(0,W.jsx)(`div`,{className:`px-3 py-2 text-xs text-text-secondary border-b border-border truncate`,children:T.title}),O>0&&(0,W.jsxs)(`button`,{onClick:()=>{j(v),y(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(ge,{className:`size-4`}),` Move Left`]}),O<a.length-1&&(0,W.jsxs)(`button`,{onClick:()=>{ee(v),y(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(_e,{className:`size-4`}),` Move Right`]}),k&&D.length>1&&(0,W.jsxs)(`button`,{onClick:()=>{te(v),y(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(qt,{className:`size-4`}),` Split to Bottom`]}),A.map((e,t)=>(0,W.jsxs)(`button`,{onClick:()=>{M(v,e),y(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(Ct,{className:`size-4`}),` Move to Panel `,t+1===1?`Top`:`Bottom`]},e))]})]})]})}var F_=[{id:`explorer`,label:`Explorer`,icon:Ze},{id:`git`,label:`Git`,icon:tt},{id:`database`,label:`Database`,icon:Re},{id:`settings`,label:`Settings`,icon:Gt}];function I_({isOpen:e,onClose:t,initialTab:n}){let{activeProject:r}=ap(),i=U(e=>e.version),[a,s]=(0,H.useState)(n??`explorer`);(0,H.useEffect)(()=>{n&&s(n)},[n]);let c=(0,H.useCallback)(()=>C_(i),[i]);return(0,W.jsxs)(`div`,{className:L(`fixed inset-0 z-50 md:hidden transition-opacity duration-200`,e?`opacity-100`:`opacity-0 pointer-events-none`),children:[(0,W.jsx)(`div`,{className:`absolute inset-0 bg-black/50`,onClick:t,"aria-label":`Close drawer`}),(0,W.jsxs)(`div`,{className:L(`fixed left-0 top-0 bottom-0 w-[90vw] bg-background border-r border-border`,`z-50 flex flex-col transition-transform duration-300 ease-out`,e?`translate-x-0`:`-translate-x-full`),children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-border shrink-0`,children:[(0,W.jsx)(`span`,{className:`text-sm font-bold text-primary tracking-tight`,children:r?.name??`PPM`}),(0,W.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-8 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,W.jsx)(o,{className:`size-4`})})]}),(0,W.jsxs)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:[a===`explorer`&&(r?(0,W.jsx)(qm,{onFileOpen:t}):(0,W.jsx)(`p`,{className:`px-4 py-6 text-xs text-text-secondary text-center`,children:`Select a project from the bottom nav bar`})),a===`git`&&(0,W.jsx)(ch,{metadata:{projectName:r?.name},onNavigate:t}),a===`database`&&(0,W.jsx)(kg,{}),a===`settings`&&(0,W.jsx)(lg,{})]}),(0,W.jsxs)(`div`,{className:`shrink-0 border-t border-border`,children:[(0,W.jsx)(`div`,{className:`flex items-center`,children:F_.map(e=>{let t=e.icon;return(0,W.jsxs)(`button`,{onClick:()=>s(e.id),className:L(`flex-1 flex flex-col items-center gap-0.5 py-2.5 text-[10px] transition-colors`,a===e.id?`text-primary`:`text-text-secondary`),children:[(0,W.jsx)(t,{className:`size-4`}),(0,W.jsx)(`span`,{children:e.label})]},e.id)})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-t border-border`,children:[i&&(0,W.jsxs)(`span`,{className:`text-[10px] text-text-subtle`,children:[`v`,i]}),(0,W.jsxs)(`button`,{onClick:c,className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,W.jsx)(we,{className:`size-3`}),(0,W.jsx)(`span`,{children:`Report Bug`})]})]})]})]})]})}function L_({name:e,color:t,allNames:n}){let r=E_(e,n);return(0,W.jsx)(`div`,{className:`size-10 rounded-full flex items-center justify-center text-xs font-bold text-white shrink-0`,style:{background:t},children:r})}function R_({isOpen:e,onClose:t}){let{projects:n,activeProject:r,setActiveProject:i,setProjectColor:s,reorderProjects:c,renameProject:l,deleteProject:u,customOrder:d}=ap();op(e=>e.openTab);let f=U(e=>e.version),p=ip(n,d),m=p.map(e=>e.name),[h,g]=(0,H.useState)(`list`),[_,v]=(0,H.useState)(null),[y,b]=(0,H.useState)(``),[x,S]=(0,H.useState)(!1),C=(0,H.useRef)(null),[w,T]=(0,H.useState)(null),[E,D]=(0,H.useState)(``),O=(0,H.useCallback)(e=>{C.current=setTimeout(()=>v(e),400)},[]),k=(0,H.useCallback)(()=>{C.current&&=(clearTimeout(C.current),null)},[]);function A(){g(`list`),t()}function j(e){let t=n.find(t=>t.name===e);t&&(i(t),A())}function ee(){g(`add`)}function te(){if(A(),window.innerWidth<768){window.dispatchEvent(new Event(`open-mobile-settings`));return}let{sidebarCollapsed:e,toggleSidebar:t,setSidebarActiveTab:n}=U.getState();e&&t(),n(`settings`)}async function M(){if(!w||!E.trim()||E===w){T(null);return}try{await l(w,E.trim())}catch{}T(null)}async function N(e){v(null);try{await u(e)}catch{}}async function P(e,t){try{await s(e,t),S(!1),v(null)}catch(e){console.error(`Failed to save color:`,e)}}_&&p.find(e=>e.name===_);let F=_?p.findIndex(e=>e.name===_):-1,ne=_?[{label:`Rename`,icon:Ot,onClick:()=>{D(_),T(_),v(null)}},{label:`Change Color`,icon:Tt,onClick:()=>{let e=p.findIndex(e=>e.name===_),t=p[e];b(T_(t?.color,e)),S(!0)}},...F>0?[{label:`Move Up`,icon:Oe,onClick:()=>{let e=p.map(e=>e.name),[t]=e.splice(F,1);e.splice(F-1,0,t),c(e),v(null)}}]:[],...F<p.length-1?[{label:`Move Down`,icon:a,onClick:()=>{let e=p.map(e=>e.name),[t]=e.splice(F,1);e.splice(F+1,0,t),c(e),v(null)}}]:[],{label:`Delete`,icon:Xt,destructive:!0,onClick:()=>N(_)}]:[];return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:L(`fixed inset-0 z-50 md:hidden transition-opacity duration-200`,e?`opacity-100`:`opacity-0 pointer-events-none`),onClick:A,style:{backgroundColor:`rgba(0,0,0,0.5)`}}),(0,W.jsxs)(`div`,{className:L(`fixed bottom-0 left-0 right-0 z-50 md:hidden bg-background rounded-t-2xl border-t border-border shadow-2xl`,`transition-transform duration-300 ease-out`,e?`translate-y-0`:`translate-y-full`),children:[(0,W.jsx)(`div`,{className:`flex justify-center pt-3 pb-1`,children:(0,W.jsx)(`div`,{className:`w-10 h-1 rounded-full bg-border`})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[h===`add`&&(0,W.jsx)(`button`,{onClick:()=>g(`list`),className:`flex items-center justify-center size-7 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,W.jsx)(ge,{className:`size-4`})}),(0,W.jsx)(`span`,{className:`text-sm font-semibold`,children:h===`add`?`Add Project`:`Projects`})]}),(0,W.jsx)(`button`,{onClick:A,className:`flex items-center justify-center size-7 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,W.jsx)(o,{className:`size-4`})})]}),h===`add`&&(0,W.jsx)(`div`,{className:`px-4 py-4`,children:(0,W.jsx)(D_,{onSuccess:()=>{g(`list`),t()},onCancel:()=>g(`list`),footerClassName:`pt-2`})}),(0,W.jsx)(`div`,{className:h===`add`?`hidden`:`max-h-[60vh] overflow-y-auto`,children:p.map((e,t)=>{let n=T_(e.color,t),i=r?.name===e.name,a=w===e.name;return(0,W.jsxs)(`div`,{className:L(`flex items-center gap-3 px-4 py-3 transition-colors active:bg-surface-elevated`,i&&`bg-accent/10`),onClick:()=>!a&&j(e.name),onTouchStart:()=>O(e.name),onTouchEnd:k,onTouchMove:k,children:[(0,W.jsx)(L_,{name:e.name,color:n,allNames:m}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[a?(0,W.jsx)(`input`,{type:`text`,value:E,onChange:e=>D(e.target.value),onKeyDown:e=>{e.key===`Enter`&&M(),e.key===`Escape`&&T(null)},onBlur:M,onClick:e=>e.stopPropagation(),className:`w-full bg-transparent border-b border-primary text-sm outline-none`,autoFocus:!0}):(0,W.jsx)(`p`,{className:`text-sm font-medium truncate`,children:e.name}),(0,W.jsx)(`p`,{className:`text-xs text-text-subtle truncate`,children:e.path})]}),i&&(0,W.jsx)(Ee,{className:`size-4 text-primary shrink-0`})]},e.name)})}),(0,W.jsx)(`div`,{className:`border-t border-border`,children:(0,W.jsxs)(`button`,{onClick:ee,className:`w-full flex items-center gap-3 px-4 py-3 text-text-secondary hover:bg-surface-elevated transition-colors`,children:[(0,W.jsx)(Nt,{className:`size-4 shrink-0`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Add Project`})]})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-t border-border`,children:[(0,W.jsxs)(`button`,{onClick:te,className:`flex items-center gap-2 text-text-secondary hover:text-foreground transition-colors`,children:[(0,W.jsx)(Gt,{className:`size-4`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Settings`})]}),f&&(0,W.jsxs)(`span`,{className:`text-xs text-text-subtle`,children:[`v`,f]})]})]}),_&&!x&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-[60] md:hidden`,onClick:()=>v(null)}),(0,W.jsxs)(`div`,{className:`fixed bottom-0 left-0 right-0 z-[61] md:hidden bg-surface border-t border-border rounded-t-2xl shadow-2xl animate-in slide-in-from-bottom-2 duration-150`,children:[(0,W.jsx)(`div`,{className:`px-4 py-2 border-b border-border`,children:(0,W.jsx)(`p`,{className:`text-xs font-medium text-text-secondary`,children:_})}),ne.map(e=>{let t=e.icon;return(0,W.jsxs)(`button`,{onClick:e.onClick,className:L(`w-full flex items-center gap-3 px-4 py-3 text-sm transition-colors active:bg-surface-elevated`,e.destructive?`text-destructive`:`text-foreground`),children:[(0,W.jsx)(t,{className:`size-4 shrink-0`}),e.label]},e.label)})]})]}),x&&_&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-[60] md:hidden`,onClick:()=>{S(!1),v(null)}}),(0,W.jsxs)(`div`,{className:`fixed bottom-0 left-0 right-0 z-[61] md:hidden bg-surface border-t border-border rounded-t-2xl shadow-2xl p-4 space-y-4`,children:[(0,W.jsx)(`p`,{className:`text-sm font-medium`,children:`Change Color`}),(0,W.jsx)(`div`,{className:`flex flex-wrap gap-3`,children:w_.map(e=>(0,W.jsx)(`button`,{type:`button`,onClick:()=>b(e),className:L(`size-9 rounded-full border-2 transition-all`,y===e?`border-primary scale-110`:`border-transparent`),style:{background:e}},e))}),(0,W.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,W.jsx)(`button`,{onClick:()=>{S(!1),v(null)},className:`flex-1 py-2 text-sm text-text-secondary border border-border rounded-md`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:()=>P(_,y),className:`flex-1 py-2 text-sm bg-primary text-white rounded-md`,children:`Save`})]})]})]})]})}function z_({onSuccess:e}){let[t,n]=(0,H.useState)(``),r=U(e=>e.deviceName),[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(!1);async function c(n){if(n.preventDefault(),t.trim()){s(!0),a(null);try{ae(t.trim());let n=await(await fetch(`/api/auth/check`,{headers:{Authorization:`Bearer ${t.trim()}`}})).json();if(!n.ok)throw Error(n.error??`Invalid token`);e()}catch(e){a(e instanceof Error?e.message:`Authentication failed`),localStorage.removeItem(`ppm-auth-token`)}finally{s(!1)}}}return(0,W.jsx)(`div`,{className:`min-h-dvh flex items-center justify-center bg-background p-4`,children:(0,W.jsxs)(`div`,{className:`w-full max-w-sm bg-surface rounded-lg border border-border p-6 space-y-6`,children:[(0,W.jsxs)(`div`,{className:`text-center space-y-2`,children:[(0,W.jsx)(`div`,{className:`flex items-center justify-center size-12 mx-auto rounded-full bg-surface-elevated`,children:(0,W.jsx)(ht,{className:`size-6 text-primary`})}),(0,W.jsx)(`h1`,{className:`text-xl font-semibold text-foreground`,children:`PPM`}),r&&(0,W.jsx)(`p`,{className:`text-xs text-text-subtle bg-surface-elevated inline-block px-2 py-0.5 rounded-full`,children:r}),(0,W.jsx)(`p`,{className:`text-sm text-text-secondary`,children:`Enter your access password to unlock`})]}),(0,W.jsxs)(`form`,{onSubmit:c,className:`space-y-4`,children:[(0,W.jsx)(`div`,{children:(0,W.jsx)(zm,{type:`password`,placeholder:`Auth token`,value:t,onChange:e=>n(e.target.value),className:`h-11 bg-background border-border`,autoFocus:!0})}),i&&(0,W.jsxs)(`div`,{className:`flex items-center gap-2 text-error text-sm`,children:[(0,W.jsx)(ke,{className:`size-4 shrink-0`}),(0,W.jsx)(`span`,{children:i})]}),(0,W.jsx)($,{type:`submit`,disabled:o||!t.trim(),className:`w-full h-11`,children:o?`Checking...`:`Unlock`})]})]})})}var B_=[`terminal`,`chat`,`editor`,`database`,`sqlite`,`postgres`,`git-graph`,`git-diff`,`settings`,`ports`];function V_(){let e=window.location.pathname,t=new URLSearchParams(window.location.search).get(`openChat`),n=e.match(/^\/project\/([^/]+)(?:\/([^/]+)(\/.*)?)?/);if(!n)return{projectName:null,tabType:null,tabIdentifier:null,openChat:t};let r=decodeURIComponent(n[1]),i=n[2]??null,a=n[3]?n[3].slice(1):null;return i===`tab`?{projectName:r,tabType:null,tabIdentifier:null,openChat:t}:{projectName:r,tabType:B_.includes(i)?i:null,tabIdentifier:a,openChat:t}}function H_(e,t){if(!e||e===`__global__`)return`/`;let n=`/project/${encodeURIComponent(e)}`;if(!t)return n;let r=t.indexOf(`@`),i=r===-1?t:t.slice(0,r),a=i.indexOf(`:`);if(a===-1)n+=`/${i}`;else{let e=i.slice(0,a),t=i.slice(a+1);n+=`/${e}/${t.replace(/[?#]/g,encodeURIComponent)}`}return n}function U_(e,t){return t?`${e}:${t}`:e}function W_(e,t,n){switch(e){case`editor`:return t?{filePath:t,projectName:n}:null;case`chat`:{if(!t)return null;let e=t.indexOf(`/`);if(e===-1)return{sessionId:t,projectName:n};let r=t.slice(0,e),i=t.slice(e+1);return i?{sessionId:i,providerId:r,projectName:n}:null}case`terminal`:return{terminalIndex:parseInt(t??`1`,10),projectName:n};case`git-graph`:return{projectName:n};case`git-diff`:return t?{filePath:t,projectName:n}:null;case`settings`:return{};case`database`:{let[e,n]=(t??``).split(`:`);return e?{connectionId:e,tableName:n??``}:null}case`sqlite`:return t?{filePath:t,projectName:n}:null;case`postgres`:{let[e,n]=(t??``).split(`:`);return e?{connectionId:e,tableName:n??``}:null}case`ports`:return null;default:return null}}function G_(e,t){switch(e){case`editor`:return t?.split(`/`).pop()??`File`;case`chat`:return`Chat`;case`terminal`:return`Terminal ${t??`1`}`;case`git-graph`:return`Git Graph`;case`git-diff`:return t?.split(`/`).pop()??`Diff`;case`settings`:return`Settings`;case`database`:return t??`Database`;case`sqlite`:return t?.split(`/`).pop()??`SQLite`;case`postgres`:return t??`PostgreSQL`;case`ports`:return`Ports`;default:return e}}function K_(e,t,n){let{tabs:r,setActiveTab:i,openTab:a}=op.getState(),o=U_(e,t),s=r.find(e=>e.id===o);if(s){i(s.id);return}let c=W_(e,t,n);c&&a({type:e,title:G_(e,t),projectId:n,closable:!0,metadata:c})}function q_(){let e=op(e=>e.activeTabId),t=op(e=>e.currentProject),n=(0,H.useRef)(!1);(0,H.useEffect)(()=>{if(n.current){n.current=!1;return}let r=H_(t,e);window.location.pathname!==r&&window.history.pushState(null,``,r)},[e,t]),(0,H.useEffect)(()=>{function e(){let{tabType:e,tabIdentifier:t}=V_();if(!e)return;n.current=!0;let{tabs:r,setActiveTab:i}=op.getState(),a=U_(e,t),o=r.find(e=>e.id===a);if(o)i(o.id);else{let n=op.getState().currentProject;n&&K_(e,t,n)}}return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[])}var J_=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
19
|
+
`,children:(0,W.jsx)(`div`,{className:`absolute can-hover:opacity-0 can-hover:group-hover/handle:opacity-70 transition-opacity text-foreground/50`,children:t?(0,W.jsx)(at,{className:`size-3`}):(0,W.jsx)(it,{className:`size-3`})})})}var vm=c((e,t)=>({statusBarItems:[],addStatusBarItem:t=>e(e=>({statusBarItems:[...e.statusBarItems.filter(e=>e.id!==t.id),t]})),removeStatusBarItem:t=>e(e=>({statusBarItems:e.statusBarItems.filter(e=>e.id!==t)})),updateStatusBarItem:(t,n)=>e(e=>({statusBarItems:e.statusBarItems.map(e=>e.id===t?{...e,...n}:e)})),treeViews:{},updateTree:(t,n)=>e(e=>({treeViews:{...e.treeViews,[t]:n}})),updateTreeChildren:(t,n,r)=>e(e=>{let i=e.treeViews[t];if(!i)return e;let a=e=>e.map(e=>e.id===n?{...e,children:r,collapsibleState:`expanded`}:e.children?{...e,children:a(e.children)}:e);return{treeViews:{...e.treeViews,[t]:a(i)}}}),removeTree:t=>e(e=>{let{[t]:n,...r}=e.treeViews;return{treeViews:r}}),webviewPanels:{},addWebviewPanel:t=>e(e=>({webviewPanels:{...e.webviewPanels,[t.id]:t}})),removeWebviewPanel:t=>e(e=>{let{[t]:n,...r}=e.webviewPanels;return{webviewPanels:r}}),updateWebviewPanel:(t,n)=>e(e=>{let r=e.webviewPanels[t];return r?{webviewPanels:{...e.webviewPanels,[t]:{...r,...n}}}:e}),contributions:null,setContributions:t=>e({contributions:t}),quickPick:null,showQuickPick:(n,r={})=>{let i=t().quickPick;return i&&i.resolve(void 0),new Promise(t=>{e({quickPick:{items:n,options:r,resolve:t}})})},resolveQuickPick:n=>{let r=t().quickPick;r&&(r.resolve(n),e({quickPick:null}))},inputBox:null,showInputBox:(n={})=>{let r=t().inputBox;return r&&r.resolve(void 0),new Promise(t=>{e({inputBox:{options:n,resolve:t}})})},resolveInputBox:n=>{let r=t().inputBox;r&&(r.resolve(n),e({inputBox:null}))},clearExtension:t=>e(e=>{let n={...e.webviewPanels};for(let[e,r]of Object.entries(n))r.extensionId===t&&delete n[e];return{statusBarItems:e.statusBarItems.filter(e=>e.extensionId!==t),webviewPanels:n}})})),ym=c((e,t)=>({tree:[],loading:!1,error:null,expandedPaths:new Set,selectedFiles:[],fetchTree:async t=>{e({loading:!0,error:null});try{e({tree:await B.get(`${z(t)}/files/tree?depth=3`),loading:!1})}catch(t){e({error:t instanceof Error?t.message:`Failed to load files`,loading:!1})}},toggleExpand:n=>{let r=new Set(t().expandedPaths);r.has(n)?r.delete(n):r.add(n),e({expandedPaths:r})},setExpanded:(n,r)=>{let i=new Set(t().expandedPaths);r?i.add(n):i.delete(n),e({expandedPaths:i})},toggleFileSelect:n=>{let r=t().selectedFiles;r.indexOf(n)>=0?e({selectedFiles:r.filter(e=>e!==n)}):e({selectedFiles:r.length>=2?[r[1],n]:[...r,n]})},clearSelection:()=>e({selectedFiles:[]}),reset:()=>e({tree:[],expandedPaths:new Set,error:null,selectedFiles:[]})}));function bm({className:e,children:t,...n}){return(0,W.jsxs)(sc,{"data-slot":`scroll-area`,className:L(`relative`,e),...n,children:[(0,W.jsx)(cc,{"data-slot":`scroll-area-viewport`,className:`size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 [&>div]:!block`,children:t}),(0,W.jsx)(xm,{}),(0,W.jsx)(lc,{})]})}function xm({className:e,orientation:t=`vertical`,...n}){return(0,W.jsx)(Fs,{"data-slot":`scroll-area-scrollbar`,orientation:t,className:L(`flex touch-none p-px transition-colors select-none`,t===`vertical`&&`h-full w-1.5 border-l border-l-transparent`,t===`horizontal`&&`h-1.5 flex-col border-t border-t-transparent`,e),...n,children:(0,W.jsx)(Ks,{"data-slot":`scroll-area-thumb`,className:`relative flex-1 rounded-full bg-border`})})}function Sm({...e}){return(0,W.jsx)(To,{"data-slot":`context-menu`,...e})}function Cm({...e}){return(0,W.jsx)(Eo,{"data-slot":`context-menu-trigger`,...e})}function wm({className:e,...t}){return(0,W.jsx)(Do,{children:(0,W.jsx)(Oo,{"data-slot":`context-menu-content`,className:L(`z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...t})})}function Tm({className:e,inset:t,variant:n=`default`,...r}){return(0,W.jsx)(ko,{"data-slot":`context-menu-item`,"data-inset":t,"data-variant":n,className:L(`relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!`,e),...r})}function Em({className:e,...t}){return(0,W.jsx)(Ao,{"data-slot":`context-menu-separator`,className:L(`-mx-1 my-1 h-px bg-border`,e),...t})}var Dm=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,Om=re,km=((e,t)=>n=>{if(t?.variants==null)return Om(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=Dm(t)||Dm(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return Om(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)})(`inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,{variants:{variant:{default:`bg-primary text-primary-foreground hover:bg-primary/90`,destructive:`bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40`,outline:`border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50`,secondary:`bg-secondary text-secondary-foreground hover:bg-secondary/80`,ghost:`hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50`,link:`text-primary underline-offset-4 hover:underline`},size:{default:`h-9 px-4 py-2 has-[>svg]:px-3`,xs:`h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3`,sm:`h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5`,lg:`h-10 rounded-md px-6 has-[>svg]:px-4`,icon:`size-9`,"icon-xs":`size-6 rounded-md [&_svg:not([class*='size-'])]:size-3`,"icon-sm":`size-8`,"icon-lg":`size-10`}},defaultVariants:{variant:`default`,size:`default`}});function $({className:e,variant:t=`default`,size:n=`default`,asChild:r=!1,...i}){return(0,W.jsx)(r?g:`button`,{"data-slot":`button`,"data-variant":t,"data-size":n,className:L(km({variant:t,size:n,className:e})),...i})}function Am({...e}){return(0,W.jsx)(Ar,{"data-slot":`dialog`,...e})}function jm({...e}){return(0,W.jsx)(jr,{"data-slot":`dialog-trigger`,...e})}function Mm({...e}){return(0,W.jsx)(Mr,{"data-slot":`dialog-portal`,...e})}function Nm({className:e,...t}){return(0,W.jsx)(Nr,{"data-slot":`dialog-overlay`,className:L(`fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0`,e),...t})}function Pm({className:e,children:t,showCloseButton:n=!0,...r}){return(0,W.jsxs)(Mm,{"data-slot":`dialog-portal`,children:[(0,W.jsx)(Nm,{}),(0,W.jsxs)(Pr,{"data-slot":`dialog-content`,className:L(`fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background text-foreground p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg`,e),...r,children:[t,n&&(0,W.jsxs)(Lr,{"data-slot":`dialog-close`,className:`absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,children:[(0,W.jsx)(o,{}),(0,W.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function Fm({className:e,...t}){return(0,W.jsx)(`div`,{"data-slot":`dialog-header`,className:L(`flex flex-col gap-2 text-center sm:text-left`,e),...t})}function Im({className:e,showCloseButton:t=!1,children:n,...r}){return(0,W.jsxs)(`div`,{"data-slot":`dialog-footer`,className:L(`flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,e),...r,children:[n,t&&(0,W.jsx)(Lr,{asChild:!0,children:(0,W.jsx)($,{variant:`outline`,children:`Close`})})]})}function Lm({className:e,...t}){return(0,W.jsx)(Fr,{"data-slot":`dialog-title`,className:L(`text-lg leading-none font-semibold`,e),...t})}function Rm({className:e,...t}){return(0,W.jsx)(Ir,{"data-slot":`dialog-description`,className:L(`text-sm text-muted-foreground`,e),...t})}function zm({className:e,type:t,...n}){return(0,W.jsx)(`input`,{type:t,"data-slot":`input`,className:L(`h-9 w-full min-w-0 rounded-lg border border-border bg-surface px-3 py-2 text-base md:text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:border-ring disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,`selection:bg-primary selection:text-primary-foreground`,`file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground`,`aria-invalid:border-destructive`,e),...n})}function Bm({action:e,node:t,projectName:n,onClose:r,onRefresh:i}){let[a,o]=(0,H.useState)(``),[s,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(null),d=(0,H.useRef)(null);(0,H.useEffect)(()=>{o(e===`rename`?t.name:``)},[e,t.name]),(0,H.useEffect)(()=>{let e=setTimeout(()=>d.current?.focus(),100);return()=>clearTimeout(e)},[]);async function f(e){if(a.trim()){c(!0),u(null);try{let o=t.type===`directory`?t.path:t.path.split(`/`).slice(0,-1).join(`/`),s=o?`${o}/${a.trim()}`:a.trim();await B.post(`${z(n)}/files/create`,{path:s,type:e}),i(),r()}catch(e){u(e instanceof Error?e.message:`Failed to create`)}finally{c(!1)}}}async function p(){if(!a.trim()||a.trim()===t.name){r();return}c(!0),u(null);try{let e=t.path.split(`/`).slice(0,-1).join(`/`),o=e?`${e}/${a.trim()}`:a.trim();await B.post(`${z(n)}/files/rename`,{oldPath:t.path,newPath:o}),i(),r()}catch(e){u(e instanceof Error?e.message:`Failed to rename`)}finally{c(!1)}}async function m(){c(!0),u(null);try{await B.del(`${z(n)}/files/delete`,{path:t.path}),i(),r()}catch(e){u(e instanceof Error?e.message:`Failed to delete`)}finally{c(!1)}}function h(t){t.key===`Enter`&&(e===`new-file`?f(`file`):e===`new-folder`?f(`directory`):e===`rename`&&p()),t.key===`Escape`&&r()}if(e===`delete`)return(0,W.jsx)(Am,{open:!0,onOpenChange:e=>!e&&r(),children:(0,W.jsxs)(Pm,{children:[(0,W.jsxs)(Fm,{children:[(0,W.jsxs)(Lm,{children:[`Delete `,t.type===`directory`?`Folder`:`File`]}),(0,W.jsxs)(Rm,{children:[`Are you sure you want to delete`,` `,(0,W.jsx)(`span`,{className:`font-mono font-semibold`,children:t.name}),`?`,t.type===`directory`&&` This will delete all contents.`]})]}),l&&(0,W.jsx)(`p`,{className:`text-sm text-error`,children:l}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,onClick:r,disabled:s,children:`Cancel`}),(0,W.jsx)($,{variant:`destructive`,onClick:m,disabled:s,children:s?`Deleting...`:`Delete`})]})]})});let g=e===`new-file`?`New File`:e===`new-folder`?`New Folder`:`Rename`,_=e===`rename`?t.name:e===`new-file`?`filename.ts`:`folder-name`;return(0,W.jsx)(Am,{open:!0,onOpenChange:e=>!e&&r(),children:(0,W.jsxs)(Pm,{children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{children:g}),(0,W.jsx)(Rm,{children:e===`rename`?`Rename "${t.name}" to:`:`Create in ${t.type===`directory`?t.path||`/`:t.path.split(`/`).slice(0,-1).join(`/`)||`/`}`})]}),(0,W.jsx)(zm,{ref:d,value:a,onChange:e=>o(e.target.value),onKeyDown:h,placeholder:_,disabled:s}),l&&(0,W.jsx)(`p`,{className:`text-sm text-error`,children:l}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,onClick:r,disabled:s,children:`Cancel`}),(0,W.jsx)($,{onClick:()=>{e===`new-file`?f(`file`):e===`new-folder`?f(`directory`):p()},disabled:s||!a.trim(),children:s?`Saving...`:e===`rename`?`Rename`:`Create`})]})]})})}async function Vm(e,t){let{token:n}=await B.post(`${z(e)}/files/download/token`);Um(`${z(e)}/files/raw?path=${encodeURIComponent(t)}&download=true&dl_token=${encodeURIComponent(n)}`,t.split(`/`).pop()??`download`)}async function Hm(e,t){let{token:n}=await B.post(`${z(e)}/files/download/token`),r=t.split(`/`).pop()??`folder`;Um(`${z(e)}/files/download/zip?path=${encodeURIComponent(t)}&dl_token=${encodeURIComponent(n)}`,`${r}.zip`)}function Um(e,t){let n=document.createElement(`a`);n.href=e,n.download=t,n.style.display=`none`,document.body.appendChild(n),n.click(),document.body.removeChild(n)}var Wm={ts:Ge,tsx:Ge,js:Ge,jsx:Ge,py:Ge,rs:Ge,go:Ge,json:We,md:qe,txt:qe,yaml:Je,yml:Je,html:Ge,css:Ge,scss:Ge};function Gm(e){return Wm[e.split(`.`).pop()?.toLowerCase()??``]??Ye}function Km({node:e,depth:t,projectName:n,onAction:r,onFileOpen:i}){let{expandedPaths:o,toggleExpand:c,selectedFiles:l,toggleFileSelect:u}=ym(),d=op(e=>e.openTab),f=o.has(e.path),p=e.type===`directory`,m=l.includes(e.path),h=e.ignored===!0;function g(t){if(p){c(e.path);return}if(t.metaKey||t.ctrlKey){u(e.path);return}let r=e.name.split(`.`).pop()?.toLowerCase()??``;d({type:r===`db`||r===`sqlite`||r===`sqlite3`?`sqlite`:`editor`,title:e.name,metadata:{filePath:e.path,projectName:n},projectId:n,closable:!0}),i?.()}let _=p?f?Ze:et:Gm(e.name),v=e.children?[...e.children].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1):[];return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(Sm,{children:[(0,W.jsx)(Cm,{asChild:!0,children:(0,W.jsxs)(`button`,{onClick:g,className:L(`flex items-center w-full gap-1.5 px-2 py-1 rounded-sm text-sm`,`min-h-[32px] hover:bg-surface-elevated transition-colors text-left`,`select-none`,h&&`opacity-40`,m&&`bg-primary/15 ring-1 ring-primary/40`),style:{paddingLeft:`${t*16+8}px`},children:[p?f?(0,W.jsx)(a,{className:`size-3.5 shrink-0 text-text-subtle`}):(0,W.jsx)(s,{className:`size-3.5 shrink-0 text-text-subtle`}):(0,W.jsx)(`span`,{className:`w-3.5 shrink-0`}),(0,W.jsx)(_,{className:L(`size-4 shrink-0`,p?`text-primary`:`text-text-secondary`)}),(0,W.jsx)(`span`,{className:`truncate`,children:e.name})]})}),(0,W.jsxs)(wm,{children:[p&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Tm,{onClick:()=>r(`new-file`,e),children:`New File`}),(0,W.jsx)(Tm,{onClick:()=>r(`new-folder`,e),children:`New Folder`}),(0,W.jsx)(Em,{})]}),(0,W.jsx)(Tm,{onClick:()=>r(`rename`,e),children:`Rename`}),(0,W.jsx)(Tm,{variant:`destructive`,onClick:()=>r(`delete`,e),children:`Delete`}),(0,W.jsx)(Em,{}),(0,W.jsx)(Tm,{onClick:()=>r(`copy-path`,e),children:`Copy Path`}),(0,W.jsx)(Em,{}),(0,W.jsxs)(Tm,{onClick:()=>r(`download`,e),children:[(0,W.jsx)(ze,{className:`size-3.5 mr-2`}),`Download`,p?` as Zip`:``]}),!p&&l.length===2&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Em,{}),(0,W.jsx)(Tm,{onClick:()=>r(`compare-selected`,e),children:`Compare Selected`})]})]})]}),p&&f&&v.map(e=>(0,W.jsx)(Km,{node:e,depth:t+1,projectName:n,onAction:r,onFileOpen:i},e.path))]})}function qm({onFileOpen:e}={}){let{tree:t,loading:n,error:r,fetchTree:i,reset:a,selectedFiles:o,clearSelection:s}=ym(),c=ap(e=>e.activeProject),l=op(e=>e.openTab),[u,d]=(0,H.useState)(null),f=(0,H.useCallback)(()=>{c&&i(c.name)},[c,i]);(0,H.useEffect)(()=>{c&&(a(),f())},[c?.name]),(0,H.useEffect)(()=>{let e=()=>{c&&i(c.name)};return window.addEventListener(`focus`,e),()=>window.removeEventListener(`focus`,e)},[c,i]);function p(e,t){if(e===`copy-path`){navigator.clipboard.writeText(t.path).catch(()=>{});return}if(e===`download`){t.type===`directory`?Hm(c.name,t.path):Vm(c.name,t.path);return}if(e===`compare-selected`&&o.length===2){let e=o[0],t=o[1];l({type:`git-diff`,title:`Compare ${ie(e)} vs ${ie(t)}`,closable:!0,metadata:{projectName:c.name,file1:e,file2:t},projectId:c.name}),s();return}d({action:e,node:t})}if(!c)return(0,W.jsx)(`div`,{className:`p-3 text-xs text-text-subtle`,children:`Select a project to browse files.`});if(n&&t.length===0)return(0,W.jsxs)(`div`,{className:`flex items-center gap-2 p-3 text-xs text-text-secondary`,children:[(0,W.jsx)(V,{className:`size-3 animate-spin`}),`Loading files...`]});if(r)return(0,W.jsxs)(`div`,{className:`p-3 text-xs text-error`,children:[r,(0,W.jsx)(`button`,{onClick:f,className:`block mt-1 text-primary underline`,children:`Retry`})]});let m=[...t].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(bm,{className:`flex-1`,children:(0,W.jsxs)(`div`,{className:`py-1`,children:[m.map(t=>(0,W.jsx)(Km,{node:t,depth:0,projectName:c.name,onAction:p,onFileOpen:e},t.path)),m.length===0&&(0,W.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:`Empty project.`})]})}),u&&(0,W.jsx)(Bm,{action:u.action,node:u.node,projectName:c.name,onClose:()=>d(null),onRefresh:f})]})}var Jm=c()(e=>({counts:new Map,setCount:(t,n)=>{e(e=>{if(e.counts.get(t)===n)return e;let r=new Map(e.counts);return r.set(t,n),{counts:r}})}}));function Ym(e,t){let n=Jm(e=>e.setCount),r=(0,H.useCallback)(async()=>{if(e)try{let t=await B.get(`${z(e)}/git/status`);n(e,t.staged.length+t.unstaged.length+t.untracked.length)}catch{}},[e,n]);(0,H.useEffect)(()=>{if(t)return;r();let e=setInterval(r,1e4);return()=>clearInterval(e)},[r,t])}function Xm({className:e,...t}){return(0,W.jsx)(Cs,{"data-slot":`label`,className:L(`flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50`,e),...t})}function Zm({open:e,onOpenChange:t,projectName:n,onCreated:r}){let[i,a]=(0,H.useState)(``),[s,c]=(0,H.useState)(`new`),[l,u]=(0,H.useState)(``),[d,f]=(0,H.useState)(``),[p,m]=(0,H.useState)([]),[h,g]=(0,H.useState)(!1),[_,v]=(0,H.useState)(null);(0,H.useEffect)(()=>{!e||!n||B.get(`${z(n)}/git/branches`).then(e=>{let t=e.filter(e=>!e.remote).map(e=>e.name);m(t),t.length>0&&!d&&f(t[0])}).catch(()=>m([]))},[e,n]);function y(){a(``),c(`new`),u(``),v(null)}function b(){y(),t(!1)}async function x(){if(!i.trim()){v(`Worktree path is required`);return}let e=s===`existing`?d:void 0,t=s===`new`&&l.trim()?l.trim():void 0;g(!0),v(null);try{await B.post(`${z(n)}/git/worktree/add`,{path:i.trim(),branch:e,newBranch:t}),r(),b()}catch(e){v(e instanceof Error?e.message:`Failed to create worktree`)}finally{g(!1)}}let S=(0,W.jsxs)(`div`,{className:`space-y-4`,children:[_&&(0,W.jsx)(`p`,{className:`text-xs text-destructive bg-destructive/10 px-3 py-2 rounded-md`,children:_}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(Xm,{htmlFor:`wt-path`,children:`Worktree Path`}),(0,W.jsx)(zm,{id:`wt-path`,placeholder:`../my-feature`,value:i,onChange:e=>a(e.target.value),autoFocus:!0,className:`w-full`}),(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Relative or absolute path for the new worktree directory`})]}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(Xm,{children:`Branch`}),(0,W.jsxs)(`div`,{className:`flex gap-3`,children:[(0,W.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,W.jsx)(`input`,{type:`radio`,checked:s===`new`,onChange:()=>c(`new`),className:`accent-primary`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Create new branch`})]}),(0,W.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,W.jsx)(`input`,{type:`radio`,checked:s===`existing`,onChange:()=>c(`existing`),className:`accent-primary`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Use existing branch`})]})]}),s===`new`?(0,W.jsx)(zm,{placeholder:`feature/my-branch`,value:l,onChange:e=>u(e.target.value),className:`w-full`}):(0,W.jsxs)(`select`,{value:d,onChange:e=>f(e.target.value),className:`w-full h-9 px-3 rounded-md border border-input bg-transparent text-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`,children:[p.length===0&&(0,W.jsx)(`option`,{value:``,children:`No branches available`}),p.map(e=>(0,W.jsx)(`option`,{value:e,children:e},e))]})]})]}),C=(0,W.jsxs)(`div`,{className:`flex gap-2 justify-end pt-2`,children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:b,disabled:h,children:`Cancel`}),(0,W.jsxs)($,{size:`sm`,onClick:x,disabled:h||!i.trim(),children:[h?(0,W.jsx)(V,{className:`size-3 animate-spin mr-1`}):null,`Create Worktree`]})]});return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Am,{open:e,onOpenChange:e=>{e||b()},children:(0,W.jsxs)(Pm,{className:`hidden md:grid sm:max-w-md`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Add Worktree`})}),S,(0,W.jsx)(Im,{children:C})]})}),e&&(0,W.jsxs)(`div`,{className:`md:hidden`,children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/50`,onClick:b}),(0,W.jsxs)(`div`,{className:L(`fixed bottom-0 left-0 right-0 z-50 bg-background rounded-t-2xl border-t border-border shadow-2xl`,`animate-in slide-in-from-bottom-2 duration-200`),children:[(0,W.jsx)(`div`,{className:`flex justify-center pt-3 pb-1`,children:(0,W.jsx)(`div`,{className:`w-10 h-1 rounded-full bg-border`})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,W.jsx)(`span`,{className:`text-sm font-semibold`,children:`Add Worktree`}),(0,W.jsx)(`button`,{onClick:b,className:`flex items-center justify-center size-7 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,W.jsx)(o,{className:`size-4`})})]}),(0,W.jsxs)(`div`,{className:`px-4 py-4 space-y-4 max-h-[70vh] overflow-y-auto`,children:[S,C]})]})]})]})}function Qm({projectName:e,projectPath:t}){let[n,r]=(0,H.useState)(!1),[i,o]=(0,H.useState)([]),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(null),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(!1),v=(0,H.useCallback)(async()=>{if(e){l(!0),d(null);try{o(await B.get(`${z(e)}/git/worktrees`))}catch(e){d(e instanceof Error?e.message:`Failed to load worktrees`)}finally{l(!1)}}},[e]);(0,H.useEffect)(()=>{n&&v()},[n,v]);async function y(t=!1){if(m){_(!0);try{await B.post(`${z(e)}/git/worktree/remove`,{path:m.path,force:t}),h(null),await v()}catch(e){d(e instanceof Error?e.message:`Failed to remove worktree`),h(null)}finally{_(!1)}}}async function b(){try{await B.post(`${z(e)}/git/worktree/prune`,{}),await v()}catch(e){d(e instanceof Error?e.message:`Prune failed`)}}return(0,W.jsxs)(`div`,{className:`border-t border-border`,children:[(0,W.jsxs)(`button`,{type:`button`,className:`flex items-center justify-between w-full px-3 py-2 hover:bg-muted/50 transition-colors`,onClick:()=>r(e=>!e),children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[n?(0,W.jsx)(a,{className:`size-3.5 text-muted-foreground`}):(0,W.jsx)(s,{className:`size-3.5 text-muted-foreground`}),(0,W.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase`,children:`Worktrees`}),i.length>0&&(0,W.jsx)(`span`,{className:`text-[10px] bg-muted text-muted-foreground rounded px-1`,children:i.length})]}),(0,W.jsx)(`div`,{className:`flex items-center gap-0.5`,children:n&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{role:`button`,tabIndex:0,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-foreground transition-colors`,onClick:e=>{e.stopPropagation(),b()},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),b())},title:`Prune stale worktrees`,"aria-label":`Prune stale worktrees`,children:(0,W.jsx)(Lt,{className:L(`size-3`,c&&`animate-spin`)})}),(0,W.jsx)(`span`,{role:`button`,tabIndex:0,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-foreground transition-colors`,onClick:e=>{e.stopPropagation(),p(!0)},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),p(!0))},title:`Add worktree`,"aria-label":`Add worktree`,children:(0,W.jsx)(Nt,{className:`size-3`})})]})})]}),n&&(0,W.jsxs)(`div`,{className:`pb-1`,children:[u&&(0,W.jsx)(`p`,{className:`text-xs text-destructive px-3 py-1`,children:u}),c&&i.length===0&&(0,W.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 text-muted-foreground`,children:[(0,W.jsx)(V,{className:`size-3.5 animate-spin`}),(0,W.jsx)(`span`,{className:`text-xs`,children:`Loading worktrees...`})]}),!c&&i.length===0&&!u&&(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground px-3 py-1`,children:`No worktrees found.`}),i.map(e=>(0,W.jsx)($m,{worktree:e,isActive:!!t&&e.path===t,onRemove:()=>h(e)},e.path)),(0,W.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 w-full px-3 py-2 text-xs text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors`,onClick:()=>p(!0),children:[(0,W.jsx)(Nt,{className:`size-3.5`}),`Add worktree`]})]}),(0,W.jsx)(Zm,{open:f,onOpenChange:p,projectName:e,onCreated:v}),(0,W.jsx)(Am,{open:!!m,onOpenChange:e=>!e&&h(null),children:(0,W.jsxs)(Pm,{showCloseButton:!1,children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{children:`Remove Worktree`}),(0,W.jsxs)(Rm,{children:[`Remove worktree at`,` `,(0,W.jsx)(`code`,{className:`px-1 py-0.5 rounded bg-muted text-xs font-mono`,children:m?.path}),m?.branch&&(0,W.jsxs)(W.Fragment,{children:[` (branch: `,(0,W.jsx)(`strong`,{children:m.branch}),`)`]}),`? The directory will be deleted.`]})]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:()=>h(null),disabled:g,children:`Cancel`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:()=>y(!0),disabled:g,children:g?(0,W.jsx)(V,{className:`size-3 animate-spin`}):`Force Remove`}),(0,W.jsx)($,{variant:`destructive`,size:`sm`,onClick:()=>y(!1),disabled:g,children:g?(0,W.jsx)(V,{className:`size-3 animate-spin`}):`Remove`})]})]})})]})}function $m({worktree:e,isActive:t,onRemove:n}){let r=e.branch||e.head.slice(0,7)||`detached`,i=e.path.replace(/^\/home\/[^/]+/,`~`);return(0,W.jsxs)(`div`,{className:L(`group flex items-center gap-2 px-3 py-1.5 hover:bg-muted/50 transition-colors`,t&&`bg-accent/10`),children:[(0,W.jsx)(tt,{className:`size-3.5 text-muted-foreground shrink-0`}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1 min-w-0`,children:[(0,W.jsx)(`span`,{className:`text-xs font-mono truncate`,title:e.branch,children:r}),t&&(0,W.jsx)(Ee,{className:`size-3 text-green-500 shrink-0`}),e.isMain&&(0,W.jsx)(`span`,{className:`text-[10px] bg-muted text-muted-foreground rounded px-1 shrink-0`,children:`main`}),e.locked&&(0,W.jsx)(`span`,{title:e.lockReason??`locked`,children:(0,W.jsx)(ht,{className:`size-3 text-yellow-500 shrink-0`})}),e.prunable&&(0,W.jsx)(`span`,{title:`stale/prunable`,children:(0,W.jsx)(ke,{className:`size-3 text-destructive shrink-0`})})]}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground truncate`,title:e.path,children:i})]}),!e.isMain&&(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-destructive opacity-0 group-hover:opacity-100 can-hover:opacity-0 can-hover:group-hover:opacity-100 transition-all active:scale-95 shrink-0`,onClick:n,title:`Remove worktree`,"aria-label":`Remove worktree`,children:(0,W.jsx)(Xt,{className:`size-3`})})]})}function eh({...e}){return(0,W.jsx)(ps,{"data-slot":`dropdown-menu`,...e})}function th({...e}){return(0,W.jsx)(ms,{"data-slot":`dropdown-menu-trigger`,...e})}function nh({className:e,sideOffset:t=4,...n}){return(0,W.jsx)(hs,{children:(0,W.jsx)(gs,{"data-slot":`dropdown-menu-content`,sideOffset:t,className:L(`z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...n})})}function rh({className:e,inset:t,variant:n=`default`,...r}){return(0,W.jsx)(_s,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:L(`relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!`,e),...r})}function ih({...e}){return(0,W.jsx)(vs,{"data-slot":`dropdown-menu-sub`,...e})}function ah({className:e,inset:t,children:n,...r}){return(0,W.jsxs)(ys,{"data-slot":`dropdown-menu-sub-trigger`,"data-inset":t,className:L(`flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...r,children:[n,(0,W.jsx)(s,{className:`ml-auto size-4`})]})}function oh({className:e,...t}){return(0,W.jsx)(bs,{"data-slot":`dropdown-menu-sub-content`,className:L(`z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...t})}var sh={M:`text-yellow-500`,A:`text-green-500`,D:`text-red-500`,R:`text-blue-500`,C:`text-purple-500`,"?":`text-gray-400`};function ch(e){let t=[];for(let n of e){let e=n.path.split(`/`),r=t;for(let t=0;t<e.length;t++){let i=e[t],a=e.slice(0,t+1).join(`/`),o=t===e.length-1,s=r.find(e=>e.name===i);s||(s={name:i,fullPath:a,file:o?n:void 0,children:[]},r.push(s)),o&&(s.file=n),r=s.children}}return t}function lh(e){let t=[];e.file&&t.push(e.file);for(let n of e.children)t.push(...lh(n));return t}function uh({metadata:e,tabId:t,onNavigate:n}){let r=e?.projectName,[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(!0),[c,l]=(0,H.useState)(null),[u,d]=(0,H.useState)(``),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(null),{openTab:g}=op(),_=U(e=>e.gitStatusViewMode),v=U(e=>e.setGitStatusViewMode),y=ap(e=>e.projects.find(e=>e.name===r)?.path),b=Jm(e=>e.setCount),x=(0,H.useCallback)(async()=>{if(r)try{s(!0);let e=await B.get(`${z(r)}/git/status`);a(e),b(r,e.staged.length+e.unstaged.length+e.untracked.length),l(null)}catch(e){l(e instanceof Error?e.message:`Failed to fetch status`)}finally{s(!1)}},[r,b]);(0,H.useEffect)(()=>{x();let e=setInterval(x,5e3);return()=>clearInterval(e)},[x]);let S=async e=>{if(r){p(!0);try{await B.post(`${z(r)}/git/stage`,{files:e}),await x()}catch(e){l(e instanceof Error?e.message:`Stage failed`)}finally{p(!1)}}},C=async e=>{if(r){p(!0);try{await B.post(`${z(r)}/git/unstage`,{files:e}),await x()}catch(e){l(e instanceof Error?e.message:`Unstage failed`)}finally{p(!1)}}},w=async e=>{if(r){p(!0);try{await B.post(`${z(r)}/git/discard`,{files:e}),await x()}catch(e){l(e instanceof Error?e.message:`Discard failed`)}finally{p(!1)}}},T=async()=>{m&&(await w(m.files),h(null))},E=async()=>{if(!(!r||!u.trim()||!i?.staged.length)){p(!0);try{await B.post(`${z(r)}/git/commit`,{message:u.trim()}),d(``),await x()}catch(e){l(e instanceof Error?e.message:`Commit failed`)}finally{p(!1)}}},D=async()=>{if(r){p(!0);try{await B.post(`${z(r)}/git/push`,{}),await x()}catch(e){l(e instanceof Error?e.message:`Push failed`)}finally{p(!1)}}},O=async()=>{if(r){p(!0);try{await B.post(`${z(r)}/git/pull`,{}),await x()}catch(e){l(e instanceof Error?e.message:`Pull failed`)}finally{p(!1)}}},k=e=>{g({type:`git-diff`,title:ie(e.path),closable:!0,metadata:{projectName:r,filePath:e.path},projectId:r??null}),n?.()},A=e=>{g({type:`editor`,title:ie(e.path),closable:!0,metadata:{projectName:r,filePath:e.path},projectId:r??null}),n?.()},j=(0,H.useMemo)(()=>[...i?.unstaged??[],...i?.untracked.map(e=>({path:e,status:`?`}))??[]],[i]);return r?o&&!i?(0,W.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,W.jsx)(V,{className:`size-5 animate-spin`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Loading git status...`})]}):c&&!i?(0,W.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-destructive text-sm`,children:[(0,W.jsx)(`p`,{children:c}),(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:x,children:`Retry`})]}):(0,W.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b shrink-0`,children:[(0,W.jsx)(`span`,{className:`text-sm font-medium`,children:i?.current?`On: ${i.current}`:`Git Status`}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsx)($,{variant:_===`flat`?`secondary`:`ghost`,size:`icon-xs`,onClick:()=>v(`flat`),title:`Flat view`,children:(0,W.jsx)(mt,{className:`size-3.5`})}),(0,W.jsx)($,{variant:_===`tree`?`secondary`:`ghost`,size:`icon-xs`,onClick:()=>v(`tree`),title:`Tree view`,children:(0,W.jsx)($e,{className:`size-3.5`})}),(0,W.jsx)($,{variant:`ghost`,size:`icon-xs`,onClick:x,disabled:f,children:(0,W.jsx)(Lt,{className:o?`animate-spin`:``})})]})]}),c&&(0,W.jsx)(`div`,{className:`px-3 py-1.5 text-xs text-destructive bg-destructive/10 shrink-0`,children:c}),r&&(0,W.jsx)(Qm,{projectName:r,projectPath:y}),(0,W.jsx)(bm,{className:`flex-1 overflow-hidden`,children:(0,W.jsxs)(`div`,{className:`p-1.5 space-y-2 overflow-hidden`,children:[(0,W.jsx)(fh,{title:`Staged Changes`,count:i?.staged.length??0,files:i?.staged??[],viewMode:_,actionIcon:(0,W.jsx)(bt,{className:`size-3`}),actionAllIcon:(0,W.jsx)(bt,{className:`size-3`}),actionTitle:`Unstage`,onAction:e=>C([e.path]),onActionAll:i?.staged.length?()=>C(i.staged.map(e=>e.path)):void 0,actionAllLabel:`Unstage All`,onFolderAction:e=>C(e.map(e=>e.path)),onClickFile:k,onOpenFile:A,disabled:f}),(0,W.jsx)(fh,{title:`Changes`,count:j.length,files:j,viewMode:_,actionIcon:(0,W.jsx)(Nt,{className:`size-3`}),actionAllIcon:(0,W.jsx)(Nt,{className:`size-3`}),actionTitle:`Stage`,onAction:e=>S([e.path]),onActionAll:j.length?()=>S(j.map(e=>e.path)):void 0,actionAllLabel:`Stage All`,onFolderAction:e=>S(e.map(e=>e.path)),onClickFile:k,onOpenFile:A,disabled:f,showRevert:!0,onRevert:e=>h({label:e.path,files:[e.path]}),onFolderRevert:(e,t)=>h({label:`${t}/ (${e.length} files)`,files:e.map(e=>e.path)})})]})}),(0,W.jsxs)(`div`,{className:`border-t p-2 space-y-2 shrink-0`,children:[(0,W.jsx)(`textarea`,{className:`w-full h-16 px-3 py-2 text-base md:text-sm text-foreground bg-surface border border-border rounded-lg resize-none focus:outline-none focus:border-ring placeholder:text-muted-foreground`,placeholder:`Commit message...`,value:u,onChange:e=>d(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&E()}}),(0,W.jsx)($,{size:`sm`,className:`w-full`,disabled:f||!u.trim()||!i?.staged.length,onClick:E,children:f?(0,W.jsx)(V,{className:`size-3 animate-spin`}):`Commit (${i?.staged.length??0})`}),(0,W.jsxs)(`div`,{className:`flex gap-2`,children:[(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`flex-1`,disabled:f,onClick:D,children:[(0,W.jsx)(ve,{className:`size-3`}),`Push`]}),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`flex-1`,disabled:f,onClick:O,children:[(0,W.jsx)(he,{className:`size-3`}),`Pull`]})]})]}),(0,W.jsx)(Am,{open:!!m,onOpenChange:e=>!e&&h(null),children:(0,W.jsxs)(Pm,{showCloseButton:!1,children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{children:`Discard Changes`}),(0,W.jsxs)(Rm,{children:[`Are you sure you want to discard all changes to`,` `,(0,W.jsx)(`code`,{className:`px-1 py-0.5 rounded bg-muted text-sm font-mono`,children:m?.label}),`? This action cannot be undone.`]})]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,onClick:()=>h(null),children:`Cancel`}),(0,W.jsx)($,{variant:`destructive`,onClick:T,disabled:f,children:f?(0,W.jsx)(V,{className:`size-3 animate-spin`}):`Discard`})]})]})})]}):(0,W.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`})}function dh({showRevert:e,onRevert:t,onAction:n,onOpenFile:r,actionIcon:i,actionTitle:a,disabled:o}){return(0,W.jsxs)(`div`,{className:`hidden md:flex absolute right-0 top-0 bottom-0 items-center gap-0.5 pl-6 pr-1 bg-gradient-to-l from-background from-70% to-transparent can-hover:opacity-0 can-hover:group-hover:opacity-100 transition-opacity`,children:[r&&(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-primary active:scale-95 transition-colors`,onClick:e=>{e.stopPropagation(),r()},disabled:o,title:`Open file`,children:(0,W.jsx)(qe,{className:`size-3`})}),e&&t&&(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-destructive active:scale-95 transition-colors`,onClick:e=>{e.stopPropagation(),t()},disabled:o,title:`Discard changes`,children:(0,W.jsx)(Qt,{className:`size-3`})}),(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-accent-foreground active:scale-95 transition-colors`,onClick:e=>{e.stopPropagation(),n()},disabled:o,title:a,children:i})]})}function fh({title:e,count:t,files:n,viewMode:r,actionIcon:i,actionAllIcon:a,actionTitle:o,onAction:s,onActionAll:c,actionAllLabel:l,onFolderAction:u,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h,onFolderRevert:g}){return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between mb-0.5`,children:[(0,W.jsxs)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase`,children:[e,` (`,t,`)`]}),c&&t>0&&(0,W.jsx)(`button`,{type:`button`,className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-accent-foreground active:scale-95 transition-colors`,onClick:c,disabled:p,title:l,children:a})]}),n.length===0?(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground px-1`,children:`No changes`}):r===`flat`?(0,W.jsx)(`div`,{className:`w-full overflow-hidden`,children:n.map(e=>(0,W.jsx)(mh,{file:e,actionIcon:i,actionTitle:o,onAction:s,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h},e.path))}):(0,W.jsx)(hh,{files:n,actionIcon:i,actionTitle:o,onAction:s,onFolderAction:u,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h,onFolderRevert:g})]})}function ph(e,t,n=400){let r=(0,H.useRef)(null),i=(0,H.useRef)(!1),a=(0,H.useRef)(!1),o=(0,H.useCallback)(()=>{r.current&&=(clearTimeout(r.current),null)},[]);return{onTouchStart:(0,H.useCallback)(t=>{i.current=!1,a.current=!1,r.current=setTimeout(()=>{a.current=!0,e()},n)},[e,n]),onTouchMove:(0,H.useCallback)(()=>{i.current=!0,o()},[o]),onTouchEnd:(0,H.useCallback)(e=>{o(),!i.current&&!a.current&&(e.preventDefault(),t())},[o,t])}}function mh({file:e,actionIcon:t,actionTitle:n,onAction:r,onClickFile:i,onOpenFile:a,disabled:o,showRevert:s,onRevert:c,displayName:l}){let[u,d]=(0,H.useState)(!1),f=ph((0,H.useCallback)(()=>d(!0),[]),(0,H.useCallback)(()=>i(e),[i,e])),p=(0,W.jsxs)(`div`,{className:`group relative flex items-center gap-1 hover:bg-muted/50 rounded pl-1 py-px w-full min-w-0`,children:[(0,W.jsx)(`span`,{className:`text-xs font-mono w-4 text-center shrink-0 ${sh[e.status]??``}`,children:e.status}),(0,W.jsx)(`button`,{type:`button`,className:`hidden md:block flex-1 text-left text-xs font-mono truncate hover:underline min-w-0`,onClick:()=>i(e),title:e.path,children:l??e.path}),(0,W.jsx)(`span`,{className:`md:hidden flex-1 text-left text-xs font-mono truncate min-w-0 select-none`,children:l??e.path}),(0,W.jsx)(dh,{showRevert:s,onRevert:c?()=>c(e):void 0,onOpenFile:a?()=>a(e):void 0,onAction:()=>r(e),actionIcon:t,actionTitle:n,disabled:o})]});return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`hidden md:block`,children:p}),(0,W.jsx)(`div`,{className:`md:hidden select-none`,...f,children:(0,W.jsxs)(eh,{open:u,onOpenChange:d,children:[(0,W.jsx)(th,{asChild:!0,children:p}),(0,W.jsxs)(nh,{align:`start`,className:`min-w-40`,children:[(0,W.jsx)(rh,{onClick:()=>i(e),children:`View Diff`}),a&&(0,W.jsx)(rh,{onClick:()=>a(e),children:`Open File`}),(0,W.jsx)(rh,{onClick:()=>r(e),disabled:o,children:n}),s&&c&&(0,W.jsx)(rh,{className:`text-destructive focus:text-destructive`,onClick:()=>c(e),disabled:o,children:`Discard Changes`})]})]})})]})}function hh({files:e,actionIcon:t,actionTitle:n,onAction:r,onFolderAction:i,onClickFile:a,onOpenFile:o,disabled:s,showRevert:c,onRevert:l,onFolderRevert:u}){let d=(0,H.useMemo)(()=>ch(e),[e]);return(0,W.jsx)(`div`,{children:d.map((e,f)=>(0,W.jsx)(gh,{node:e,depth:0,isLast:f===d.length-1,actionIcon:t,actionTitle:n,onAction:r,onFolderAction:i,onClickFile:a,onOpenFile:o,disabled:s,showRevert:c,onRevert:l,onFolderRevert:u},e.fullPath))})}function gh({node:e,depth:t,isLast:n,actionIcon:r,actionTitle:i,onAction:o,onFolderAction:c,onClickFile:l,onOpenFile:u,disabled:d,showRevert:f,onRevert:p,onFolderRevert:m}){let[h,g]=(0,H.useState)(!0),_=e.children.length>0&&!e.file,v=t*12-6,y=`absolute border-dashed border-border`;if(e.file)return(0,W.jsxs)(`div`,{className:`relative`,style:{paddingLeft:t*12},children:[t>0&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`${y} border-l`,style:{left:v,top:0,bottom:n?`50%`:0}}),(0,W.jsx)(`div`,{className:`${y} border-t`,style:{left:v,top:`50%`,width:6}})]}),(0,W.jsx)(mh,{file:e.file,displayName:e.name,actionIcon:r,actionTitle:i,onAction:o,onClickFile:l,onOpenFile:u,disabled:d,showRevert:f,onRevert:p})]});if(_){let _=lh(e);return(0,W.jsxs)(`div`,{className:`relative`,children:[t>0&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`${y} border-l`,style:{left:v,top:0,...n?{height:13}:{bottom:0}}}),(0,W.jsx)(`div`,{className:`${y} border-t`,style:{left:v,top:13,width:8}})]}),(()=>{let n=(0,W.jsxs)(`div`,{className:`group relative flex items-center hover:bg-muted/50 rounded py-0.5`,style:{paddingLeft:t*12+2},children:[(0,W.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 flex-1 min-w-0 text-xs font-mono text-muted-foreground`,onClick:()=>g(!h),children:[h?(0,W.jsx)(a,{className:`size-3.5 shrink-0`}):(0,W.jsx)(s,{className:`size-3.5 shrink-0`}),(0,W.jsx)(`span`,{className:`truncate font-semibold`,children:e.name}),(0,W.jsxs)(`span`,{className:`text-[10px] opacity-60 shrink-0`,children:[`(`,_.length,`)`]})]}),(0,W.jsx)(dh,{showRevert:f,onRevert:m?()=>m(_,e.fullPath):void 0,onAction:()=>c?.(_),actionIcon:r,actionTitle:`${i} ${e.name}/`,disabled:d})]});return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`hidden md:block`,children:n}),(0,W.jsx)(`div`,{className:`md:hidden`,children:(0,W.jsxs)(eh,{children:[(0,W.jsx)(th,{asChild:!0,children:n}),(0,W.jsxs)(nh,{align:`start`,className:`min-w-40`,children:[(0,W.jsxs)(rh,{onClick:()=>c?.(_),disabled:d,children:[i,` `,e.name,`/`]}),m&&(0,W.jsx)(rh,{className:`text-destructive focus:text-destructive`,onClick:()=>m(_,e.fullPath),disabled:d,children:`Discard Changes`})]})]})})]})})(),h&&(0,W.jsx)(`div`,{children:e.children.map((n,a)=>(0,W.jsx)(gh,{node:n,depth:t+1,isLast:a===e.children.length-1,actionIcon:r,actionTitle:i,onAction:o,onFolderAction:c,onClickFile:l,onOpenFile:u,disabled:d,showRevert:f,onRevert:p,onFolderRevert:m},n.fullPath))})]})}return null}function _h({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,W.jsx)(J,{"data-slot":`separator`,decorative:n,orientation:t,className:L(`shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px`,e),...r})}function vh({...e}){return(0,W.jsx)(Cl,{"data-slot":`select`,...e})}function yh({...e}){return(0,W.jsx)(Tl,{"data-slot":`select-value`,...e})}function bh({className:e,size:t=`default`,children:n,...r}){return(0,W.jsxs)(wl,{"data-slot":`select-trigger`,"data-size":t,className:L(`flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...r,children:[n,(0,W.jsx)(El,{asChild:!0,children:(0,W.jsx)(a,{className:`size-4 opacity-50`})})]})}function xh({className:e,children:t,position:n=`item-aligned`,align:r=`center`,...i}){return(0,W.jsx)(Dl,{children:(0,W.jsxs)(Ol,{"data-slot":`select-content`,className:L(`relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,n===`popper`&&`data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1`,e),position:n,align:r,...i,children:[(0,W.jsx)(Ch,{}),(0,W.jsx)(kl,{className:L(`p-1`,n===`popper`&&`h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1`),children:t}),(0,W.jsx)(wh,{})]})})}function Sh({className:e,children:t,...n}){return(0,W.jsxs)(Al,{"data-slot":`select-item`,className:L(`relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...n,children:[(0,W.jsx)(`span`,{"data-slot":`select-item-indicator`,className:`absolute right-2 flex size-3.5 items-center justify-center`,children:(0,W.jsx)(Ml,{children:(0,W.jsx)(Ee,{className:`size-4`})})}),(0,W.jsx)(jl,{children:t})]})}function Ch({className:e,...t}){return(0,W.jsx)(Nl,{"data-slot":`select-scroll-up-button`,className:L(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,W.jsx)(Oe,{className:`size-4`})})}function wh({className:e,...t}){return(0,W.jsx)(Pl,{"data-slot":`select-scroll-down-button`,className:L(`flex cursor-default items-center justify-center py-1`,e),...t,children:(0,W.jsx)(a,{className:`size-4`})})}var Th=H.forwardRef(({className:e,...t},n)=>(0,W.jsx)(Yl,{className:L(`peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input`,e),...t,ref:n,children:(0,W.jsx)(Xl,{className:L(`pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0`)})}));Th.displayName=Yl.displayName;var Eh={claude:`C`,cursor:`▶`,codex:`◆`,gemini:`G`};function Dh({value:e,onChange:t,projectName:n}){let[r,i]=(0,H.useState)([]),[a,o]=(0,H.useState)(!1),s=(0,H.useRef)(null),c=(0,H.useRef)(0);(0,H.useEffect)(()=>{n&&B.get(`${z(n)}/chat/providers`).then(i).catch(()=>{})},[n]),(0,H.useEffect)(()=>{if(!a)return;let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[a]),(0,H.useEffect)(()=>{a&&(c.current=Math.max(0,r.findIndex(t=>t.id===e)))},[a,e,r]);let l=(0,H.useCallback)(e=>{if(e.key===`Escape`){o(!1);return}if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=e.key===`ArrowDown`?1:-1;c.current=(c.current+t+r.length)%r.length,(s.current?.querySelector(`[data-idx="${c.current}"]`))?.focus()}if(e.key===`Enter`){e.preventDefault();let n=r[c.current];n&&(t(n.id),o(!1))}},[t,r]);if(r.length<=1)return null;let u=r.find(t=>t.id===e),d=Eh[e]||`?`;return(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),o(e=>!e)},className:`inline-flex items-center gap-1 px-2 py-1 rounded-md text-[11px] text-text-subtle hover:text-text-primary hover:bg-surface-elevated transition-colors border border-transparent hover:border-border`,"aria-label":`AI Provider: ${u?.name??e}`,children:[(0,W.jsx)(`span`,{className:`inline-flex h-3.5 w-3.5 items-center justify-center rounded text-[9px] font-bold bg-surface-elevated shrink-0`,children:d}),(0,W.jsx)(`span`,{className:`max-w-[80px] truncate capitalize`,children:u?.name??e})]}),a&&(0,W.jsxs)(`div`,{ref:s,role:`listbox`,"aria-label":`AI Providers`,onKeyDown:l,onMouseDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),className:`absolute bottom-full left-0 mb-1 z-50 w-56 rounded-lg border border-border bg-surface shadow-lg`,children:[(0,W.jsx)(`div`,{className:`px-3 py-2 border-b border-border`,children:(0,W.jsx)(`span`,{className:`text-xs font-medium text-text-secondary`,children:`Provider`})}),(0,W.jsx)(`div`,{className:`py-1`,children:r.map((n,r)=>{let i=Eh[n.id]||`?`,a=n.id===e;return(0,W.jsxs)(`button`,{"data-idx":r,role:`option`,"aria-selected":a,tabIndex:0,onClick:()=>{t(n.id),o(!1)},className:`w-full flex items-center gap-3 px-3 py-2 text-left transition-colors hover:bg-surface-elevated focus:bg-surface-elevated focus:outline-none ${a?`bg-surface-elevated`:``}`,children:[(0,W.jsx)(`span`,{className:`inline-flex h-5 w-5 items-center justify-center rounded text-[11px] font-bold bg-surface-elevated text-text-subtle shrink-0`,children:i}),(0,W.jsx)(`span`,{className:`flex-1 text-sm font-medium text-text-primary capitalize`,children:n.name}),a&&(0,W.jsx)(Ee,{className:`size-4 shrink-0 text-primary`})]},n.id)})})]})]})}function Oh({providerId:e}){return(0,W.jsx)(`span`,{className:`inline-flex h-4 w-4 items-center justify-center rounded text-[10px] font-bold bg-surface-elevated text-text-subtle shrink-0`,title:e,children:Eh[e]||`?`})}var kh=[{value:`low`,label:`Low`},{value:`medium`,label:`Medium`},{value:`high`,label:`High`}],Ah=[{value:`bypassPermissions`,label:`Bypass permissions (default)`},{value:`default`,label:`Ask before edits`},{value:`acceptEdits`,label:`Edit automatically`},{value:`plan`,label:`Plan mode`}],jh={claude:`Claude`,cursor:`Cursor`,codex:`Codex`,gemini:`Gemini`};function Mh({compact:e}={}){let[t,n]=(0,H.useState)(null),[r,i]=(0,H.useState)(``),[a,o]=(0,H.useState)([]),[s,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(null),[p,m]=(0,H.useState)(0);(0,H.useEffect)(()=>{ce().then(e=>{n(e),i(e.default_provider??`claude`)}).catch(e=>f(e.message))},[]),(0,H.useEffect)(()=>{r&&(c(!0),B.get(`/api/settings/ai/providers/${r}/models`).then(o).catch(()=>o([])).finally(()=>c(!1)))},[r]);let h=t?Object.keys(t.providers).filter(e=>e!==`mock`).map(e=>({id:e,name:jh[e]??e})):[],g=t?.providers[r],_=g?.type===`agent-sdk`||!g?.type&&r===`claude`,v=async(e,i)=>{if(t){u(!0),f(null);try{n(await ue({providers:{[r]:{[e]:i}}})),m(e=>e+1)}catch(e){f(e.message)}finally{u(!1)}}},y=e?`text-[11px]`:`text-sm`,b=e?`text-xs`:`text-sm`,x=e?`space-y-2`:`space-y-4`,S=e?`space-y-1.5`:`space-y-3`,C=e?`space-y-1`:`space-y-1.5`;if(!t)return(0,W.jsxs)(`div`,{className:S,children:[(0,W.jsx)(`h3`,{className:`${b} font-medium text-text-secondary`,children:`AI Settings`}),(0,W.jsx)(`p`,{className:`${y} text-text-subtle`,children:d?`Error: ${d}`:`Loading...`})]});let w=_?a:[{value:`__default__`,label:`Auto (default)`},...a];return(0,W.jsxs)(`div`,{className:x,children:[(0,W.jsx)(`h3`,{className:`${b} font-medium text-text-secondary`,children:`AI Settings`}),h.length>1&&(0,W.jsx)(`div`,{className:`flex gap-0.5 border-b border-border/50 -mx-1 px-1`,children:h.map(e=>(0,W.jsxs)(`button`,{onClick:()=>i(e.id),className:`flex items-center gap-1 px-2 py-1 text-[11px] rounded-t transition-colors ${r===e.id?`text-primary border-b-2 border-primary font-medium`:`text-text-subtle hover:text-text-secondary`}`,children:[(0,W.jsx)(Oh,{providerId:e.id}),(0,W.jsx)(`span`,{className:`capitalize`,children:e.name})]},e.id))}),(0,W.jsxs)(`div`,{className:S,children:[a.length>0&&(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Xm,{htmlFor:`ai-model`,className:e?y:void 0,children:`Model`}),(0,W.jsxs)(vh,{value:_?g?.model??a[0]?.value:g?.model||`__default__`,onValueChange:e=>v(`model`,e===`__default__`?void 0:e),disabled:s,children:[(0,W.jsx)(bh,{id:`ai-model`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,W.jsx)(yh,{placeholder:s?`Loading models...`:`Select model`})}),(0,W.jsx)(xh,{className:`max-h-[300px]`,children:w.map(e=>(0,W.jsx)(Sh,{value:e.value,children:e.label},e.value))})]})]}),_&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Xm,{htmlFor:`ai-base-url`,className:e?y:void 0,children:`Base URL`}),(0,W.jsx)(zm,{id:`ai-base-url`,type:`url`,defaultValue:g?.base_url??``,placeholder:`https://api.anthropic.com (default)`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{v(`base_url`,e.target.value.trim()||void 0)}},`baseurl-${r}-${p}`)]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Xm,{htmlFor:`ai-api-key`,className:e?y:void 0,children:`API Key / Token`}),(0,W.jsx)(zm,{id:`ai-api-key`,type:`password`,defaultValue:g?.api_key??``,placeholder:`sk-ant-... (optional, overrides accounts)`,className:e?`h-7 text-[11px] font-mono`:`font-mono`,onBlur:e=>{let t=e.target.value.trim();t.startsWith(`••••`)||v(`api_key`,t||void 0)}},`apikey-${r}-${p}`),(0,W.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Direct API key or OAuth token. Leave empty to use connected accounts.`})]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Xm,{htmlFor:`ai-effort`,className:e?y:void 0,children:`Effort`}),(0,W.jsxs)(vh,{value:g?.effort??`high`,onValueChange:e=>v(`effort`,e),children:[(0,W.jsx)(bh,{id:`ai-effort`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,W.jsx)(yh,{})}),(0,W.jsx)(xh,{children:kh.map(e=>(0,W.jsx)(Sh,{value:e.value,children:e.label},e.value))})]})]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Xm,{htmlFor:`ai-max-turns`,className:e?y:void 0,children:`Max Turns (1-500)`}),(0,W.jsx)(zm,{id:`ai-max-turns`,type:`number`,min:1,max:500,defaultValue:g?.max_turns??100,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseInt(e.target.value);isNaN(t)||v(`max_turns`,t)}},`turns-${r}-${p}`)]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Xm,{htmlFor:`ai-budget`,className:e?y:void 0,children:`Max Budget (USD)`}),(0,W.jsx)(zm,{id:`ai-budget`,type:`number`,step:.1,min:.01,max:50,defaultValue:g?.max_budget_usd??``,placeholder:`No limit`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseFloat(e.target.value);v(`max_budget_usd`,isNaN(t)?void 0:t)}},`budget-${r}-${p}`)]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Xm,{htmlFor:`ai-thinking`,className:e?y:void 0,children:`Thinking Budget (tokens)`}),(0,W.jsx)(zm,{id:`ai-thinking`,type:`number`,min:0,defaultValue:g?.thinking_budget_tokens??``,placeholder:`Disabled`,className:e?`h-7 text-[11px]`:void 0,onBlur:e=>{let t=parseInt(e.target.value);v(`thinking_budget_tokens`,isNaN(t)?void 0:t)}},`thinking-${r}-${p}`)]}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(Xm,{htmlFor:`ai-agent-teams`,className:e?y:void 0,children:`Agent Teams`}),(0,W.jsx)(`p`,{className:`${e?`text-[9px]`:`text-[11px]`} text-muted-foreground`,children:`Experimental. Enables multi-agent collaboration with shared tasks and messaging. Uses ~7x more tokens.`})]}),(0,W.jsx)(Th,{id:`ai-agent-teams`,checked:g?.agent_teams??!1,onCheckedChange:e=>v(`agent_teams`,e)})]}),g?.agent_teams&&(0,W.jsx)(Nh,{compact:e})]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Xm,{htmlFor:`ai-permission-mode`,className:e?y:void 0,children:`Default Permission Mode`}),(0,W.jsxs)(vh,{value:g?.permission_mode??`bypassPermissions`,onValueChange:e=>v(`permission_mode`,e),children:[(0,W.jsx)(bh,{id:`ai-permission-mode`,className:`w-full ${e?`h-7 text-[11px]`:``}`,children:(0,W.jsx)(yh,{})}),(0,W.jsx)(xh,{children:Ah.map(e=>(0,W.jsx)(Sh,{value:e.value,children:e.label},e.value))})]})]}),(0,W.jsxs)(`div`,{className:C,children:[(0,W.jsx)(Xm,{htmlFor:`ai-system-prompt`,className:e?y:void 0,children:`Additional Instructions`}),(0,W.jsx)(`textarea`,{id:`ai-system-prompt`,rows:e?3:4,defaultValue:g?.system_prompt??``,placeholder:`Enter additional instructions for ${r}...`,className:`w-full rounded-md border border-input bg-background px-3 py-2 ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 ${e?`text-[11px]`:`text-sm`}`,onBlur:e=>{v(`system_prompt`,e.target.value.trim()||void 0)}},`sysprompt-${r}-${p}`)]})]}),l&&(0,W.jsx)(`p`,{className:`text-xs text-text-subtle`,children:`Saving...`}),d&&(0,W.jsx)(`p`,{className:`text-xs text-red-500`,children:d})]})}function Nh({compact:e}){let[t,n]=(0,H.useState)([]),[r,i]=(0,H.useState)(!1),[a,o]=(0,H.useState)(null),s=(0,H.useCallback)(async()=>{i(!0);try{n(await B.get(`/api/teams`)??[])}catch{}i(!1)},[]);(0,H.useEffect)(()=>{s()},[s]);let c=async e=>{try{await B.del(`/api/teams/${encodeURIComponent(e)}`),n(t=>t.filter(t=>t.name!==e)),o(null)}catch{}};return t.length===0&&!r?null:(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(Xm,{className:e?`text-[11px]`:void 0,children:[`Teams (`,t.length,`)`]}),(0,W.jsx)(`button`,{onClick:s,className:`text-text-subtle hover:text-foreground p-1`,"aria-label":`Refresh teams`,children:(0,W.jsx)(Lt,{className:`size-3 ${r?`animate-spin`:``}`})})]}),t.map(e=>(0,W.jsxs)(`div`,{className:`flex items-center justify-between p-2 rounded bg-surface-elevated text-xs`,children:[(0,W.jsxs)(`div`,{className:`min-w-0`,children:[(0,W.jsx)(`div`,{className:`font-medium truncate`,children:e.name}),e.description&&(0,W.jsx)(`div`,{className:`text-text-subtle truncate`,children:e.description}),(0,W.jsxs)(`div`,{className:`text-text-subtle`,children:[e.members?.length??e.memberCount??0,` members`,e.createdAt?` · ${new Date(e.createdAt).toLocaleDateString()}`:``]})]}),a===e.name?(0,W.jsxs)(`div`,{className:`flex gap-1 shrink-0 ml-2`,children:[(0,W.jsx)(`button`,{onClick:()=>c(e.name),className:`px-2 py-1 bg-red-600 text-white rounded text-[10px]`,children:`Delete`}),(0,W.jsx)(`button`,{onClick:()=>o(null),className:`px-2 py-1 bg-zinc-600 text-white rounded text-[10px]`,children:`Cancel`})]}):(0,W.jsx)(`button`,{onClick:()=>o(e.name),className:`shrink-0 text-text-subtle hover:text-red-500 p-1 ml-2`,"aria-label":`Delete team ${e.name}`,children:(0,W.jsx)(Xt,{className:`size-3.5`})})]},e.name))]})}var Ph=[{key:`general`,label:`General`},{key:`tabs`,label:`Tabs`},{key:`projects`,label:`Projects`}],Fh=[`Ctrl+T`,`Ctrl+W`,`Ctrl+N`,`Ctrl+Tab`,`Ctrl+L`,`Ctrl+H`,`Ctrl+J`,`F5`,`Ctrl+R`,`Ctrl+Shift+I`,`Ctrl+Shift+J`];function Ih({actionId:e,combo:t,locked:n}){let[r,i]=(0,H.useState)(!1),a=Hp(e=>e.setBinding),o=(0,H.useRef)(null),s=(0,H.useCallback)(t=>{if(t.preventDefault(),t.stopPropagation(),t.key===`Escape`){i(!1);return}let n=Vp(t);n&&(a(e,n),i(!1))},[e,a]);return(0,H.useEffect)(()=>{if(r)return document.addEventListener(`keydown`,s,!0),()=>document.removeEventListener(`keydown`,s,!0)},[r,s]),(0,H.useEffect)(()=>{if(!r)return;let e=e=>{o.current&&!o.current.contains(e.target)&&i(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[r]),n?(0,W.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border border-border bg-muted px-2 py-0.5 text-[11px] font-mono text-muted-foreground`,children:[(0,W.jsx)(ht,{className:`size-2.5`}),Bp(t)]}):r?(0,W.jsx)(`button`,{ref:o,className:`inline-flex items-center rounded border-2 border-primary bg-primary/10 px-2 py-0.5 text-[11px] font-mono text-primary animate-pulse`,children:`Press keys...`}):(0,W.jsx)(`button`,{ref:o,onClick:()=>i(!0),className:`inline-flex items-center rounded border border-border bg-surface px-2 py-0.5 text-[11px] font-mono text-foreground hover:border-primary hover:bg-primary/5 transition-colors cursor-pointer`,title:`Click to change shortcut`,children:Bp(t)})}function Lh(){let{getBinding:e,resetBinding:t,resetAll:n,overrides:r}=Hp();return(0,W.jsxs)(`div`,{className:`space-y-3`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-text-secondary`,children:`Keyboard Shortcuts`}),Object.keys(r).length>0&&(0,W.jsxs)($,{variant:`ghost`,size:`sm`,className:`h-6 text-[10px] text-muted-foreground`,onClick:n,children:[(0,W.jsx)(Bt,{className:`size-3 mr-1`}),`Reset all`]})]}),(0,W.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-amber-500/30 bg-amber-500/5 px-2.5 py-2`,children:[(0,W.jsx)(Zt,{className:`size-3.5 text-amber-500 shrink-0 mt-0.5`}),(0,W.jsxs)(`p`,{className:`text-[10px] text-muted-foreground leading-relaxed`,children:[`Some shortcuts (`,Fh.slice(0,4).join(`, `),`...) are reserved by the browser and cannot be overridden.`]})]}),Ph.map(n=>{let i=Ip.filter(e=>e.category===n.key);return i.length===0?null:(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:n.label}),(0,W.jsx)(`div`,{className:`space-y-0.5`,children:i.map(n=>{let i=e(n.id),a=n.id in r;return(0,W.jsxs)(`div`,{className:`flex items-center justify-between py-1 px-1 rounded hover:bg-surface-elevated/50 transition-colors`,children:[(0,W.jsxs)(`div`,{className:`flex flex-col min-w-0`,children:[(0,W.jsx)(`span`,{className:`text-xs text-foreground`,children:n.label}),n.note&&(0,W.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:n.note})]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0 ml-2`,children:[(0,W.jsx)(Ih,{actionId:n.id,combo:i,locked:n.locked}),a&&!n.locked&&(0,W.jsx)(`button`,{onClick:()=>t(n.id),className:`flex items-center justify-center size-5 rounded text-muted-foreground hover:text-foreground hover:bg-surface-elevated transition-colors`,title:`Reset to default`,children:(0,W.jsx)(Bt,{className:`size-3`})})]})]},n.id)})})]},n.key)})]})}var Rh=`Hello! Reply briefly.`,zh=`claude-sonnet-4-6`;function Bh(e){let[t,n]=(0,H.useState)(!1);return(0,W.jsxs)(Am,{open:t,onOpenChange:n,children:[(0,W.jsx)(jm,{asChild:!0,children:(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-7 text-[11px] gap-1.5 cursor-pointer`,children:[(0,W.jsx)(Xe,{className:`size-3`}),`Test`]})}),(0,W.jsxs)(Pm,{className:`sm:max-w-md max-h-[85vh] overflow-y-auto`,children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{className:`text-sm`,children:`Test Proxy`}),(0,W.jsx)(Rm,{className:`text-[11px]`,children:`Send a test request and inspect the raw response.`})]}),t&&(0,W.jsx)(Vh,{...e})]})]})}function Vh({authKey:e,baseUrl:t}){let[n,r]=(0,H.useState)(`anthropic`),[i,a]=(0,H.useState)(Rh),[o,s]=(0,H.useState)(zh),[c,l]=(0,H.useState)(!0),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(null),v=(0,H.useRef)(null),y=(0,H.useRef)(null);(0,H.useEffect)(()=>{v.current?.select()},[]),(0,H.useEffect)(()=>{y.current&&(y.current.scrollTop=y.current.scrollHeight)},[f]);let b=e=>{r(e),p(null),h(null),_(null)},x=async()=>{d(!0),p(null),h(null),_(null);let r=Date.now(),a=n===`openai`,s=a?`${t}/proxy/v1/chat/completions`:`${t}/proxy/v1/messages`,l=JSON.stringify({model:o,max_tokens:256,stream:c,messages:[{role:`user`,content:i}]}),u={"Content-Type":`application/json`};a?u.Authorization=`Bearer ${e}`:(u[`x-api-key`]=e,u[`anthropic-version`]=`2023-06-01`);try{let e=await fetch(s,{method:`POST`,headers:u,body:l});if(!e.ok){let t=await e.text();h(`HTTP ${e.status}: ${t}`),d(!1),_(Date.now()-r);return}if(c){let t=e.body?.getReader();if(!t){h(`No response body`),d(!1);return}let n=new TextDecoder,i=``;for(;;){let{done:e,value:r}=await t.read();if(e)break;i+=n.decode(r,{stream:!0}),p(i)}_(Date.now()-r)}else{let t=await e.text();try{p(JSON.stringify(JSON.parse(t),null,2))}catch{p(t)}_(Date.now()-r)}}catch(e){h(e.message)}finally{d(!1),_(e=>e??Date.now()-r)}};return(0,W.jsxs)(`div`,{className:`space-y-3 min-w-0`,children:[(0,W.jsxs)(`div`,{className:`space-y-1.5 min-w-0`,children:[(0,W.jsx)(Xm,{className:`text-[11px]`,children:`Auth Style`}),(0,W.jsx)(`div`,{className:`flex gap-1`,children:[`anthropic`,`openai`].map(e=>(0,W.jsx)(`button`,{onClick:()=>b(e),className:`flex-1 h-8 rounded-md text-[11px] font-medium border transition-colors cursor-pointer ${n===e?`bg-primary text-primary-foreground border-primary`:`bg-muted text-muted-foreground border-transparent hover:bg-muted/80`}`,children:e===`anthropic`?`Anthropic`:`OpenAI`},e))}),(0,W.jsx)(`p`,{className:`text-[9px] text-muted-foreground`,children:n===`anthropic`?`x-api-key header`:`Authorization: Bearer header`})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(Xm,{className:`text-[11px]`,children:`Model`}),(0,W.jsxs)(`select`,{value:o,onChange:e=>s(e.target.value),className:`h-8 w-full rounded-md border bg-background px-2 text-[11px]`,children:[(0,W.jsx)(`option`,{value:`claude-sonnet-4-6`,children:`claude-sonnet-4-6`}),(0,W.jsx)(`option`,{value:`claude-haiku-4-5-20251001`,children:`claude-haiku-4-5`}),(0,W.jsx)(`option`,{value:`claude-opus-4-6`,children:`claude-opus-4-6`})]})]}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(Xm,{className:`text-[11px]`,children:`Streaming`}),(0,W.jsx)(`div`,{className:`flex gap-1`,children:[!0,!1].map(e=>(0,W.jsx)(`button`,{onClick:()=>l(e),className:`h-7 px-3 rounded-md text-[11px] font-medium border transition-colors cursor-pointer ${c===e?`bg-primary text-primary-foreground border-primary`:`bg-muted text-muted-foreground border-transparent hover:bg-muted/80`}`,children:e?`Stream`:`JSON`},String(e)))})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(Xm,{className:`text-[11px]`,children:`Message`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{ref:v,value:i,onChange:e=>a(e.target.value),placeholder:`Type a test message...`,className:`h-9 text-[11px] flex-1 min-w-0`,onKeyDown:e=>{e.key===`Enter`&&!u&&x()}}),(0,W.jsxs)($,{size:`sm`,className:`h-9 px-3 cursor-pointer shrink-0`,onClick:x,disabled:u||!i.trim(),children:[u?(0,W.jsx)(V,{className:`size-3.5 animate-spin`}):(0,W.jsx)(jt,{className:`size-3.5`}),(0,W.jsx)(`span`,{className:`ml-1 text-[11px]`,children:u?`...`:`Send`})]})]})]}),(f||m)&&(0,W.jsxs)(`div`,{className:`space-y-1 min-w-0`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(Xm,{className:`text-[10px] text-muted-foreground`,children:`Raw Response`}),g!=null&&(0,W.jsxs)(`span`,{className:`text-[9px] font-mono text-muted-foreground`,children:[(g/1e3).toFixed(1),`s`]})]}),m?(0,W.jsx)(`pre`,{className:`text-[9px] font-mono bg-red-500/10 text-red-500 p-2 rounded overflow-auto max-h-52 whitespace-pre-wrap break-all`,children:m}):(0,W.jsx)(`pre`,{ref:y,className:`text-[9px] font-mono bg-muted p-2 rounded overflow-auto max-h-52 whitespace-pre-wrap break-all`,children:f})]})]})}function Hh(){let[e,t]=(0,H.useState)(null),[n,r]=(0,H.useState)(!0),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(null),[c,l]=(0,H.useState)(null);(0,H.useEffect)(()=>{r(!0),le().then(t).catch(e=>s(e.message)).finally(()=>r(!1))},[]);let u=async e=>{a(!0),s(null);try{t(await se(e))}catch(e){s(e.message)}finally{a(!1)}},d=(e,t)=>{navigator.clipboard.writeText(e),l(t),setTimeout(()=>l(null),2e3)};if(n||!e)return(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-text-secondary`,children:`API Proxy`}),(0,W.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:o?`Error: ${o}`:`Loading...`})]});let f=!!e.authKey,p=!!e.tunnelUrl,m=e.localEndpoint,h=m.replace(/\/proxy\/v1\/messages$/,``);return(0,W.jsxs)(`div`,{className:`space-y-4`,children:[(0,W.jsx)(`div`,{className:`space-y-1.5`,children:(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Expose your Claude accounts as an Anthropic-compatible API endpoint. External tools (OpenCode, Cursor, etc.) can use your accounts via this proxy.`})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,W.jsx)(Xm,{className:`text-xs`,children:`Enable Proxy`}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Accept API requests on /proxy/v1/messages`})]}),(0,W.jsx)(Th,{checked:e.enabled,onCheckedChange:e=>u({enabled:e}),disabled:i})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(Xm,{className:`text-[11px]`,children:`Auth Key`}),f?(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{readOnly:!0,value:e.authKey,className:`h-7 text-[11px] font-mono flex-1`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 px-2 cursor-pointer shrink-0`,onClick:()=>d(e.authKey,`key`),children:c===`key`?`Copied!`:(0,W.jsx)(Le,{className:`size-3`})}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 px-2 cursor-pointer shrink-0`,onClick:()=>u({generateKey:!0}),disabled:i,children:(0,W.jsx)(Lt,{className:`size-3`})})]}):(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs cursor-pointer`,onClick:()=>u({generateKey:!0}),disabled:i,children:`Generate Auth Key`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Use as Bearer token or x-api-key when calling the proxy.`})]}),e.enabled&&f&&(0,W.jsxs)(`div`,{className:`space-y-2 rounded-md border p-3 bg-muted/30`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`h4`,{className:`text-[11px] font-medium`,children:`Connection Info`}),(0,W.jsx)(Bh,{authKey:e.authKey,baseUrl:window.location.origin})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(Xm,{className:`text-[10px] text-muted-foreground`,children:`Anthropic Endpoint`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,W.jsx)(`code`,{className:`text-[10px] font-mono bg-muted px-1.5 py-0.5 rounded flex-1 truncate`,children:p?e.proxyEndpoint:m}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 cursor-pointer shrink-0`,onClick:()=>d(p?e.proxyEndpoint:m,`anthropic`),children:c===`anthropic`?`Copied!`:(0,W.jsx)(Le,{className:`size-3`})})]})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(Xm,{className:`text-[10px] text-muted-foreground`,children:`OpenAI-Compatible Endpoint`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,W.jsx)(`code`,{className:`text-[10px] font-mono bg-muted px-1.5 py-0.5 rounded flex-1 truncate`,children:p?e.openAiEndpoint:e.localOpenAiEndpoint}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 cursor-pointer shrink-0`,onClick:()=>d(p?e.openAiEndpoint:e.localOpenAiEndpoint,`openai`),children:c===`openai`?`Copied!`:(0,W.jsx)(Le,{className:`size-3`})})]})]}),!p&&(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Start a Cloudflare tunnel (Share) to get a public URL.`}),(0,W.jsxs)(`div`,{className:`space-y-1 pt-1`,children:[(0,W.jsx)(Xm,{className:`text-[10px] text-muted-foreground`,children:`Anthropic Format`}),(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(`pre`,{className:`text-[9px] font-mono bg-muted p-2 rounded overflow-x-auto whitespace-pre`,children:`ANTHROPIC_BASE_URL=${p?e.tunnelUrl+`/proxy`:h+`/proxy`}
|
|
20
|
+
ANTHROPIC_API_KEY=${e.authKey}`}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`absolute top-1 right-1 h-5 px-1 cursor-pointer`,onClick:()=>d(`ANTHROPIC_BASE_URL=${p?e.tunnelUrl+`/proxy`:h+`/proxy`}\nANTHROPIC_API_KEY=${e.authKey}`,`anthropic-env`),children:c===`anthropic-env`?`Copied!`:(0,W.jsx)(Le,{className:`size-2.5`})})]})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(Xm,{className:`text-[10px] text-muted-foreground`,children:`OpenAI Format`}),(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(`pre`,{className:`text-[9px] font-mono bg-muted p-2 rounded overflow-x-auto whitespace-pre`,children:`OPENAI_BASE_URL=${p?e.tunnelUrl+`/proxy/v1`:h+`/proxy/v1`}
|
|
21
|
+
OPENAI_API_KEY=${e.authKey}`}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`absolute top-1 right-1 h-5 px-1 cursor-pointer`,onClick:()=>d(`OPENAI_BASE_URL=${p?e.tunnelUrl+`/proxy/v1`:h+`/proxy/v1`}\nOPENAI_API_KEY=${e.authKey}`,`openai-env`),children:c===`openai-env`?`Copied!`:(0,W.jsx)(Le,{className:`size-2.5`})})]})]}),(0,W.jsx)(`div`,{className:`flex items-center gap-3 pt-1`,children:(0,W.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[`Requests served: `,(0,W.jsx)(`span`,{className:`font-mono`,children:e.requestCount})]})})]}),i&&(0,W.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:`Saving...`}),o&&(0,W.jsx)(`p`,{className:`text-[11px] text-red-500`,children:o})]})}function Uh(){return B.get(`/api/settings/mcp`)}function Wh(e,t){return B.post(`/api/settings/mcp`,{name:e,config:t})}function Gh(e,t){return B.put(`/api/settings/mcp/${encodeURIComponent(e)}`,t)}function Kh(e){return B.del(`/api/settings/mcp/${encodeURIComponent(e)}`)}function qh(){return B.post(`/api/settings/mcp/import`,{})}function Jh(e){return!e||!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(e)?`Name must start with a letter/digit, then alphanumeric, hyphens, or underscores`:e.length>50?`Name max 50 chars`:null}function Yh(e){let t=[];if(!e||typeof e!=`object`)return[`Config must be an object`];let n=e,r=n.type??`stdio`;return r===`stdio`?(!n.command||typeof n.command!=`string`)&&t.push(`command is required for stdio`):r===`http`||r===`sse`?((!n.url||typeof n.url!=`string`)&&t.push(`url is required for `+r),n.url&&typeof n.url==`string`&&!/^https?:\/\/.+/.test(n.url)&&t.push(`url must be HTTP(S)`)):t.push(`type must be stdio, http, or sse`),t}var Xh=[`stdio`,`http`,`sse`];function Zh({open:e,onClose:t,editServer:n}){let r=!!n,[i,a]=(0,H.useState)(``),[s,c]=(0,H.useState)(`stdio`),[l,u]=(0,H.useState)(``),[d,f]=(0,H.useState)(``),[p,m]=(0,H.useState)(``),[h,g]=(0,H.useState)([]),[_,v]=(0,H.useState)(!1),[y,b]=(0,H.useState)(null);(0,H.useEffect)(()=>{if(e)if(b(null),v(!1),n){a(n.name),c(n.transport||`stdio`);let e=n.config;`command`in e?(u(e.command||``),f((e.args??[]).join(` `)),g(Qh(e.env))):`url`in e&&(m(e.url||``),g(Qh(e.headers)))}else a(``),c(`stdio`),u(``),f(``),m(``),g([])},[e,n]);let x=()=>{let e=$h(h);return s===`stdio`?{type:`stdio`,command:l,...d.trim()&&{args:d.trim().split(/\s+/)},...Object.keys(e).length>0&&{env:e}}:{type:s,url:p,...Object.keys(e).length>0&&{headers:e}}},S=async()=>{if(b(null),!r){let e=Jh(i);if(e){b(e);return}}let e=x(),n=Yh(e);if(n.length){b(n.join(`; `));return}v(!0);try{r?await Gh(i,e):await Wh(i,e),t(!0)}catch(e){b(e.message||`Save failed`)}finally{v(!1)}},C=()=>g([...h,{key:``,value:``}]),w=e=>g(h.filter((t,n)=>n!==e)),T=(e,t,n)=>{g(h.map((r,i)=>i===e?{key:t===`key`?n:r.key,value:t===`value`?n:r.value}:r))},E=s===`stdio`,D=E?`Environment Variables`:`Headers`;return(0,W.jsx)(Am,{open:e,onOpenChange:e=>{e||t()},children:(0,W.jsxs)(Pm,{className:`max-h-[85vh] overflow-y-auto sm:max-w-md`,children:[(0,W.jsxs)(Fm,{children:[(0,W.jsx)(Lm,{className:`text-sm`,children:r?`Edit MCP Server`:`Add MCP Server`}),(0,W.jsx)(Rm,{className:`text-[11px]`,children:`Configure a Model Context Protocol server connection.`})]}),(0,W.jsxs)(`div`,{className:`space-y-3`,children:[(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Name`}),(0,W.jsx)(zm,{value:i,onChange:e=>a(e.target.value),placeholder:`my-mcp-server`,className:`h-8 text-xs`,disabled:r})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Transport`}),(0,W.jsx)(`div`,{className:`flex gap-1`,children:Xh.map(e=>(0,W.jsx)($,{variant:s===e?`default`:`outline`,size:`sm`,className:`flex-1 h-7 text-xs cursor-pointer`,onClick:()=>{c(e),g([]),u(``),f(``),m(``)},children:e},e))})]}),E?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Command *`}),(0,W.jsx)(zm,{value:l,onChange:e=>u(e.target.value),placeholder:`npx`,className:`h-8 text-xs`})]}),(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Arguments (space-separated)`}),(0,W.jsx)(zm,{value:d,onChange:e=>f(e.target.value),placeholder:`@playwright/mcp@latest`,className:`h-8 text-xs`})]})]}):(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:`URL *`}),(0,W.jsx)(zm,{value:p,onChange:e=>m(e.target.value),placeholder:`https://mcp.example.com`,className:`h-8 text-xs`})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{className:`text-[11px] font-medium text-muted-foreground`,children:D}),h.map((e,t)=>(0,W.jsxs)(`div`,{className:`flex gap-1 items-center`,children:[(0,W.jsx)(zm,{value:e.key,onChange:e=>T(t,`key`,e.target.value),placeholder:`KEY`,className:`h-7 text-xs flex-1`}),(0,W.jsx)(zm,{value:e.value,onChange:e=>T(t,`value`,e.target.value),placeholder:`value`,className:`h-7 text-xs flex-1`}),(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer`,onClick:()=>w(t),children:(0,W.jsx)(o,{className:`size-3`})})]},t)),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs gap-1 cursor-pointer`,onClick:C,children:[(0,W.jsx)(Nt,{className:`size-3`}),` Add `,E?`Variable`:`Header`]})]}),y&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:y})]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs cursor-pointer`,onClick:()=>t(),children:`Cancel`}),(0,W.jsx)($,{size:`sm`,className:`h-8 text-xs cursor-pointer`,onClick:S,disabled:_,children:_?`Saving...`:`Save`})]})]})})}function Qh(e){return e?Object.entries(e).map(([e,t])=>({key:e,value:t})):[]}function $h(e){let t={};for(let{key:n,value:r}of e)n.trim()&&(t[n.trim()]=r);return t}function eg(){let[e,t]=(0,H.useState)([]),[n,r]=(0,H.useState)(!0),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(null),[c,l]=(0,H.useState)(null),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),m=(0,H.useCallback)(async()=>{try{t(await Uh())}catch(e){console.error(`Failed to load MCP servers:`,e)}finally{r(!1)}},[]);(0,H.useEffect)(()=>{m()},[m]);let h=async e=>{try{await Kh(e),l(null),m()}catch(e){console.error(`Failed to delete:`,e)}},g=async()=>{d(!0),p(null);try{let e=await qh();p(`Imported ${e.imported}, skipped ${e.skipped}`),m()}catch(e){p(e.message||`Import failed`)}finally{d(!1)}},_=e=>{a(!1),s(null),e&&m()},v=()=>{s(null),a(!0)},y=e=>{s(e),a(!0)};return n?(0,W.jsx)(`div`,{className:`space-y-3`,children:[1,2,3].map(e=>(0,W.jsx)(`div`,{className:`h-16 rounded-lg bg-muted animate-pulse`},e))}):(0,W.jsxs)(`div`,{className:`space-y-3`,children:[e.length===0?(0,W.jsxs)(`div`,{className:`text-center py-8 space-y-2`,children:[(0,W.jsx)(Wt,{className:`size-8 mx-auto text-muted-foreground`}),(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No MCP servers configured. Add one or import from Claude Code.`})]}):(0,W.jsx)(`div`,{className:`space-y-2`,children:e.map(e=>(0,W.jsxs)(`div`,{className:`rounded-lg border bg-card p-3 space-y-1.5`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(`span`,{className:`text-xs font-medium truncate flex-1`,children:e.name}),(0,W.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded bg-muted text-muted-foreground shrink-0`,children:e.transport})]}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground truncate`,children:tg(e)}),(0,W.jsx)(`div`,{className:`flex justify-end gap-1.5`,children:c===e.name?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{className:`text-[11px] text-destructive self-center mr-1`,children:`Delete?`}),(0,W.jsx)($,{variant:`destructive`,size:`sm`,className:`h-8 min-w-[44px] text-xs cursor-pointer`,onClick:()=>h(e.name),children:`Yes`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-8 min-w-[44px] text-xs cursor-pointer`,onClick:()=>l(null),children:`No`})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)($,{variant:`ghost`,size:`sm`,className:`h-7 text-xs gap-1 cursor-pointer`,onClick:()=>y(e),children:[(0,W.jsx)(Ot,{className:`size-3`}),` Edit`]}),(0,W.jsxs)($,{variant:`ghost`,size:`sm`,className:`h-7 text-xs gap-1 text-destructive hover:text-destructive cursor-pointer`,onClick:()=>l(e.name),children:[(0,W.jsx)(Xt,{className:`size-3`}),` Delete`]})]})})]},e.name))}),(0,W.jsxs)(`div`,{className:`space-y-2 pt-1`,children:[(0,W.jsxs)($,{className:`w-full h-10 text-xs gap-1.5 cursor-pointer`,onClick:v,children:[(0,W.jsx)(Nt,{className:`size-3.5`}),` Add MCP Server`]}),(0,W.jsxs)($,{variant:`outline`,className:`w-full h-10 text-xs gap-1.5 cursor-pointer`,onClick:g,disabled:u,children:[(0,W.jsx)(ze,{className:`size-3.5`}),` `,u?`Importing...`:`Import from Claude Code`]}),f&&(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground text-center`,children:f})]}),(0,W.jsx)(Zh,{open:i,onClose:_,editServer:o})]})}function tg(e){let t=e.config;if(e.transport===`stdio`||!(`url`in t)){let e=t;return[e.command,...e.args??[]].join(` `)}return t.url??``}function ng(){let[e,t]=(0,H.useState)([]),[n,r]=(0,H.useState)(!0),[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)(null),g=(0,H.useCallback)(async()=>{try{t(await B.get(`/api/extensions`))}catch(e){console.error(`Failed to load extensions:`,e)}finally{r(!1)}},[]);(0,H.useEffect)(()=>{g()},[g]);let _=async()=>{let e=i.trim();if(e){s(!0);try{await B.post(`/api/extensions/install`,{name:e}),Cn.success(`Installed ${e}`),a(``),g()}catch(e){Cn.error(e.message||`Install failed`)}finally{s(!1)}}},v=async e=>{p(e.id);try{await B.patch(`/api/extensions/${e.id}`,{enabled:!e.enabled}),g()}catch(e){Cn.error(e.message||`Toggle failed`)}finally{p(null)}},y=async e=>{h(e);try{await B.del(`/api/extensions/${e}`),Cn.success(`Removed ${e}`),g()}catch(e){Cn.error(e.message||`Remove failed`)}finally{h(null)}};return n?(0,W.jsx)(`div`,{className:`flex items-center justify-center py-8`,children:(0,W.jsx)(V,{className:`size-4 animate-spin text-muted-foreground`})}):(0,W.jsxs)(`div`,{className:`space-y-4`,children:[(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Install Extension`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&_()},placeholder:`npm package name (e.g. @ppm/ext-database)`,className:`h-8 text-xs flex-1`}),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs px-3 gap-1 cursor-pointer`,disabled:!i.trim()||o,onClick:_,children:[o?(0,W.jsx)(V,{className:`size-3 animate-spin`}):(0,W.jsx)(Nt,{className:`size-3`}),`Install`]})]}),(0,W.jsx)(`button`,{onClick:()=>d(!u),className:`text-[11px] text-muted-foreground hover:text-foreground transition-colors cursor-pointer`,children:u?`Hide`:`Dev link local extension...`}),u&&(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{value:c,onChange:e=>l(e.target.value),placeholder:`Local path (e.g. ./packages/ext-database)`,className:`h-8 text-xs flex-1`}),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs px-3 gap-1 cursor-pointer`,disabled:!c.trim(),onClick:async()=>{try{await B.post(`/api/extensions/dev-link`,{path:c.trim()}),Cn.success(`Dev-linked successfully`),l(``),g()}catch(e){Cn.error(e.message||`Dev link failed`)}},children:[(0,W.jsx)(Qe,{className:`size-3`}),`Link`]})]})]}),(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsxs)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:[`Installed (`,e.length,`)`]}),e.length===0?(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground py-4 text-center`,children:`No extensions installed`}):(0,W.jsx)(`div`,{className:`space-y-1`,children:e.map(e=>(0,W.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-2 rounded-lg bg-muted/50 hover:bg-muted transition-colors`,children:[(0,W.jsx)(`div`,{className:`size-8 rounded-md bg-background flex items-center justify-center shrink-0`,children:(0,W.jsx)(It,{className:`size-4 text-muted-foreground`})}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsx)(`p`,{className:`text-xs font-medium truncate`,children:e.displayName||e.id}),(0,W.jsxs)(`p`,{className:`text-[11px] text-muted-foreground truncate`,children:[e.id,` v`,e.version,e.activated&&(0,W.jsx)(`span`,{className:`ml-1 text-green-500`,children:`active`})]})]}),(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer`,title:e.enabled?`Disable`:`Enable`,disabled:f===e.id,onClick:()=>v(e),children:f===e.id?(0,W.jsx)(V,{className:`size-3.5 animate-spin`}):e.enabled?(0,W.jsx)(Ft,{className:`size-3.5 text-green-500`}):(0,W.jsx)(Pt,{className:`size-3.5 text-muted-foreground`})}),(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0 cursor-pointer text-destructive hover:text-destructive`,title:`Remove`,disabled:m===e.id,onClick:()=>y(e.id),children:m===e.id?(0,W.jsx)(V,{className:`size-3.5 animate-spin`}):(0,W.jsx)(Xt,{className:`size-3.5`})})]},e.id))})]})]})}function rg(){let[e,t]=(0,H.useState)(null),[n,r]=(0,H.useState)(!1),[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(``),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(``),[g,_]=(0,H.useState)(!0),[v,y]=(0,H.useState)(!1),[b,x]=(0,H.useState)(2e3),[S,C]=(0,H.useState)([]),[w,T]=(0,H.useState)(``),[E,D]=(0,H.useState)(!1),[O,k]=(0,H.useState)(!1),[A,j]=(0,H.useState)([]),[ee,te]=(0,H.useState)(`_global`),[M,N]=(0,H.useState)([]),P=(0,H.useRef)(void 0),F=(0,H.useCallback)(async()=>{try{C(await B.get(`/api/settings/clawbot/paired`))}catch{}},[]),ne=(0,H.useCallback)(async(e=ee)=>{try{j(await B.get(`/api/settings/clawbot/memories?project=${encodeURIComponent(e)}`))}catch{}},[ee]),I=(0,H.useCallback)(async()=>{try{N(await B.get(`/api/settings/clawbot/tasks?limit=20`))}catch{}},[]),re=async e=>{try{await B.del(`/api/settings/clawbot/memories/${e}`),j(t=>t.filter(t=>t.id!==e))}catch{}};(0,H.useEffect)(()=>(B.get(`/api/settings/clawbot`).then(e=>{t(e),p(e.enabled),h(e.system_prompt),_(e.show_tool_calls),y(e.show_thinking),x(e.debounce_ms)}).catch(()=>{}),B.get(`/api/settings/telegram`).then(e=>{l(!!e.bot_token)}).catch(()=>{}),F(),ne(`_global`),I(),P.current=setInterval(I,1e4),()=>{P.current&&clearInterval(P.current)}),[F,ne,I]);let L=async()=>{if(o.trim()){d(!0),a(null);try{await B.put(`/api/settings/telegram`,{bot_token:o}),l(!0),s(``),a({type:`ok`,msg:`Bot token saved`})}catch(e){a({type:`err`,msg:e.message})}finally{d(!1)}}},R=async()=>{r(!0),a(null);try{let e={enabled:f,system_prompt:m,show_tool_calls:g,show_thinking:v,debounce_ms:b};t(await B.put(`/api/settings/clawbot`,e)),a({type:`ok`,msg:f?`Saved — bot started`:`Saved — bot stopped`})}catch(e){a({type:`err`,msg:e.message})}finally{r(!1)}},ie=async()=>{if(w.trim()){D(!0);try{await B.post(`/api/settings/clawbot/paired/approve`,{code:w.trim().toUpperCase()}),T(``),await F(),a({type:`ok`,msg:`Device approved`})}catch(e){a({type:`err`,msg:e.message})}finally{D(!1)}}},ae=async e=>{try{await B.del(`/api/settings/clawbot/paired/${e}`),await F(),a({type:`ok`,msg:`Device revoked`})}catch(e){a({type:`err`,msg:e.message})}},z=async()=>{k(!0),a(null);try{await B.post(`/api/settings/telegram/test`,{}),a({type:`ok`,msg:`Test notification sent to all paired devices!`})}catch(e){a({type:`err`,msg:e.message})}finally{k(!1)}};if(!e)return(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading...`});let oe=S.filter(e=>e.status===`approved`).length,se={pending:`⏳`,running:`🔄`,completed:`✅`,failed:`❌`,timeout:`⏱`},ce={running:`text-blue-500`,completed:`text-green-500`,failed:`text-destructive`,timeout:`text-yellow-500`};return(0,W.jsxs)(`div`,{className:`space-y-4`,children:[(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{className:`text-[11px] text-muted-foreground`,children:`Telegram Bot Token`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{type:`password`,placeholder:c?`•••••• (saved)`:`123456:ABC-DEF...`,value:o,onChange:e=>s(e.target.value),className:`h-7 text-xs flex-1`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs shrink-0 cursor-pointer`,disabled:u||!o.trim(),onClick:L,children:u?`...`:`Save`})]}),(0,W.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[`Create a bot via `,(0,W.jsx)(`b`,{children:`@BotFather`}),` on Telegram. Used for both chat and notifications.`]})]}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Enable PPMBot`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`AI coordinator on Telegram — delegates tasks to your projects`})]}),(0,W.jsx)(Th,{checked:f,onCheckedChange:p})]}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Paired Devices`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Send any message to the bot on Telegram to get a pairing code. Enter it below to approve. Notifications are sent to all approved devices.`}),(0,W.jsxs)(`div`,{className:`flex gap-2`,children:[(0,W.jsx)(zm,{placeholder:`Enter pairing code (e.g. A3K7WR)`,value:w,onChange:e=>T(e.target.value.toUpperCase()),className:`h-8 text-xs font-mono tracking-wider uppercase`,maxLength:6}),(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs shrink-0 cursor-pointer`,disabled:E||w.length<6,onClick:ie,children:E?`...`:`Approve`})]}),S.length===0?(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground italic`,children:`No paired devices yet.`}):(0,W.jsx)(`div`,{className:`space-y-1`,children:S.map(e=>(0,W.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border p-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0`,children:[e.status===`approved`?(0,W.jsx)(Ae,{className:`size-3.5 text-green-500 shrink-0`}):(0,W.jsx)(Fe,{className:`size-3.5 text-yellow-500 shrink-0`}),(0,W.jsxs)(`div`,{className:`min-w-0`,children:[(0,W.jsx)(`p`,{className:`text-xs truncate`,children:e.display_name||`Chat ${e.telegram_chat_id}`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:e.status===`pending`&&e.pairing_code?`Code: ${e.pairing_code}`:e.status})]})]}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0 text-destructive hover:text-destructive cursor-pointer`,onClick:()=>ae(e.telegram_chat_id),children:(0,W.jsx)(Xt,{className:`size-3.5`})})]},e.id))}),c&&oe>0&&(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs gap-1 w-full cursor-pointer`,disabled:O,onClick:z,children:[(0,W.jsx)(Ht,{className:`size-3`}),O?`Sending...`:`Test Notification`]})]}),(0,W.jsx)(_h,{}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Delegated Tasks`}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 cursor-pointer`,onClick:I,children:(0,W.jsx)(Lt,{className:`size-3`})})]}),M.length===0?(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground italic`,children:`No delegated tasks yet. The coordinator will create tasks when you ask it to work on a project.`}):(0,W.jsx)(`div`,{className:`space-y-1 max-h-[200px] overflow-y-auto`,children:M.map(e=>{let t=e.completed_at?`${Math.round((e.completed_at-e.created_at)/60)}m`:`${Math.round((Date.now()/1e3-e.created_at)/60)}m`;return(0,W.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border p-2 text-[11px]`,children:[(0,W.jsx)(`span`,{className:ce[e.status]??``,children:se[e.status]??`?`}),(0,W.jsx)(`span`,{className:`font-medium shrink-0`,children:e.project_name}),(0,W.jsx)(`span`,{className:`truncate text-muted-foreground flex-1`,children:e.prompt.slice(0,60)}),(0,W.jsx)(`span`,{className:`text-[10px] text-muted-foreground shrink-0`,children:t})]},e.id)})})]}),(0,W.jsx)(_h,{}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,W.jsx)(Ce,{className:`size-3.5 text-muted-foreground`}),(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Memory & Identity`})]}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 cursor-pointer`,onClick:()=>ne(ee),children:(0,W.jsx)(Lt,{className:`size-3`})})]}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Facts the bot remembers across sessions. Use /remember on Telegram to add, or delete here.`}),A.length===0?(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground italic`,children:`No memories stored yet. Send /start on Telegram and introduce yourself.`}):(0,W.jsx)(`div`,{className:`space-y-1 max-h-[200px] overflow-y-auto`,children:A.map(e=>(0,W.jsxs)(`div`,{className:`flex items-start justify-between rounded-md border p-2 gap-1`,children:[(0,W.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,W.jsx)(`p`,{className:`text-[11px] break-words`,children:e.content}),(0,W.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[e.category,` · `,e.project]})]}),(0,W.jsx)($,{variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 text-destructive hover:text-destructive cursor-pointer shrink-0`,onClick:()=>re(e.id),children:(0,W.jsx)(Xt,{className:`size-3`})})]},e.id))})]}),(0,W.jsx)(_h,{}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{className:`text-[11px] text-muted-foreground`,children:`Custom Instructions`}),(0,W.jsx)(`textarea`,{placeholder:`Additional instructions for the coordinator (optional)...`,value:m,onChange:e=>h(e.target.value),className:`flex w-full rounded-md border border-input bg-background px-3 py-2 text-xs min-h-[60px] resize-y ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,rows:3}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Extra instructions added to the coordinator identity. Leave empty to use defaults from coordinator.md.`})]}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`p`,{className:`text-xs`,children:`Show tool calls`}),(0,W.jsx)(Th,{checked:g,onCheckedChange:_})]}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsx)(`p`,{className:`text-xs`,children:`Show thinking`}),(0,W.jsx)(Th,{checked:v,onCheckedChange:y})]})]}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{className:`text-[11px] text-muted-foreground`,children:`Debounce (ms)`}),(0,W.jsx)(zm,{type:`number`,min:0,max:3e4,step:500,value:b,onChange:e=>x(Number(e.target.value)),className:`h-7 text-xs w-24`}),(0,W.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Merge rapid messages within this window. 0 = no debounce.`})]}),(0,W.jsx)($,{variant:`default`,size:`sm`,className:`h-8 text-xs w-full cursor-pointer`,disabled:n,onClick:R,children:n?`Saving...`:`Save`}),i&&(0,W.jsx)(`p`,{className:`text-[11px] ${i.type===`ok`?`text-green-600 dark:text-green-400`:`text-destructive`}`,children:i.msg})]})}function ig(){let[e,t]=(0,H.useState)(!1),[n,r]=(0,H.useState)(``),[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),m=i.length>0&&n!==i,h=n.trim().length>=4&&n===i&&!c,g=(0,H.useCallback)(async()=>{if(h){l(!0),p(null);try{let{token:e}=await B.put(`/api/settings/auth/password`,{password:n.trim(),confirm:i.trim()});ae(e),d(!0),r(``),a(``),setTimeout(()=>{d(!1),t(!1)},1500)}catch(e){p(e instanceof Error?e.message:`Failed to change password`)}finally{l(!1)}}},[h,n,i]);return e?(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Change Password`}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(zm,{type:o?`text`:`password`,placeholder:`New password`,value:n,onChange:e=>r(e.target.value),className:`h-8 text-xs pr-8`,autoFocus:!0}),(0,W.jsx)(`button`,{type:`button`,className:`absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground cursor-pointer`,onClick:()=>s(!o),tabIndex:-1,children:o?(0,W.jsx)(He,{className:`size-3.5`}):(0,W.jsx)(Ue,{className:`size-3.5`})})]}),(0,W.jsx)(zm,{type:o?`text`:`password`,placeholder:`Confirm password`,value:i,onChange:e=>a(e.target.value),onKeyDown:e=>{e.key===`Enter`&&g()},className:`h-8 text-xs`}),m&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Passwords do not match`}),f&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:f}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs flex-1 cursor-pointer`,onClick:()=>{t(!1),r(``),a(``),p(null)},children:`Cancel`}),(0,W.jsx)($,{variant:u?`default`:`outline`,size:`sm`,className:`h-8 text-xs flex-1 cursor-pointer`,disabled:!h,onClick:g,children:c?`...`:u?(0,W.jsx)(Ee,{className:`size-3.5`}):`Save`})]}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Min 4 characters. You'll stay logged in on this device.`})]})]}):(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Security`}),(0,W.jsxs)($,{variant:`outline`,size:`sm`,className:`h-8 text-xs gap-1.5 cursor-pointer`,onClick:()=>t(!0),children:[(0,W.jsx)(ct,{className:`size-3.5`}),`Change Password`]})]})}function ag(e){let t=(e+`=`.repeat((4-e.length%4)%4)).replace(/-/g,`+`).replace(/_/g,`/`),n=atob(t);return Uint8Array.from(n,e=>e.charCodeAt(0))}function og(){let[e,t]=(0,H.useState)(`default`),[n,r]=(0,H.useState)(!1),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(null);return(0,H.useEffect)(()=>{`Notification`in window&&t(Notification.permission),r(localStorage.getItem(`ppm-push-subscribed`)===`true`)},[]),{permission:e,isSubscribed:n,loading:i,error:o,subscribe:(0,H.useCallback)(async()=>{a(!0),s(null);try{let e=await Notification.requestPermission();if(t(e),e!==`granted`){s(`Permission denied`);return}if(!navigator.serviceWorker?.controller&&!navigator.serviceWorker?.ready){s(`Service worker not available (dev mode?)`);return}let n=await Promise.race([navigator.serviceWorker.ready,new Promise((e,t)=>setTimeout(()=>t(Error(`Service worker timeout`)),5e3))]);if(!n)throw Error(`Service worker not ready`);let i={},a=oe();a&&(i.Authorization=`Bearer ${a}`);let o=await(await fetch(`/api/push/vapid-key`,{headers:i})).json();if(!o.ok)throw Error(o.error||`Failed to get VAPID key`);let c=await n.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:ag(o.data.publicKey).buffer});await fetch(`/api/push/subscribe`,{method:`POST`,headers:{...i,"Content-Type":`application/json`},body:JSON.stringify(c.toJSON())}),r(!0),localStorage.setItem(`ppm-push-subscribed`,`true`)}catch(e){s(e instanceof Error?e.message:`Subscribe failed`),console.error(`[push] Subscribe failed:`,e)}finally{a(!1)}},[]),unsubscribe:(0,H.useCallback)(async()=>{a(!0);try{let e=await(await navigator.serviceWorker.ready).pushManager.getSubscription();if(e){let t={"Content-Type":`application/json`},n=oe();n&&(t.Authorization=`Bearer ${n}`),await fetch(`/api/push/subscribe`,{method:`DELETE`,headers:t,body:JSON.stringify({endpoint:e.endpoint})}),await e.unsubscribe()}r(!1),localStorage.removeItem(`ppm-push-subscribed`)}catch(e){console.error(`[push] Unsubscribe failed:`,e)}finally{a(!1)}},[])}}var sg=[{value:`light`,label:`Light`,icon:Jt},{value:`dark`,label:`Dark`,icon:St},{value:`system`,label:`System`,icon:xt}],cg=`PushManager`in window&&`serviceWorker`in navigator,lg=/iPhone|iPad/.test(navigator.userAgent)&&!window.matchMedia(`(display-mode: standalone)`).matches,ug=[{value:`ai`,label:`AI Provider`,subtitle:`Model, execution mode, limits`,icon:Se},{value:`notifications`,label:`Notifications`,subtitle:`Push & Telegram alerts`,icon:be},{value:`clawbot`,label:`PPMBot`,subtitle:`Telegram AI bot`,icon:Se},{value:`proxy`,label:`API Proxy`,subtitle:`Expose accounts as Anthropic API`,icon:rt},{value:`shortcuts`,label:`Keyboard Shortcuts`,subtitle:`Customize key bindings`,icon:ut},{value:`mcp`,label:`MCP Servers`,subtitle:`Model Context Protocol tools`,icon:Mt},{value:`extensions`,label:`Extensions`,subtitle:`Install and manage extensions`,icon:It}];function dg(){let{theme:e,setTheme:t,deviceName:n,setDeviceName:r,version:i}=U(),{permission:a,isSubscribed:o,loading:c,error:l,subscribe:u,unsubscribe:d}=og(),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)(n??``),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(!1),b=(0,H.useRef)(void 0),x=m.trim()!==(n??``),S=(0,H.useCallback)(async()=>{if(x){_(!0);try{await r(m),y(!0),clearTimeout(b.current),b.current=setTimeout(()=>y(!1),2e3)}finally{_(!1)}}},[m,x,r]);if(f){let e=ug.find(e=>e.value===f),t=e.icon;return(0,W.jsxs)(`div`,{className:`h-full w-full flex flex-col`,children:[(0,W.jsxs)(`div`,{className:`shrink-0 px-2 pt-3 pb-1 flex items-center gap-1`,children:[(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-8 cursor-pointer shrink-0`,onClick:()=>p(null),children:(0,W.jsx)(ge,{className:`size-4`})}),(0,W.jsx)(t,{className:`size-4 text-muted-foreground shrink-0`}),(0,W.jsx)(`h2`,{className:`text-sm font-semibold truncate`,children:e.label})]}),(0,W.jsx)(_h,{}),(0,W.jsx)(bm,{className:`flex-1 min-h-0`,children:(0,W.jsxs)(`div`,{className:`p-3`,children:[f===`ai`&&(0,W.jsx)(Mh,{compact:!0}),f===`notifications`&&(0,W.jsx)(fg,{isSubscribed:o,loading:c,permission:a,pushError:l,subscribe:u,unsubscribe:d}),f===`clawbot`&&(0,W.jsx)(rg,{}),f===`proxy`&&(0,W.jsx)(Hh,{}),f===`shortcuts`&&(0,W.jsx)(Lh,{}),f===`mcp`&&(0,W.jsx)(eg,{}),f===`extensions`&&(0,W.jsx)(ng,{})]})})]})}return(0,W.jsxs)(`div`,{className:`h-full w-full flex flex-col`,children:[(0,W.jsx)(`div`,{className:`shrink-0 px-3 pt-3 pb-1`,children:(0,W.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Settings`})}),(0,W.jsx)(bm,{className:`flex-1 min-h-0`,children:(0,W.jsxs)(`div`,{className:`p-3 space-y-4`,children:[(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Device Name`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,W.jsx)(zm,{value:m,onChange:e=>h(e.target.value),onKeyDown:e=>{e.key===`Enter`&&S()},placeholder:`My Device`,className:`h-8 text-xs flex-1`,maxLength:100}),(0,W.jsx)($,{variant:v?`default`:`outline`,size:`sm`,className:`h-8 text-xs px-3 cursor-pointer`,disabled:!x||g,onClick:S,children:g?`...`:v?(0,W.jsx)(Ee,{className:`size-3.5`}):`Save`})]}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Shown in page title and synced to PPM Cloud.`})]}),(0,W.jsx)(ig,{}),(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Theme`}),(0,W.jsx)(`div`,{className:`flex gap-1.5`,children:sg.map(n=>{let r=n.icon;return(0,W.jsxs)($,{variant:e===n.value?`default`:`outline`,size:`sm`,onClick:()=>t(n.value),className:L(`flex-1 gap-1.5 text-xs h-8 cursor-pointer`,e===n.value&&`ring-2 ring-primary`),children:[(0,W.jsx)(r,{className:`size-3.5`}),n.label]},n.value)})})]}),(0,W.jsx)(_h,{}),(0,W.jsx)(`nav`,{className:`space-y-1`,"aria-label":`Settings categories`,children:ug.map(e=>{let t=e.icon;return(0,W.jsxs)(`button`,{onClick:()=>p(e.value),className:`w-full flex items-center gap-3 px-2.5 py-2.5 rounded-lg hover:bg-accent/50 active:bg-accent transition-colors cursor-pointer text-left group`,children:[(0,W.jsx)(`div`,{className:`size-8 rounded-md bg-muted flex items-center justify-center shrink-0 group-hover:bg-accent`,children:(0,W.jsx)(t,{className:`size-4 text-muted-foreground`})}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsx)(`p`,{className:`text-xs font-medium text-foreground truncate`,children:e.label}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground truncate`,children:e.subtitle})]}),(0,W.jsx)(s,{className:`size-4 text-muted-foreground shrink-0`})]},e.value)})}),(0,W.jsx)(_h,{}),(0,W.jsxs)(`section`,{className:`space-y-1 pb-2`,children:[(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`PPM — Personal Project Manager`}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`A mobile-first web IDE for managing your projects.`}),i&&(0,W.jsxs)(`p`,{className:`text-[11px] text-muted-foreground tabular-nums`,children:[`Version `,i]})]})]})})]})}function fg({isSubscribed:e,loading:t,permission:n,pushError:r,subscribe:i,unsubscribe:a}){return(0,W.jsxs)(`div`,{className:`space-y-4`,children:[(0,W.jsxs)(`section`,{className:`space-y-2`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Push Notifications`}),cg?(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[e?(0,W.jsx)(xe,{className:`size-3.5`}):(0,W.jsx)(ye,{className:`size-3.5`}),(0,W.jsx)(`span`,{className:`text-xs`,children:`Push notifications`})]}),(0,W.jsx)($,{variant:e?`default`:`outline`,size:`sm`,className:`h-7 text-xs cursor-pointer`,disabled:t||n===`denied`,onClick:()=>e?a():i(),children:t?`...`:e?`On`:`Off`})]}),e&&(0,W.jsx)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs w-full cursor-pointer`,onClick:()=>{new Notification(`PPM Test`,{body:`Push notifications are working!`})},children:`Test notification`}),r&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:r}),n===`denied`&&(0,W.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Notifications blocked. Enable in browser settings.`}),lg&&(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`On iOS, install PPM to Home Screen for push notifications.`})]}):(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Push notifications not supported in this browser.`})]}),(0,W.jsx)(_h,{}),(0,W.jsxs)(`section`,{className:`space-y-1`,children:[(0,W.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Telegram`}),(0,W.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Telegram notifications are sent to all approved devices in PPMBot settings. Configure your bot token and pair devices there.`})]})]})}function pg({connections:e,cachedTables:t,onOpenTable:n,onRefreshTables:r,onEdit:i,onDelete:o,onFetchColumns:c,columnCache:l}){let[u,d]=(0,H.useState)(new Set),[f,p]=(0,H.useState)(new Set([`__ungrouped__`])),[m,h]=(0,H.useState)(new Set),[g,_]=(0,H.useState)(new Set),[v,y]=(0,H.useState)(new Map),[b,x]=(0,H.useState)(new Set),S=e=>{d(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},C=e=>{p(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},w=async(e,t,n)=>{let r=`${e}:${n}.${t}`;if(m.has(r)){h(e=>{let t=new Set(e);return t.delete(r),t});return}if(h(e=>new Set(e).add(r)),c&&!l?.has(r)){x(e=>new Set(e).add(r));try{await c(e,t,n)}catch{}x(e=>{let t=new Set(e);return t.delete(r),t})}},T=async e=>{_(t=>new Set(t).add(e));try{await r(e)}finally{_(t=>{let n=new Set(t);return n.delete(e),n})}},E={};for(let t of e){let e=t.group_name??`__ungrouped__`;(E[e]??=[]).push(t)}let D=Object.keys(E).sort((e,t)=>e===`__ungrouped__`?1:t===`__ungrouped__`?-1:e.localeCompare(t)),O=(0,H.useMemo)(()=>{let n=new Map;for(let r of e){let e=t.get(r.id)??[],i=new Map;for(let t of e){let e=t.schemaName;(i.get(e)??i.set(e,[]).get(e)).push(t)}n.set(r.id,i)}return n},[e,t]);return e.length===0?(0,W.jsxs)(`p`,{className:`px-4 py-6 text-xs text-text-subtle text-center`,children:[`No connections yet.`,(0,W.jsx)(`br`,{}),`Click + to add one.`]}):(0,W.jsx)(`div`,{className:`py-1`,children:D.map(e=>{let r=f.has(e),c=e===`__ungrouped__`?`Ungrouped`:e,d=E[e],p=D.length>1||e!==`__ungrouped__`;return(0,W.jsxs)(`div`,{children:[p&&(0,W.jsxs)(`button`,{onClick:()=>C(e),className:`w-full flex items-center gap-1 px-2 py-1 text-[10px] font-semibold text-text-subtle uppercase tracking-wider hover:text-text-secondary transition-colors`,children:[r?(0,W.jsx)(a,{className:`size-3`}):(0,W.jsx)(s,{className:`size-3`}),c]}),r&&(0,W.jsx)(`div`,{className:p?`ml-[11px] border-l border-dashed border-border`:``,children:d.map(e=>{let r=u.has(e.id),c=t.get(e.id)??[],d=g.has(e.id),f=O.get(e.id)??new Map,h=f.size<=1,_=v.get(e.id)??``;return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`div`,{className:L(`group flex items-center gap-1 py-1 hover:bg-surface-elevated transition-colors`,p?`pl-3 pr-2`:`px-2`),children:[(0,W.jsx)(`button`,{onClick:()=>{S(e.id),!u.has(e.id)&&c.length===0&&T(e.id)},className:`shrink-0 text-text-subtle hover:text-foreground transition-colors`,children:r?(0,W.jsx)(a,{className:`size-3`}):(0,W.jsx)(s,{className:`size-3`})}),(0,W.jsx)(`span`,{className:`shrink-0 size-2 rounded-full border border-border`,style:{backgroundColor:e.color??`transparent`}}),(0,W.jsx)(`button`,{className:`flex-1 text-left text-xs truncate hover:text-primary transition-colors`,onClick:()=>{S(e.id),!u.has(e.id)&&c.length===0&&T(e.id)},children:e.name}),(0,W.jsx)(`span`,{className:`shrink-0 text-[9px] text-text-subtle uppercase px-1 rounded bg-surface-elevated`,children:e.type===`postgres`?`PG`:`DB`}),e.readonly===1&&(0,W.jsx)(`span`,{title:`Readonly`,children:(0,W.jsx)(ht,{className:`shrink-0 size-2.5 text-text-subtle`})}),(0,W.jsxs)(`div`,{className:`flex can-hover:hidden can-hover:group-hover:flex items-center gap-0.5 shrink-0`,children:[(0,W.jsx)(`button`,{onClick:()=>T(e.id),disabled:d,className:`p-0.5 text-text-subtle hover:text-foreground transition-colors`,title:`Refresh tables`,children:(0,W.jsx)(Lt,{className:L(`size-3`,d&&`animate-spin`)})}),(0,W.jsx)(`button`,{onClick:()=>i(e),className:`p-0.5 text-text-subtle hover:text-foreground transition-colors`,title:`Edit`,children:(0,W.jsx)(Ot,{className:`size-3`})}),(0,W.jsx)(`button`,{onClick:()=>o(e.id),className:`p-0.5 text-text-subtle hover:text-red-500 transition-colors`,title:`Delete`,children:(0,W.jsx)(Xt,{className:`size-3`})})]})]}),r&&(0,W.jsxs)(`div`,{className:`ml-[11px] border-l border-dashed border-border pl-1`,children:[d&&c.length===0&&(0,W.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`Loading…`}),!d&&c.length===0&&(0,W.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`No tables cached`}),c.length>0&&(0,W.jsxs)(W.Fragment,{children:[c.length>5&&(0,W.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-0.5`,children:[(0,W.jsx)(Vt,{className:`size-2.5 text-text-subtle shrink-0`}),(0,W.jsx)(`input`,{type:`text`,value:_,onChange:t=>y(n=>new Map(n).set(e.id,t.target.value)),placeholder:`Filter tables…`,className:`w-full text-[10px] bg-transparent border-none outline-none text-foreground placeholder:text-text-subtle`})]}),(0,W.jsx)(mg,{connId:e.id,connType:e.type,schemas:f,isSingleSchema:h,filter:_,expandedTables:m,loadingColumns:b,columnCache:l,onToggleTable:w,onOpenTable:(t,r)=>n(e,t,r)})]})]})]},e.id)})})]},e)})})}function mg({connId:e,connType:t,schemas:n,isSingleSchema:r,filter:i,expandedTables:o,loadingColumns:c,columnCache:l,onToggleTable:u,onOpenTable:d}){let f=i.toLowerCase();return(0,W.jsxs)(`div`,{className:`overflow-y-auto`,style:{maxHeight:300},children:[Array.from(n.entries()).map(([t,n])=>{let i=f?n.filter(e=>e.tableName.toLowerCase().includes(f)):n;return i.length===0?null:(0,W.jsxs)(`div`,{children:[!r&&(0,W.jsx)(`p`,{className:`px-2 py-0.5 text-[9px] font-semibold text-text-subtle uppercase tracking-wider`,children:t}),i.map(t=>{let n=`${e}:${t.schemaName}.${t.tableName}`,r=o.has(n),i=c.has(n),f=l?.get(n);return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1 pl-2 pr-2 py-0.5 hover:bg-surface-elevated transition-colors group/table`,children:[(0,W.jsx)(`button`,{onClick:()=>u(e,t.tableName,t.schemaName),className:`shrink-0 text-text-subtle hover:text-foreground transition-colors`,children:r?(0,W.jsx)(a,{className:`size-2.5`}):(0,W.jsx)(s,{className:`size-2.5`})}),(0,W.jsx)(Re,{className:`size-2.5 shrink-0 text-text-subtle`}),(0,W.jsx)(`button`,{onClick:()=>d(t.tableName,t.schemaName),className:`flex-1 text-left text-[11px] text-text-secondary hover:text-foreground transition-colors truncate`,children:t.tableName}),(0,W.jsx)(`span`,{className:`text-[9px] text-text-subtle`,children:t.rowCount})]}),r&&(0,W.jsxs)(`div`,{className:`ml-[18px] border-l border-dotted border-border pl-2`,children:[i&&(0,W.jsx)(`p`,{className:`text-[9px] text-text-subtle px-1 py-0.5`,children:`Loading…`}),f&&f.map(e=>(0,W.jsxs)(`div`,{className:`flex items-center gap-1 px-1 py-px text-[10px] text-text-subtle`,title:e.fk?`FK → ${e.fk.table}.${e.fk.column}`:void 0,children:[e.pk&&(0,W.jsx)(lt,{className:`size-2.5 text-amber-500 shrink-0`}),e.fk&&(0,W.jsx)(ft,{className:`size-2.5 text-blue-400 shrink-0`}),!e.pk&&!e.fk&&(0,W.jsx)(`span`,{className:`size-2.5 shrink-0`}),(0,W.jsxs)(`span`,{className:`truncate`,children:[e.name,e.nullable?`?`:``]}),(0,W.jsx)(`span`,{className:`ml-auto text-[9px] text-text-subtle/60 shrink-0`,children:e.type})]},e.name)),!i&&!f&&(0,W.jsx)(`p`,{className:`text-[9px] text-text-subtle px-1 py-0.5`,children:`No columns`})]})]},n)})]},t)}),i&&Array.from(n.values()).every(e=>!e.some(e=>e.tableName.toLowerCase().includes(f)))&&(0,W.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`No match`})]})}var hg=`ppm-recent-paths`,gg=5,_g=[{name:`Home`,path:`~`,icon:ot},{name:`Desktop`,path:`~/Desktop`,icon:xt},{name:`Documents`,path:`~/Documents`,icon:qe},{name:`Downloads`,path:`~/Downloads`,icon:ze}];function vg(){try{return JSON.parse(localStorage.getItem(hg)??`[]`)}catch{return[]}}function yg(e){let t=[e,...vg().filter(t=>t!==e)].slice(0,gg);localStorage.setItem(hg,JSON.stringify(t))}function bg(e){return e==null?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function xg(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4);if(n<1)return`now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Sg(e){if(e.type===`directory`)return(0,W.jsx)(et,{className:`size-4 text-blue-500`});let t=e.name.split(`.`).pop()?.toLowerCase();return t&&[`db`,`sqlite`,`sqlite3`].includes(t)?(0,W.jsx)(Re,{className:`size-4 text-amber-500`}):(0,W.jsx)(Ye,{className:`size-4 text-text-subtle`})}function Cg(e,t){if(!t?.length)return!0;let n=`.`+e.split(`.`).pop()?.toLowerCase();return t.includes(n)}function wg({open:e,mode:t,accept:n,root:r,title:i,onSelect:a,onCancel:o}){let[c,l]=(0,H.useState)([]),[u,d]=(0,H.useState)(``),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)([]),[g,_]=(0,H.useState)(null),[v,y]=(0,H.useState)(!1),[b,x]=(0,H.useState)(null),[S,C]=(0,H.useState)(``),[w,T]=(0,H.useState)(``),[E,D]=(0,H.useState)(!1),[O,k]=(0,H.useState)([]),A=(0,H.useRef)(null),j=typeof window<`u`&&window.innerWidth<768,ee=t===`folder`?`Select Folder`:t===`file`?`Select File`:`Select File or Folder`,te=(0,H.useCallback)(async(e,t)=>{y(!0),x(null),_(null),C(``);try{let n=new URLSearchParams;e&&n.set(`path`,e),t&&n.set(`showHidden`,`true`);let r=await B.get(`/api/fs/browse?${n}`);l(r.entries),d(r.current),p(r.parent),h(r.breadcrumbs),T(r.current)}catch(e){x(e.message||`Failed to browse directory`)}finally{y(!1)}},[]);(0,H.useEffect)(()=>{e&&(te(r??`~`,E),k(vg()))},[e,r,te,E]);let M=e=>te(e,E),N=()=>{let e=!E;D(e),te(u||(r??`~`),e)},P=e=>{e.key===`Enter`&&w.trim()&&te(w.trim())},F=e=>{e.type===`directory`?t===`file`?M(e.path):_(e.path):t!==`folder`&&_(e.path)},ne=e=>{e.type===`directory`&&M(e.path)},I=()=>{g&&(yg(u),a(g))},re=c.filter(e=>!(S&&!e.name.toLowerCase().includes(S.toLowerCase())||e.type===`file`&&n?.length&&!Cg(e.name,n))),R=e=>e.type===`directory`?t!==`file`:t!==`folder`,ie=(0,W.jsxs)(`div`,{className:`flex flex-col flex-1 min-h-0`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 px-3 py-2 border-b border-border`,children:[f&&(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0`,onClick:()=>M(f),children:(0,W.jsx)(ge,{className:`size-4`})}),(0,W.jsx)(zm,{value:w,onChange:e=>T(e.target.value),onKeyDown:P,placeholder:`Type path and press Enter`,className:`h-7 text-xs font-mono flex-1`})]}),(0,W.jsx)(`div`,{className:`flex items-center gap-0.5 px-3 py-1.5 border-b border-border overflow-x-auto text-xs`,children:m.map((e,t)=>(0,W.jsxs)(`span`,{className:`flex items-center shrink-0`,children:[t>0&&(0,W.jsx)(s,{className:`size-3 text-text-subtle mx-0.5`}),(0,W.jsx)(`button`,{type:`button`,onClick:()=>M(e.path),className:`hover:text-primary hover:underline text-text-secondary`,children:e.name})]},e.path))}),(0,W.jsxs)(`div`,{className:`flex flex-1 min-h-0 overflow-hidden`,children:[!j&&(0,W.jsxs)(`div`,{className:`w-36 border-r border-border py-2 px-1 shrink-0 overflow-y-auto`,children:[_g.map(e=>(0,W.jsxs)(`button`,{type:`button`,onClick:()=>M(e.path),className:L(`flex items-center gap-2 w-full px-2 py-1 text-xs rounded-md hover:bg-surface-hover text-left`,u.endsWith(e.name)&&`bg-primary/10 text-primary`),children:[(0,W.jsx)(e.icon,{className:`size-3.5`}),e.name]},e.path)),O.length>0&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`text-[10px] text-text-subtle px-2 mt-3 mb-1 font-medium`,children:`Recent`}),O.map(e=>(0,W.jsxs)(`button`,{type:`button`,onClick:()=>M(e),className:`flex items-center gap-2 w-full px-2 py-1 text-xs rounded-md hover:bg-surface-hover text-left truncate`,children:[(0,W.jsx)(Fe,{className:`size-3 shrink-0`}),(0,W.jsx)(`span`,{className:`truncate`,children:e.split(`/`).pop()})]},e))]})]}),(0,W.jsx)(bm,{className:`flex-1 min-h-0`,children:v?(0,W.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,W.jsx)(V,{className:`size-5 animate-spin text-text-subtle`})}):b?(0,W.jsx)(`div`,{className:`text-center py-8 text-xs text-red-500`,children:b}):re.length===0?(0,W.jsx)(`div`,{className:`text-center py-8 text-xs text-text-subtle`,children:S?`No matching entries`:`Empty directory`}):(0,W.jsx)(`div`,{ref:A,className:`py-1`,children:re.map(e=>{let t=R(e);return(0,W.jsxs)(`button`,{type:`button`,onClick:()=>F(e),onDoubleClick:()=>ne(e),className:L(`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors`,g===e.path?`bg-primary/10 text-primary`:t?`hover:bg-surface-hover text-text-primary`:`opacity-40 cursor-default`),disabled:!t&&e.type===`file`,children:[Sg(e),(0,W.jsx)(`span`,{className:L(`flex-1 truncate`,e.type===`directory`&&`font-medium`),children:e.name}),(0,W.jsx)(`span`,{className:`text-text-subtle text-[10px] shrink-0 w-14 text-right`,children:bg(e.size)}),(0,W.jsx)(`span`,{className:`text-text-subtle text-[10px] shrink-0 w-14 text-right`,children:xg(e.modified)})]},e.path)})})})]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-t border-border shrink-0`,children:[(0,W.jsx)($,{variant:`ghost`,size:`icon`,className:L(`size-7 shrink-0`,E&&`text-primary`),onClick:N,title:E?`Hide hidden files`:`Show hidden files`,children:E?(0,W.jsx)(Ue,{className:`size-3.5`}):(0,W.jsx)(He,{className:`size-3.5`})}),n?.length?(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle bg-surface-hover px-1.5 py-0.5 rounded`,children:n.join(`, `)}):null,(0,W.jsx)(`div`,{className:`flex-1 max-w-48`,children:(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(Vt,{className:`absolute left-2 top-1/2 -translate-y-1/2 size-3 text-text-subtle`}),(0,W.jsx)(zm,{value:S,onChange:e=>C(e.target.value),placeholder:`Filter...`,className:`h-6 text-[11px] pl-6`})]})}),(0,W.jsx)(`div`,{className:`flex-1`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:o,className:`h-7 text-xs`,children:`Cancel`}),(0,W.jsx)($,{size:`sm`,onClick:I,disabled:!g,className:`h-7 text-xs`,children:`Select`})]})]});return(0,W.jsx)(Am,{open:e,onOpenChange:e=>{e||o()},children:(0,W.jsxs)(Pm,{className:L(`p-0 gap-0 overflow-hidden flex flex-col`,j?`max-w-[95vw] h-[85vh]`:`max-w-2xl h-[70vh]`),children:[(0,W.jsx)(Fm,{className:`px-3 py-2 border-b border-border`,children:(0,W.jsx)(Lm,{className:`text-sm`,children:i??ee})}),ie]})})}function Tg({mode:e,accept:t,root:n,title:r,onSelect:i,className:a}){let[o,s]=(0,H.useState)(!1);return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)($,{type:`button`,variant:`ghost`,size:`icon`,className:L(`size-8 shrink-0`,a),onClick:()=>s(!0),title:r??`Browse...`,children:(0,W.jsx)(Ze,{className:`size-4`})}),(0,W.jsx)(wg,{open:o,mode:e,accept:t,root:n,title:r,onSelect:e=>{i(e),s(!1)},onCancel:()=>s(!1)})]})}var Eg=[`#ef4444`,`#f97316`,`#eab308`,`#22c55e`,`#06b6d4`,`#3b82f6`,`#8b5cf6`,`#ec4899`,`#6b7280`,`#000000`];function Dg({value:e,onChange:t}){return(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,W.jsx)(`button`,{type:`button`,onClick:()=>t(null),className:L(`size-6 rounded-full border-2 transition-all`,e?`border-border hover:scale-105`:`border-primary scale-110`,`bg-transparent relative`),title:`No color`,children:(0,W.jsx)(`span`,{className:`absolute inset-0 flex items-center justify-center text-[8px] text-text-subtle`,children:`×`})}),Eg.map(n=>(0,W.jsx)(`button`,{type:`button`,onClick:()=>t(n),className:L(`size-6 rounded-full border-2 transition-all hover:scale-105`,e===n?`border-primary scale-110`:`border-transparent`),style:{backgroundColor:n},title:n},n))]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,W.jsx)(`div`,{className:`size-6 rounded-full border border-border shrink-0`,style:{backgroundColor:e??`transparent`}}),(0,W.jsx)(`input`,{type:`text`,value:e??``,onChange:e=>{let n=e.target.value.trim();if(n===``){t(null);return}/^#[0-9a-fA-F]{6}$/.test(n),t(n)},placeholder:`#3b82f6`,className:`flex-1 h-7 text-xs px-2 rounded-md border border-border bg-background focus:outline-none focus:border-primary font-mono`})]})]})}function Og({open:e,onClose:t,connection:n,onSave:r,onUpdate:i,onTest:a,onTestRaw:o}){let s=!!n,[c,l]=(0,H.useState)({name:``,type:`postgres`,path:``,connectionString:``,groupName:``,color:null,readonly:!0}),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),[m,h]=(0,H.useState)(!1),[g,_]=(0,H.useState)(null);(0,H.useEffect)(()=>{if(!e){p(null),_(null);return}l(n?{name:n.name,type:n.type,path:``,connectionString:``,groupName:n.group_name??``,color:n.color,readonly:n.readonly===1}:{name:``,type:`postgres`,path:``,connectionString:``,groupName:``,color:null,readonly:!0})},[e,n]);let v=(e,t)=>{l(n=>({...n,[e]:t})),p(null)};return(0,W.jsx)(Am,{open:e,onOpenChange:e=>{e||t()},children:(0,W.jsxs)(Pm,{className:`max-w-md`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:s?`Edit Connection`:`Add Connection`})}),(0,W.jsxs)(`div`,{className:`space-y-3 py-1`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Name *`}),(0,W.jsx)(`input`,{value:c.name,onChange:e=>v(`name`,e.target.value),placeholder:`my-database`,className:`w-full h-8 text-sm px-2.5 rounded-md border border-border bg-background focus:outline-none focus:border-primary`})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Type`}),(0,W.jsxs)(`select`,{value:c.type,onChange:e=>v(`type`,e.target.value),className:`w-full h-8 text-sm px-2 rounded-md border border-border bg-background focus:outline-none focus:border-primary`,children:[(0,W.jsx)(`option`,{value:`postgres`,children:`PostgreSQL`}),(0,W.jsx)(`option`,{value:`sqlite`,children:`SQLite`})]})]}),c.type===`postgres`?(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Connection String *`}),(0,W.jsx)(`input`,{type:`password`,value:c.connectionString,onChange:e=>v(`connectionString`,e.target.value),placeholder:`postgresql://user:pass@host:5432/db`,className:`w-full h-8 text-sm px-2.5 rounded-md border border-border bg-background focus:outline-none focus:border-primary font-mono`})]}):(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`File Path *`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,W.jsx)(`input`,{value:c.path,onChange:e=>v(`path`,e.target.value),placeholder:`/path/to/database.db`,className:`flex-1 h-8 text-sm px-2.5 rounded-md border border-border bg-background focus:outline-none focus:border-primary font-mono`}),(0,W.jsx)(Tg,{mode:`file`,accept:[`.db`,`.sqlite`,`.sqlite3`],title:`Browse for SQLite database`,onSelect:e=>v(`path`,e)})]})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Group`}),(0,W.jsx)(`input`,{value:c.groupName,onChange:e=>v(`groupName`,e.target.value),placeholder:`Production`,className:`w-full h-8 text-sm px-2.5 rounded-md border border-border bg-background focus:outline-none focus:border-primary`})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Tab Color`}),(0,W.jsx)(Dg,{value:c.color,onChange:e=>v(`color`,e)})]}),s&&(0,W.jsxs)(`div`,{className:`flex items-center justify-between py-1`,children:[(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`p`,{className:`text-xs font-medium`,children:`Readonly`}),(0,W.jsx)(`p`,{className:`text-[10px] text-text-subtle`,children:`Block non-SELECT queries (AI protection)`})]}),(0,W.jsx)(`button`,{type:`button`,onClick:()=>v(`readonly`,!c.readonly),className:`relative w-9 h-5 rounded-full transition-colors ${c.readonly?`bg-primary`:`bg-border`}`,children:(0,W.jsx)(`span`,{className:`absolute top-0.5 left-0.5 size-4 rounded-full bg-white transition-transform ${c.readonly?`translate-x-4`:``}`})})]}),f&&(0,W.jsx)(`p`,{className:`text-xs ${f.ok?`text-green-500`:`text-red-500`}`,children:f.ok?`✓ Connection successful`:`✗ ${f.error}`}),g&&(0,W.jsx)(`p`,{className:`text-xs text-red-500`,children:g})]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:async()=>{d(!0),p(null);try{let e;if(s)e=await a(n.id);else if(o){let t=c.type===`postgres`?{type:`postgres`,connectionString:c.connectionString}:{type:`sqlite`,path:c.path};e=await o(c.type,t)}else e={ok:!1,error:`Save connection first`};p(e)}finally{d(!1)}},disabled:u,className:`mr-auto`,children:u?`Testing…`:`Test Connection`}),(0,W.jsx)($,{variant:`outline`,size:`sm`,onClick:t,children:`Cancel`}),(0,W.jsx)($,{size:`sm`,onClick:async()=>{if(_(null),!c.name.trim()){_(`Name is required`);return}h(!0);try{if(s&&i){let e=(c.type===`postgres`?c.connectionString.trim():c.path.trim())?c.type===`postgres`?{type:`postgres`,connectionString:c.connectionString}:{type:`sqlite`,path:c.path}:void 0;await i(n.id,{name:c.name.trim(),...e!==void 0&&{connectionConfig:e},groupName:c.groupName.trim()||null,color:c.color,readonly:c.readonly?1:0})}else if(r){let e=c.type===`postgres`?{type:`postgres`,connectionString:c.connectionString}:{type:`sqlite`,path:c.path};await r({type:c.type,name:c.name.trim(),connectionConfig:e,groupName:c.groupName.trim()||void 0,color:c.color??void 0})}t()}catch(e){_(e.message)}finally{h(!1)}},disabled:m,children:m?`Saving…`:s?`Save`:`Add`})]})]})})}function kg({onExport:e,onImport:t}){let[n,r]=(0,H.useState)(!1),i=(0,H.useRef)(null),a=()=>r(!1),o=async()=>{a();try{let t=await e(),n=new Blob([JSON.stringify(t,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`ppm-connections-${new Date().toISOString().slice(0,10)}.json`,i.click(),URL.revokeObjectURL(r)}catch(e){alert(`Export failed: ${e.message}`)}},s=async()=>{a();try{let t=await e();await navigator.clipboard.writeText(JSON.stringify(t,null,2)),alert(`Copied ${t.connections.length} connection(s) to clipboard`)}catch(e){alert(`Export failed: ${e.message}`)}},c=async e=>{try{let n=JSON.parse(e),r=n.connections??n;if(!Array.isArray(r)){alert(`Invalid format: expected connections array`);return}let i=await t({connections:r}),a=`Imported ${i.imported} connection(s)`;i.skipped>0&&(a+=`, ${i.skipped} skipped`),i.errors?.length>0&&(a+=`\n\nErrors:\n${i.errors.join(`
|
|
22
|
+
`)}`),alert(a)}catch(e){alert(`Import failed: ${e.message}`)}};return(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(`button`,{onClick:()=>r(e=>!e),className:`flex items-center justify-center size-5 rounded hover:bg-surface-elevated transition-colors text-text-subtle hover:text-foreground`,title:`Import / Export`,children:(0,W.jsx)(Be,{className:`size-3.5`})}),n&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:a}),(0,W.jsxs)(`div`,{className:`absolute right-0 top-full mt-1 z-50 w-44 bg-background border border-border rounded-md shadow-lg py-1 text-xs`,children:[(0,W.jsxs)(`button`,{onClick:o,className:`w-full flex items-center gap-2 px-3 py-1.5 hover:bg-surface-elevated transition-colors text-left`,children:[(0,W.jsx)(ze,{className:`size-3`}),` Export to file`]}),(0,W.jsxs)(`button`,{onClick:s,className:`w-full flex items-center gap-2 px-3 py-1.5 hover:bg-surface-elevated transition-colors text-left`,children:[(0,W.jsx)(Pe,{className:`size-3`}),` Export to clipboard`]}),(0,W.jsx)(`div`,{className:`border-t border-border my-1`}),(0,W.jsxs)(`button`,{onClick:()=>{a(),i.current?.click()},className:`w-full flex items-center gap-2 px-3 py-1.5 hover:bg-surface-elevated transition-colors text-left`,children:[(0,W.jsx)(en,{className:`size-3`}),` Import from file`]}),(0,W.jsxs)(`button`,{onClick:async()=>{a();try{let e=await navigator.clipboard.readText();if(!e.trim()){alert(`Clipboard is empty`);return}await c(e)}catch(e){alert(`Clipboard read failed: ${e.message}`)}},className:`w-full flex items-center gap-2 px-3 py-1.5 hover:bg-surface-elevated transition-colors text-left`,children:[(0,W.jsx)(Ne,{className:`size-3`}),` Import from clipboard`]})]})]}),(0,W.jsx)(`input`,{ref:i,type:`file`,accept:`.json`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];if(!t)return;let n=new FileReader;n.onload=()=>c(n.result),n.readAsText(t),e.target.value=``}})]})}function Ag(){let[e,t]=(0,H.useState)([]),[n,r]=(0,H.useState)(!0),[i,a]=(0,H.useState)(new Map),o=(0,H.useCallback)(async()=>{try{t(await B.get(`/api/db/connections`))}catch{}finally{r(!1)}},[]);(0,H.useEffect)(()=>{o()},[o]);let s=(0,H.useCallback)(async e=>{let n=await B.post(`/api/db/connections`,e);return t(e=>[...e,n]),n},[]),c=(0,H.useCallback)(async(e,n)=>{let r=await B.put(`/api/db/connections/${e}`,n);t(t=>t.map(t=>t.id===e?r:t))},[]),l=(0,H.useCallback)(async e=>{await B.del(`/api/db/connections/${e}`),t(t=>t.filter(t=>t.id!==e)),a(t=>{let n=new Map(t);return n.delete(e),n})},[]),u=(0,H.useCallback)(async e=>B.post(`/api/db/connections/${e}/test`),[]),d=(0,H.useCallback)(async(e,t)=>B.post(`/api/db/test`,{type:e,connectionConfig:t}),[]),f=(0,H.useCallback)(async e=>{let t=(await B.get(`/api/db/connections/${e}/tables`)).map(t=>({connectionId:e,tableName:t.name,schemaName:t.schema,rowCount:t.rowCount,cachedAt:new Date().toISOString()}));a(n=>new Map(n).set(e,t))},[]),[p,m]=(0,H.useState)(new Map);return{connections:e,loading:n,cachedTables:i,columnCache:p,createConnection:s,updateConnection:c,deleteConnection:l,testConnection:u,testRawConnection:d,refreshTables:f,fetchColumns:(0,H.useCallback)(async(e,t,n)=>{let r=`${e}:${n??`main`}.${t}`,i=p.get(r);if(i)return i;let a=await B.get(`/api/db/connections/${e}/schema?table=${encodeURIComponent(t)}${n?`&schema=${encodeURIComponent(n)}`:``}`);return m(e=>new Map(e).set(r,a)),a},[p]),exportConnections:(0,H.useCallback)(async()=>B.get(`/api/db/connections/export`),[]),importConnections:(0,H.useCallback)(async e=>{let t=await B.post(`/api/db/connections/import`,e);return await o(),t},[o])}}function jg(){let{connections:e,loading:t,cachedTables:n,columnCache:r,createConnection:i,updateConnection:a,deleteConnection:o,testConnection:s,testRawConnection:c,refreshTables:l,fetchColumns:u,exportConnections:d,importConnections:f}=Ag(),p=op(e=>e.openTab),[m,h]=(0,H.useState)(!1),[g,_]=(0,H.useState)(null);return(0,W.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-semibold text-text-subtle uppercase tracking-wider`,children:`Database`}),(0,W.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,W.jsx)(kg,{onExport:d,onImport:f}),(0,W.jsx)(`button`,{onClick:()=>h(!0),className:`flex items-center justify-center size-5 rounded hover:bg-surface-elevated transition-colors text-text-subtle hover:text-foreground`,title:`Add connection`,children:(0,W.jsx)(Nt,{className:`size-3.5`})})]})]}),(0,W.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:t?(0,W.jsx)(`p`,{className:`px-4 py-6 text-xs text-text-subtle text-center`,children:`Loading…`}):(0,W.jsx)(pg,{connections:e,cachedTables:n,onOpenTable:(e,t,n)=>{p({type:`database`,title:`${e.name} · ${t}`,projectId:null,closable:!0,metadata:{connectionId:e.id,connectionName:e.name,dbType:e.type,tableName:t,schemaName:n,connectionColor:e.color}})},onRefreshTables:l,onEdit:_,onDelete:async e=>{confirm(`Delete this connection?`)&&await o(e)},onFetchColumns:u,columnCache:r})}),(0,W.jsx)(Og,{open:m,onClose:()=>h(!1),onSave:async e=>{let t=await i(e);t&&l(t.id).catch(()=>{})},onTest:()=>Promise.resolve({ok:!1,error:`Save connection first`}),onTestRaw:c}),g&&(0,W.jsx)(Og,{open:!!g,onClose:()=>_(null),connection:g,onUpdate:async(e,t)=>{await a(e,t)},onTest:e=>s(e)})]})}function Mg(e,t,n,r){if(!e)return null;try{let i=r?e:e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return n&&(i=`\\b${i}\\b`),RegExp(`(${i})`,t?`g`:`gi`)}catch{return null}}function Ng({text:e,re:t}){if(!t)return(0,W.jsx)(`span`,{children:e});try{t.lastIndex=0;let n=e.split(t);return t.lastIndex=0,(0,W.jsx)(`span`,{children:n.map((e,n)=>(t.lastIndex=0,t.test(e)?(0,W.jsx)(`mark`,{className:`bg-yellow-300/40 text-foreground rounded-sm`,children:e},n):e))})}catch{return(0,W.jsx)(`span`,{children:e})}}function Pg({active:e,onClick:t,title:n,children:r}){return(0,W.jsx)(`button`,{onClick:t,title:n,className:L(`flex items-center justify-center w-6 h-6 rounded border shrink-0`,e?`border-primary text-primary bg-primary/10`:`border-border text-text-subtle hover:text-foreground hover:border-border/80`),children:r})}function Fg(){let{activeProject:e}=ap(),t=op(e=>e.openTab),[n,r]=(0,H.useState)(``),[i,c]=(0,H.useState)(!1),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(!1),[p,m]=(0,H.useState)(!1),[h,g]=(0,H.useState)(``),[_,v]=(0,H.useState)(``),[y,b]=(0,H.useState)(!1),[x,S]=(0,H.useState)(null),[C,w]=(0,H.useState)([]),[T,E]=(0,H.useState)(0),[D,O]=(0,H.useState)(!1),[k,A]=(0,H.useState)(new Set),j=(0,H.useRef)(null),ee=(0,H.useRef)(null),te=(0,H.useCallback)(async(t,n,r,i,a)=>{if(m(!1),!e||!i&&t.length<2||i&&t.length<1){w([]),E(0);return}if(i)try{new RegExp(t)}catch{m(!0),w([]);return}O(!0);try{let o=new URLSearchParams({q:t,caseSensitive:String(n),wholeWord:String(r),regex:String(i)});a&&o.set(`include`,a);let s=await B.get(`${z(e.name)}/files/search?${o}`);w(s.results),E(s.total)}catch{w([])}finally{O(!1)}},[e]);(0,H.useEffect)(()=>(ee.current&&clearTimeout(ee.current),ee.current=setTimeout(()=>te(n,i,l,d,h),300),()=>{ee.current&&clearTimeout(ee.current)}),[n,i,l,d,h,te]),(0,H.useEffect)(()=>{j.current?.focus()},[]);let M=Mg(n,i,l,d);function N(n,r){e&&t({type:`editor`,title:n.split(`/`).pop()??n,metadata:{filePath:n,projectName:e.name,lineNumber:r},projectId:e.name,closable:!0})}function P(e){A(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function F(){if(!e||!n||C.length===0||y)return;b(!0),S(null);let t=0;try{for(let r of C){let a=await B.get(`${z(e.name)}/files/read?path=${encodeURIComponent(r.file)}`),o=Mg(n,i,l,d);if(!o)continue;o.lastIndex=0;let s=a.content.match(o)??[];if(!s.length)continue;t+=s.length,o.lastIndex=0;let c=a.content.replace(o,_);await B.put(`${z(e.name)}/files/write`,{path:r.file,content:c})}S(t),te(n,i,l,d,h)}catch{}finally{b(!1)}}return(0,W.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,W.jsxs)(`div`,{className:`p-2 border-b border-border space-y-1.5`,children:[(0,W.jsx)(`div`,{className:`relative flex items-center gap-1`,children:(0,W.jsxs)(`div`,{className:`relative flex-1`,children:[(0,W.jsx)(Vt,{className:`absolute left-2 top-1/2 -translate-y-1/2 size-3.5 text-text-subtle pointer-events-none`}),(0,W.jsx)(`input`,{ref:j,value:n,onChange:e=>{r(e.target.value),S(null)},placeholder:e?`Search files…`:`Select a project first`,disabled:!e,className:L(`w-full pl-7 pr-6 py-1 text-xs bg-input border rounded focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50`,p?`border-destructive`:`border-border`)}),n&&(0,W.jsx)(`button`,{onClick:()=>{r(``),w([]),E(0),m(!1),S(null)},className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-text-subtle hover:text-foreground`,children:(0,W.jsx)(o,{className:`size-3`})})]})}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(Pg,{active:i,onClick:()=>c(e=>!e),title:`Match Case (Alt+C)`,children:(0,W.jsx)(Te,{className:`size-3.5`})}),(0,W.jsx)(Pg,{active:l,onClick:()=>{u(e=>!e),d&&f(!1)},title:`Match Whole Word (Alt+W)`,children:(0,W.jsx)(tn,{className:`size-3.5`})}),(0,W.jsx)(Pg,{active:d,onClick:()=>{f(e=>!e),l&&u(!1)},title:`Use Regular Expression (Alt+R)`,children:(0,W.jsx)(Rt,{className:`size-3.5`})}),p&&(0,W.jsx)(`span`,{className:`text-[10px] text-destructive ml-1`,children:`Invalid regex`})]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsxs)(`div`,{className:`relative flex-1`,children:[(0,W.jsx)(`input`,{value:_,onChange:e=>v(e.target.value),placeholder:`Replace…`,disabled:!e,className:`w-full pl-2 pr-6 py-1 text-xs bg-input border border-border rounded focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50`}),_&&(0,W.jsx)(`button`,{onClick:()=>v(``),className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-text-subtle hover:text-foreground`,children:(0,W.jsx)(o,{className:`size-3`})})]}),(0,W.jsx)(`button`,{onClick:F,disabled:!n||C.length===0||y,title:`Replace All`,className:`flex items-center justify-center w-6 h-6 rounded border border-border text-text-subtle hover:text-foreground hover:border-border/80 disabled:opacity-40 shrink-0`,children:y?(0,W.jsx)(V,{className:`size-3.5 animate-spin`}):(0,W.jsx)(zt,{className:`size-3.5`})})]}),(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(`input`,{value:h,onChange:e=>g(e.target.value),placeholder:`Files to include (e.g. *.ts, src/**)`,disabled:!e,className:`w-full pl-2 pr-6 py-1 text-xs bg-input border border-border rounded focus:outline-none focus:ring-1 focus:ring-primary/50 disabled:opacity-50`}),h&&(0,W.jsx)(`button`,{onClick:()=>g(``),className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-text-subtle hover:text-foreground`,children:(0,W.jsx)(o,{className:`size-3`})})]}),(0,W.jsxs)(`div`,{className:`text-[10px] text-text-subtle h-3`,children:[(D||y)&&(0,W.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(V,{className:`size-2.5 animate-spin`}),y?`Replacing…`:`Searching…`]}),!D&&!y&&x!==null&&(0,W.jsxs)(`span`,{className:`text-green-500`,children:[x,` replacement`,x===1?``:`s`,` made`]}),!D&&!y&&x===null&&!p&&n.length>=2&&C.length===0&&(0,W.jsx)(`span`,{children:`No results`}),!D&&!y&&x===null&&T>0&&(0,W.jsxs)(`span`,{children:[T,` result`,T===1?``:`s`,` in `,C.length,` file`,C.length===1?``:`s`]})]})]}),(0,W.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:C.map(e=>{let t=k.has(e.file),n=e.file.split(`/`).pop()??e.file,r=e.file.includes(`/`)?e.file.slice(0,e.file.lastIndexOf(`/`)):``;return(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`button`,{onClick:()=>P(e.file),className:`w-full flex items-center gap-1 px-2 py-1 hover:bg-muted/50 text-left`,children:[t?(0,W.jsx)(s,{className:`size-3 shrink-0 text-text-subtle`}):(0,W.jsx)(a,{className:`size-3 shrink-0 text-text-subtle`}),(0,W.jsx)(qe,{className:`size-3 shrink-0 text-text-subtle`}),(0,W.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate`,children:n}),(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle truncate flex-1 min-w-0 ml-1`,children:r}),(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0 ml-1 bg-muted px-1 rounded`,children:e.matches.length})]}),!t&&e.matches.map(t=>(0,W.jsxs)(`button`,{onClick:()=>N(e.file,t.lineNum),className:`w-full flex items-start gap-2 pl-7 pr-2 py-0.5 hover:bg-primary/10 text-left`,children:[(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0 w-7 text-right pt-px`,children:t.lineNum}),(0,W.jsx)(`span`,{className:`text-xs text-text-secondary truncate font-mono leading-4`,children:(0,W.jsx)(Ng,{text:t.content.trimStart(),re:M})})]},`${e.file}-${t.lineNum}`))]},e.file)})})]})}function Ig(e,t){window.dispatchEvent(new CustomEvent(`ext:tree:expand`,{detail:{viewId:e,itemId:t}}))}function Lg(e,t){window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:t}}))}var Rg={refresh:Lt,edit:Ot,trash:Xt,plus:Nt,search:Vt};function zg({viewId:e,className:t}){let n=vm(t=>t.treeViews[e])??[],r=vm(e=>e.contributions),i=(0,H.useMemo)(()=>{if(!r)return{name:e,headerActions:[]};let t=e,n=r.views;if(n)for(let r of Object.values(n)){let n=r.find(t=>t.id===e);if(n){t=n.name;break}}let i=[],a=r.menus?.[`view/title`];if(a)for(let t of a){if(t.when){let n=t.when.match(/view\s*==\s*(\S+)/);if(n&&n[1]!==e)continue}let n=r.commands?.find(e=>e.command===t.command);n&&i.push({command:n.command,title:n.title,icon:n.icon})}return{name:t,headerActions:i}},[r,e]);return(0,W.jsxs)(`div`,{className:L(`flex flex-col h-full`,t),children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-semibold text-text-subtle uppercase tracking-wider`,children:i.name}),(0,W.jsx)(`div`,{className:`flex items-center gap-0.5`,children:i.headerActions.map(e=>{let t=Rg[e.icon??Bg(e.command)]??Lt;return(0,W.jsx)(`button`,{onClick:()=>Lg(e.command),className:`flex items-center justify-center size-5 rounded hover:bg-surface-elevated transition-colors text-text-subtle hover:text-foreground`,title:e.title,children:(0,W.jsx)(t,{className:`size-3.5`})},e.command)})})]}),(0,W.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0 py-1`,role:`tree`,"aria-label":e,children:n.length===0?(0,W.jsx)(`p`,{className:`px-4 py-6 text-xs text-text-subtle text-center`,children:`No items`}):n.map(t=>(0,W.jsx)(Vg,{item:t,depth:0,viewId:e},t.id))})]})}function Bg(e){return e.includes(`refresh`)?`refresh`:e.includes(`add`)||e.includes(`create`)||e.includes(`new`)?`plus`:e.includes(`delete`)||e.includes(`remove`)?`trash`:e.includes(`edit`)||e.includes(`update`)?`edit`:e.includes(`search`)||e.includes(`find`)?`search`:`refresh`}function Vg({item:e,depth:t,viewId:n}){let[r,i]=(0,H.useState)(!1),o=e.collapsibleState!==`none`,c=(0,H.useRef)(!1);e.children&&e.children.length>0&&!c.current&&(c.current=!0,r||i(!0));let l=(0,H.useCallback)(()=>{if(!o)return;let t=!r;i(t),t&&(!e.children||e.children.length===0)&&Ig(n,e.id)},[o,r,e.id,e.children,n]),u=(0,H.useCallback)(()=>{l(),e.command&&Lg(e.command,e.commandArgs)},[l,e.command,e.commandArgs]),d=8+t*16;return(0,W.jsxs)(`div`,{role:`treeitem`,"aria-expanded":o?r:void 0,children:[(0,W.jsxs)(`div`,{className:L(`group/node flex items-center gap-1 py-1 hover:bg-surface-elevated transition-colors`),style:{paddingLeft:d,paddingRight:8},children:[(0,W.jsx)(`button`,{onClick:l,className:`shrink-0 text-text-subtle hover:text-foreground transition-colors`,children:o?r?(0,W.jsx)(a,{className:`size-3`}):(0,W.jsx)(s,{className:`size-3`}):(0,W.jsx)(`span`,{className:`size-3`})}),e.color&&(0,W.jsx)(`span`,{className:`shrink-0 size-2 rounded-full border border-border`,style:{backgroundColor:e.color}}),(0,W.jsx)(`button`,{className:`flex-1 text-left text-xs truncate hover:text-primary transition-colors`,onClick:u,children:e.label}),e.description&&(0,W.jsx)(`span`,{className:`shrink-0 ml-1 text-text-subtle text-[10px]`,children:e.description}),e.badge&&(0,W.jsx)(`span`,{className:`shrink-0 text-[9px] text-text-subtle uppercase px-1 rounded bg-surface-elevated`,children:e.badge}),e.actions&&e.actions.length>0&&(0,W.jsx)(`div`,{className:`flex can-hover:hidden can-hover:group-hover/node:flex items-center gap-0.5 shrink-0`,children:e.actions.map(e=>(0,W.jsx)(Hg,{action:e},e.command))})]}),o&&r&&e.children&&(0,W.jsx)(`div`,{role:`group`,children:e.children.map(e=>(0,W.jsx)(Vg,{item:e,depth:t+1,viewId:n},e.id))})]})}function Hg({action:e}){let[t,n]=(0,H.useState)(!1),r=Rg[e.icon]??Lt,i=e.icon===`trash`;return(0,W.jsx)(`button`,{onClick:(0,H.useCallback)(t=>{t.stopPropagation(),e.icon===`refresh`&&(n(!0),setTimeout(()=>n(!1),1e3)),Lg(e.command,e.commandArgs)},[e]),className:L(`p-0.5 text-text-subtle transition-colors`,i?`hover:text-red-500`:`hover:text-foreground`),title:e.tooltip,children:(0,W.jsx)(r,{className:L(`size-3`,t&&`animate-spin`)})})}var Ug=[{id:`explorer`,label:`Explorer`,icon:Ze},{id:`search`,label:`Search`,icon:Vt},{id:`git`,label:`Git`,icon:tt},{id:`database`,label:`Database`,icon:Re},{id:`settings`,label:`Settings`,icon:Gt}];function Wg({onResize:e}){let t=(0,H.useRef)(!1);return(0,W.jsx)(`div`,{className:`absolute right-0 top-0 bottom-0 w-1 cursor-col-resize hover:bg-primary/30 active:bg-primary/50 transition-colors z-10`,onPointerDown:(0,H.useCallback)(e=>{e.preventDefault(),t.current=!0,e.currentTarget.setPointerCapture(e.pointerId),document.body.style.cursor=`col-resize`,document.body.style.userSelect=`none`},[]),onPointerMove:(0,H.useCallback)(n=>{t.current&&e(n.clientX-48)},[e]),onPointerUp:(0,H.useCallback)(e=>{t.current=!1,e.currentTarget.releasePointerCapture(e.pointerId),document.body.style.cursor=``,document.body.style.userSelect=``},[])})}function Gg(){let{activeProject:e}=ap(),t=U(e=>e.sidebarCollapsed),n=U(e=>e.sidebarWidth),r=U(e=>e.toggleSidebar),i=U(e=>e.setSidebarWidth),a=U(e=>e.sidebarActiveTab),o=U(e=>e.setSidebarActiveTab),s=vm(e=>e.contributions),c=Jm(t=>e?.name?t.counts.get(e.name)??0:0);Ym(e?.name,a===`git`);let l=(0,H.useMemo)(()=>{let e=[...Ug];if(s?.views){let t=s.views.sidebar??s.views.explorer??[];for(let n of t)e.push({id:`ext:${n.id}`,label:n.name,icon:It})}return e},[s]);return t?(0,W.jsx)(`aside`,{className:`hidden md:flex flex-col w-10 min-w-10 bg-background border-r border-border`,children:(0,W.jsx)(`button`,{onClick:r,title:`Expand sidebar (⌘B)`,className:`flex items-center justify-center h-[41px] border-b border-border text-text-secondary hover:text-foreground transition-colors`,children:(0,W.jsx)(Dt,{className:`size-4`})})}):(0,W.jsxs)(`aside`,{className:`hidden md:flex flex-col bg-background border-r border-border overflow-hidden relative`,style:{width:n,minWidth:200,maxWidth:600},children:[(0,W.jsxs)(`div`,{className:`flex items-center h-[41px] border-b border-border shrink-0`,children:[l.map(e=>{let t=e.icon;return(0,W.jsxs)(`button`,{onClick:()=>o(e.id),className:L(`flex-1 flex items-center justify-center gap-1.5 h-full text-xs transition-colors border-b-2 -mb-px relative`,a===e.id?`border-primary text-primary font-medium`:`border-transparent text-text-secondary hover:text-foreground`),children:[(0,W.jsx)(t,{className:`size-3.5`,title:e.label}),e.id===`git`&&c>0&&(0,W.jsx)(`span`,{className:`absolute top-1 right-1 min-w-[16px] h-4 px-1 flex items-center justify-center rounded-full bg-primary text-primary-foreground text-[10px] font-medium leading-none`,children:c>99?`99+`:c})]},e.id)}),(0,W.jsx)(`button`,{onClick:r,title:`Collapse sidebar (⌘B)`,className:`flex items-center justify-center w-8 h-full text-text-subtle hover:text-text-secondary transition-colors shrink-0`,children:(0,W.jsx)(Et,{className:`size-3.5`})})]}),(0,W.jsxs)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:[a===`explorer`&&(e?(0,W.jsx)(qm,{}):(0,W.jsx)(`div`,{className:`flex items-center justify-center h-24 p-4`,children:(0,W.jsx)(`p`,{className:`text-xs text-text-subtle text-center`,children:`Select a project to browse files`})})),a===`git`&&(0,W.jsx)(uh,{metadata:{projectName:e?.name}}),a===`search`&&(0,W.jsx)(Fg,{}),a===`database`&&(0,W.jsx)(jg,{}),a===`settings`&&(0,W.jsx)(dg,{}),typeof a==`string`&&a.startsWith(`ext:`)&&(0,W.jsx)(zg,{viewId:a.slice(4),className:`h-full`})]}),(0,W.jsx)(Wg,{onResize:i})]})}var Kg=Object.defineProperty,qg=Object.getOwnPropertySymbols,Jg=Object.prototype.hasOwnProperty,Yg=Object.prototype.propertyIsEnumerable,Xg=(e,t,n)=>t in e?Kg(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Zg=(e,t)=>{for(var n in t||={})Jg.call(t,n)&&Xg(e,n,t[n]);if(qg)for(var n of qg(t))Yg.call(t,n)&&Xg(e,n,t[n]);return e},Qg=(e,t)=>{var n={};for(var r in e)Jg.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&qg)for(var r of qg(e))t.indexOf(r)<0&&Yg.call(e,r)&&(n[r]=e[r]);return n},$g;(e=>{let t=class t{constructor(e,n,r,a){if(this.version=e,this.errorCorrectionLevel=n,this.modules=[],this.isFunction=[],e<t.MIN_VERSION||e>t.MAX_VERSION)throw RangeError(`Version value out of range`);if(a<-1||a>7)throw RangeError(`Mask value out of range`);this.size=e*4+17;let o=[];for(let e=0;e<this.size;e++)o.push(!1);for(let e=0;e<this.size;e++)this.modules.push(o.slice()),this.isFunction.push(o.slice());this.drawFunctionPatterns();let s=this.addEccAndInterleave(r);if(this.drawCodewords(s),a==-1){let e=1e9;for(let t=0;t<8;t++){this.applyMask(t),this.drawFormatBits(t);let n=this.getPenaltyScore();n<e&&(a=t,e=n),this.applyMask(t)}}i(0<=a&&a<=7),this.mask=a,this.applyMask(a),this.drawFormatBits(a),this.isFunction=[]}static encodeText(n,r){let i=e.QrSegment.makeSegments(n);return t.encodeSegments(i,r)}static encodeBinary(n,r){let i=e.QrSegment.makeBytes(n);return t.encodeSegments([i],r)}static encodeSegments(e,r,a=1,s=40,c=-1,l=!0){if(!(t.MIN_VERSION<=a&&a<=s&&s<=t.MAX_VERSION)||c<-1||c>7)throw RangeError(`Invalid value`);let u,d;for(u=a;;u++){let n=t.getNumDataCodewords(u,r)*8,i=o.getTotalBits(e,u);if(i<=n){d=i;break}if(u>=s)throw RangeError(`Data too long`)}for(let e of[t.Ecc.MEDIUM,t.Ecc.QUARTILE,t.Ecc.HIGH])l&&d<=t.getNumDataCodewords(u,e)*8&&(r=e);let f=[];for(let t of e){n(t.mode.modeBits,4,f),n(t.numChars,t.mode.numCharCountBits(u),f);for(let e of t.getData())f.push(e)}i(f.length==d);let p=t.getNumDataCodewords(u,r)*8;i(f.length<=p),n(0,Math.min(4,p-f.length),f),n(0,(8-f.length%8)%8,f),i(f.length%8==0);for(let e=236;f.length<p;e^=253)n(e,8,f);let m=[];for(;m.length*8<f.length;)m.push(0);return f.forEach((e,t)=>m[t>>>3]|=e<<7-(t&7)),new t(u,r,m,c)}getModule(e,t){return 0<=e&&e<this.size&&0<=t&&t<this.size&&this.modules[t][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let e=0;e<this.size;e++)this.setFunctionModule(6,e,e%2==0),this.setFunctionModule(e,6,e%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);let e=this.getAlignmentPatternPositions(),t=e.length;for(let n=0;n<t;n++)for(let r=0;r<t;r++)n==0&&r==0||n==0&&r==t-1||n==t-1&&r==0||this.drawAlignmentPattern(e[n],e[r]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){let t=this.errorCorrectionLevel.formatBits<<3|e,n=t;for(let e=0;e<10;e++)n=n<<1^(n>>>9)*1335;let a=(t<<10|n)^21522;i(a>>>15==0);for(let e=0;e<=5;e++)this.setFunctionModule(8,e,r(a,e));this.setFunctionModule(8,7,r(a,6)),this.setFunctionModule(8,8,r(a,7)),this.setFunctionModule(7,8,r(a,8));for(let e=9;e<15;e++)this.setFunctionModule(14-e,8,r(a,e));for(let e=0;e<8;e++)this.setFunctionModule(this.size-1-e,8,r(a,e));for(let e=8;e<15;e++)this.setFunctionModule(8,this.size-15+e,r(a,e));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let t=0;t<12;t++)e=e<<1^(e>>>11)*7973;let t=this.version<<12|e;i(t>>>18==0);for(let e=0;e<18;e++){let n=r(t,e),i=this.size-11+e%3,a=Math.floor(e/3);this.setFunctionModule(i,a,n),this.setFunctionModule(a,i,n)}}drawFinderPattern(e,t){for(let n=-4;n<=4;n++)for(let r=-4;r<=4;r++){let i=Math.max(Math.abs(r),Math.abs(n)),a=e+r,o=t+n;0<=a&&a<this.size&&0<=o&&o<this.size&&this.setFunctionModule(a,o,i!=2&&i!=4)}}drawAlignmentPattern(e,t){for(let n=-2;n<=2;n++)for(let r=-2;r<=2;r++)this.setFunctionModule(e+r,t+n,Math.max(Math.abs(r),Math.abs(n))!=1)}setFunctionModule(e,t,n){this.modules[t][e]=n,this.isFunction[t][e]=!0}addEccAndInterleave(e){let n=this.version,r=this.errorCorrectionLevel;if(e.length!=t.getNumDataCodewords(n,r))throw RangeError(`Invalid argument`);let a=t.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][n],o=t.ECC_CODEWORDS_PER_BLOCK[r.ordinal][n],s=Math.floor(t.getNumRawDataModules(n)/8),c=a-s%a,l=Math.floor(s/a),u=[],d=t.reedSolomonComputeDivisor(o);for(let n=0,r=0;n<a;n++){let i=e.slice(r,r+l-o+(n<c?0:1));r+=i.length;let a=t.reedSolomonComputeRemainder(i,d);n<c&&i.push(0),u.push(i.concat(a))}let f=[];for(let e=0;e<u[0].length;e++)u.forEach((t,n)=>{(e!=l-o||n>=c)&&f.push(t[e])});return i(f.length==s),f}drawCodewords(e){if(e.length!=Math.floor(t.getNumRawDataModules(this.version)/8))throw RangeError(`Invalid argument`);let n=0;for(let t=this.size-1;t>=1;t-=2){t==6&&(t=5);for(let i=0;i<this.size;i++)for(let a=0;a<2;a++){let o=t-a,s=t+1&2?i:this.size-1-i;!this.isFunction[s][o]&&n<e.length*8&&(this.modules[s][o]=r(e[n>>>3],7-(n&7)),n++)}}i(n==e.length*8)}applyMask(e){if(e<0||e>7)throw RangeError(`Mask value out of range`);for(let t=0;t<this.size;t++)for(let n=0;n<this.size;n++){let r;switch(e){case 0:r=(n+t)%2==0;break;case 1:r=t%2==0;break;case 2:r=n%3==0;break;case 3:r=(n+t)%3==0;break;case 4:r=(Math.floor(n/3)+Math.floor(t/2))%2==0;break;case 5:r=n*t%2+n*t%3==0;break;case 6:r=(n*t%2+n*t%3)%2==0;break;case 7:r=((n+t)%2+n*t%3)%2==0;break;default:throw Error(`Unreachable`)}!this.isFunction[t][n]&&r&&(this.modules[t][n]=!this.modules[t][n])}}getPenaltyScore(){let e=0;for(let n=0;n<this.size;n++){let r=!1,i=0,a=[0,0,0,0,0,0,0];for(let o=0;o<this.size;o++)this.modules[n][o]==r?(i++,i==5?e+=t.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,a),r||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),r=this.modules[n][o],i=1);e+=this.finderPenaltyTerminateAndCount(r,i,a)*t.PENALTY_N3}for(let n=0;n<this.size;n++){let r=!1,i=0,a=[0,0,0,0,0,0,0];for(let o=0;o<this.size;o++)this.modules[o][n]==r?(i++,i==5?e+=t.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,a),r||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),r=this.modules[o][n],i=1);e+=this.finderPenaltyTerminateAndCount(r,i,a)*t.PENALTY_N3}for(let n=0;n<this.size-1;n++)for(let r=0;r<this.size-1;r++){let i=this.modules[n][r];i==this.modules[n][r+1]&&i==this.modules[n+1][r]&&i==this.modules[n+1][r+1]&&(e+=t.PENALTY_N2)}let n=0;for(let e of this.modules)n=e.reduce((e,t)=>e+(t?1:0),n);let r=this.size*this.size,a=Math.ceil(Math.abs(n*20-r*10)/r)-1;return i(0<=a&&a<=9),e+=a*t.PENALTY_N4,i(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{let e=Math.floor(this.version/7)+2,t=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2,n=[6];for(let r=this.size-7;n.length<e;r-=t)n.splice(1,0,r);return n}}static getNumRawDataModules(e){if(e<t.MIN_VERSION||e>t.MAX_VERSION)throw RangeError(`Version number out of range`);let n=(16*e+128)*e+64;if(e>=2){let t=Math.floor(e/7)+2;n-=(25*t-10)*t-55,e>=7&&(n-=36)}return i(208<=n&&n<=29648),n}static getNumDataCodewords(e,n){return Math.floor(t.getNumRawDataModules(e)/8)-t.ECC_CODEWORDS_PER_BLOCK[n.ordinal][e]*t.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw RangeError(`Degree out of range`);let n=[];for(let t=0;t<e-1;t++)n.push(0);n.push(1);let r=1;for(let i=0;i<e;i++){for(let e=0;e<n.length;e++)n[e]=t.reedSolomonMultiply(n[e],r),e+1<n.length&&(n[e]^=n[e+1]);r=t.reedSolomonMultiply(r,2)}return n}static reedSolomonComputeRemainder(e,n){let r=n.map(e=>0);for(let i of e){let e=i^r.shift();r.push(0),n.forEach((n,i)=>r[i]^=t.reedSolomonMultiply(n,e))}return r}static reedSolomonMultiply(e,t){if(e>>>8||t>>>8)throw RangeError(`Byte out of range`);let n=0;for(let r=7;r>=0;r--)n=n<<1^(n>>>7)*285,n^=(t>>>r&1)*e;return i(n>>>8==0),n}finderPenaltyCountPatterns(e){let t=e[1];i(t<=this.size*3);let n=t>0&&e[2]==t&&e[3]==t*3&&e[4]==t&&e[5]==t;return(n&&e[0]>=t*4&&e[6]>=t?1:0)+(n&&e[6]>=t*4&&e[0]>=t?1:0)}finderPenaltyTerminateAndCount(e,t,n){return e&&(this.finderPenaltyAddHistory(t,n),t=0),t+=this.size,this.finderPenaltyAddHistory(t,n),this.finderPenaltyCountPatterns(n)}finderPenaltyAddHistory(e,t){t[0]==0&&(e+=this.size),t.pop(),t.unshift(e)}};t.MIN_VERSION=1,t.MAX_VERSION=40,t.PENALTY_N1=3,t.PENALTY_N2=3,t.PENALTY_N3=40,t.PENALTY_N4=10,t.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],t.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e.QrCode=t;function n(e,t,n){if(t<0||t>31||e>>>t)throw RangeError(`Value out of range`);for(let r=t-1;r>=0;r--)n.push(e>>>r&1)}function r(e,t){return(e>>>t&1)!=0}function i(e){if(!e)throw Error(`Assertion error`)}let a=class e{constructor(e,t,n){if(this.mode=e,this.numChars=t,this.bitData=n,t<0)throw RangeError(`Invalid argument`);this.bitData=n.slice()}static makeBytes(t){let r=[];for(let e of t)n(e,8,r);return new e(e.Mode.BYTE,t.length,r)}static makeNumeric(t){if(!e.isNumeric(t))throw RangeError(`String contains non-numeric characters`);let r=[];for(let e=0;e<t.length;){let i=Math.min(t.length-e,3);n(parseInt(t.substring(e,e+i),10),i*3+1,r),e+=i}return new e(e.Mode.NUMERIC,t.length,r)}static makeAlphanumeric(t){if(!e.isAlphanumeric(t))throw RangeError(`String contains unencodable characters in alphanumeric mode`);let r=[],i;for(i=0;i+2<=t.length;i+=2){let a=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i))*45;a+=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i+1)),n(a,11,r)}return i<t.length&&n(e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i)),6,r),new e(e.Mode.ALPHANUMERIC,t.length,r)}static makeSegments(t){return t==``?[]:e.isNumeric(t)?[e.makeNumeric(t)]:e.isAlphanumeric(t)?[e.makeAlphanumeric(t)]:[e.makeBytes(e.toUtf8ByteArray(t))]}static makeEci(t){let r=[];if(t<0)throw RangeError(`ECI assignment value out of range`);if(t<128)n(t,8,r);else if(t<16384)n(2,2,r),n(t,14,r);else if(t<1e6)n(6,3,r),n(t,21,r);else throw RangeError(`ECI assignment value out of range`);return new e(e.Mode.ECI,0,r)}static isNumeric(t){return e.NUMERIC_REGEX.test(t)}static isAlphanumeric(t){return e.ALPHANUMERIC_REGEX.test(t)}getData(){return this.bitData.slice()}static getTotalBits(e,t){let n=0;for(let r of e){let e=r.mode.numCharCountBits(t);if(r.numChars>=1<<e)return 1/0;n+=4+e+r.bitData.length}return n}static toUtf8ByteArray(e){e=encodeURI(e);let t=[];for(let n=0;n<e.length;n++)e.charAt(n)==`%`?(t.push(parseInt(e.substring(n+1,n+3),16)),n+=2):t.push(e.charCodeAt(n));return t}};a.NUMERIC_REGEX=/^[0-9]*$/,a.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,a.ALPHANUMERIC_CHARSET=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`;let o=a;e.QrSegment=a})($g||={}),(e=>{(e=>{let t=class{constructor(e,t){this.ordinal=e,this.formatBits=t}};t.LOW=new t(0,1),t.MEDIUM=new t(1,0),t.QUARTILE=new t(2,3),t.HIGH=new t(3,2),e.Ecc=t})(e.QrCode||={})})($g||={}),(e=>{(e=>{let t=class{constructor(e,t){this.modeBits=e,this.numBitsCharCount=t}numCharCountBits(e){return this.numBitsCharCount[Math.floor((e+7)/17)]}};t.NUMERIC=new t(1,[10,12,14]),t.ALPHANUMERIC=new t(2,[9,11,13]),t.BYTE=new t(4,[8,16,16]),t.KANJI=new t(8,[8,10,12]),t.ECI=new t(7,[0,0,0]),e.Mode=t})(e.QrSegment||={})})($g||={});var e_=$g,t_={L:e_.QrCode.Ecc.LOW,M:e_.QrCode.Ecc.MEDIUM,Q:e_.QrCode.Ecc.QUARTILE,H:e_.QrCode.Ecc.HIGH},n_=128,r_=`L`,i_=`#FFFFFF`,a_=`#000000`,o_=!1,s_=1,c_=4,l_=0,u_=.1;function d_(e,t=0){let n=[];return e.forEach(function(e,r){let i=null;e.forEach(function(a,o){if(!a&&i!==null){n.push(`M${i+t} ${r+t}h${o-i}v1H${i+t}z`),i=null;return}if(o===e.length-1){if(!a)return;i===null?n.push(`M${o+t},${r+t} h1v1H${o+t}z`):n.push(`M${i+t},${r+t} h${o+1-i}v1H${i+t}z`);return}a&&i===null&&(i=o)})}),n.join(``)}function f_(e,t){return e.slice().map((e,n)=>n<t.y||n>=t.y+t.h?e:e.map((e,n)=>n<t.x||n>=t.x+t.w?e:!1))}function p_(e,t,n,r){if(r==null)return null;let i=e.length+n*2,a=Math.floor(t*u_),o=i/t,s=(r.width||a)*o,c=(r.height||a)*o,l=r.x==null?e.length/2-s/2:r.x*o,u=r.y==null?e.length/2-c/2:r.y*o,d=r.opacity==null?1:r.opacity,f=null;if(r.excavate){let e=Math.floor(l),t=Math.floor(u);f={x:e,y:t,w:Math.ceil(s+l-e),h:Math.ceil(c+u-t)}}let p=r.crossOrigin;return{x:l,y:u,h:c,w:s,excavation:f,opacity:d,crossOrigin:p}}function m_(e,t){return t==null?e?c_:l_:Math.max(Math.floor(t),0)}function h_({value:e,level:t,minVersion:n,includeMargin:r,marginSize:i,imageSettings:a,size:o,boostLevel:s}){let c=H.useMemo(()=>{let r=(Array.isArray(e)?e:[e]).reduce((e,t)=>(e.push(...e_.QrSegment.makeSegments(t)),e),[]);return e_.QrCode.encodeSegments(r,t_[t],n,void 0,void 0,s)},[e,t,n,s]),{cells:l,margin:u,numCells:d,calculatedImageSettings:f}=H.useMemo(()=>{let e=c.getModules(),t=m_(r,i);return{cells:e,margin:t,numCells:e.length+t*2,calculatedImageSettings:p_(e,o,t,a)}},[c,o,a,r,i]);return{qrcode:c,margin:u,cells:l,numCells:d,calculatedImageSettings:f}}var g_=function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0}(),__=H.forwardRef(function(e,t){let n=e,{value:r,size:i=n_,level:a=r_,bgColor:o=i_,fgColor:s=a_,includeMargin:c=o_,minVersion:l=s_,boostLevel:u,marginSize:d,imageSettings:f}=n,p=Qg(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`marginSize`,`imageSettings`]),{style:m}=p,h=Qg(p,[`style`]),g=f?.src,_=H.useRef(null),v=H.useRef(null),y=H.useCallback(e=>{_.current=e,typeof t==`function`?t(e):t&&(t.current=e)},[t]),[b,x]=H.useState(!1),{margin:S,cells:C,numCells:w,calculatedImageSettings:T}=h_({value:r,level:a,minVersion:l,boostLevel:u,includeMargin:c,marginSize:d,imageSettings:f,size:i});H.useEffect(()=>{if(_.current!=null){let e=_.current,t=e.getContext(`2d`);if(!t)return;let n=C,r=v.current,a=T!=null&&r!==null&&r.complete&&r.naturalHeight!==0&&r.naturalWidth!==0;a&&T.excavation!=null&&(n=f_(C,T.excavation));let c=window.devicePixelRatio||1;e.height=e.width=i*c;let l=i/w*c;t.scale(l,l),t.fillStyle=o,t.fillRect(0,0,w,w),t.fillStyle=s,g_?t.fill(new Path2D(d_(n,S))):C.forEach(function(e,n){e.forEach(function(e,r){e&&t.fillRect(r+S,n+S,1,1)})}),T&&(t.globalAlpha=T.opacity),a&&t.drawImage(r,T.x+S,T.y+S,T.w,T.h)}}),H.useEffect(()=>{x(!1)},[g]);let E=Zg({height:i,width:i},m),D=null;return g!=null&&(D=H.createElement(`img`,{src:g,key:g,style:{display:`none`},onLoad:()=>{x(!0)},ref:v,crossOrigin:T?.crossOrigin})),H.createElement(H.Fragment,null,H.createElement(`canvas`,Zg({style:E,height:i,width:i,ref:y,role:`img`},h)),D)});__.displayName=`QRCodeCanvas`;var v_=H.forwardRef(function(e,t){let n=e,{value:r,size:i=n_,level:a=r_,bgColor:o=i_,fgColor:s=a_,includeMargin:c=o_,minVersion:l=s_,boostLevel:u,title:d,marginSize:f,imageSettings:p}=n,m=Qg(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`title`,`marginSize`,`imageSettings`]),{margin:h,cells:g,numCells:_,calculatedImageSettings:v}=h_({value:r,level:a,minVersion:l,boostLevel:u,includeMargin:c,marginSize:f,imageSettings:p,size:i}),y=g,b=null;p!=null&&v!=null&&(v.excavation!=null&&(y=f_(g,v.excavation)),b=H.createElement(`image`,{href:p.src,height:v.h,width:v.w,x:v.x+h,y:v.y+h,preserveAspectRatio:`none`,opacity:v.opacity,crossOrigin:v.crossOrigin}));let x=d_(y,h);return H.createElement(`svg`,Zg({height:i,width:i,viewBox:`0 0 ${_} ${_}`,ref:t,role:`img`},m),!!d&&H.createElement(`title`,null,d),H.createElement(`path`,{fill:o,d:`M0,0 h${_}v${_}H0z`,shapeRendering:`crispEdges`}),H.createElement(`path`,{fill:s,d:x,shapeRendering:`crispEdges`}),b)});v_.displayName=`QRCodeSVG`;function y_({onClose:e}){let[t,n]=(0,H.useState)(null),[r,i]=(0,H.useState)(null),[a,s]=(0,H.useState)(!0),[c,l]=(0,H.useState)(!1),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(null),[v,y]=(0,H.useState)(null),[b,x]=(0,H.useState)(!1);(0,H.useEffect)(()=>{(async()=>{try{let[e,t]=await Promise.all([B.get(`/api/cloud/status`),B.get(`/api/tunnel`)]);n(e),i(t)}catch{}s(!1)})()},[]);let S=(0,H.useCallback)(e=>{navigator.clipboard.writeText(e),_(e),setTimeout(()=>_(null),2e3)},[]),C=(0,H.useCallback)(async()=>{l(!0),h(null);try{i({active:!0,url:(await B.post(`/api/tunnel/start`,{})).url,localUrl:r?.localUrl??null}),n(await B.get(`/api/cloud/status`))}catch(e){h(e instanceof Error?e.message:`Failed to start tunnel`)}finally{l(!1)}},[r]),w=(0,H.useCallback)(async()=>{h(null);try{let{cloud_url:e}=await B.get(`/api/cloud/login-url`),t=await fetch(`${e}/auth/device-code`,{method:`POST`,headers:{"Content-Type":`application/json`}});if(!t.ok)throw Error(`Failed to get device code`);let r=await t.json();y({userCode:r.user_code,verifyUrl:r.verification_uri}),x(!0);let i=(r.interval||5)*1e3,a=Date.now()+r.expires_in*1e3,o=setInterval(async()=>{if(Date.now()>a){clearInterval(o),x(!1),y(null),h(`Login expired. Try again.`);return}try{let t=await fetch(`${e}/auth/device-code/poll`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({device_code:r.device_code})});if(!t.ok)return;let i=await t.json();i.status===`approved`&&i.access_token&&i.email&&(clearInterval(o),x(!1),y(null),await B.post(`/api/cloud/login`,{access_token:i.access_token,email:i.email,cloud_url:e}),n(await B.get(`/api/cloud/status`)))}catch{}},i)}catch(e){h(e instanceof Error?e.message:`Failed to start login`),x(!1),y(null)}},[]),T=(0,H.useCallback)(async()=>{d(!0),h(null);try{r?.active||i({active:!0,url:(await B.post(`/api/tunnel/start`,{})).url,localUrl:r?.localUrl??null}),await B.post(`/api/cloud/link`,{}),n(await B.get(`/api/cloud/status`))}catch(e){h(e instanceof Error?e.message:`Failed to link device`)}finally{d(!1)}},[r]),E=(0,H.useCallback)(async()=>{if(confirm(`Unlink this device from PPM Cloud? It will no longer appear on your cloud dashboard.`)){p(!0);try{await B.post(`/api/cloud/unlink`,{}),n(await B.get(`/api/cloud/status`))}catch{}p(!1)}},[]),D=(0,H.useCallback)(async()=>{let e=t?.linked?`Sign out from PPM Cloud? This will also unlink your device.`:`Sign out from PPM Cloud?`;if(confirm(e)){if(t?.linked)try{await B.post(`/api/cloud/unlink`,{})}catch{}await B.post(`/api/cloud/logout`,{}),n(e=>e?{...e,logged_in:!1,email:null,linked:!1,device_name:null,device_id:null}:null)}},[t?.linked]),O=r?.url||t?.tunnel_url;return(0,W.jsxs)(`div`,{className:`w-72 bg-background border border-border rounded-lg shadow-lg p-3 space-y-3`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,W.jsx)(Ie,{className:`size-4 text-primary`}),(0,W.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:`PPM Cloud`})]}),(0,W.jsx)(`button`,{onClick:e,className:`text-text-subtle hover:text-foreground`,children:(0,W.jsx)(o,{className:`size-3.5`})})]}),a&&(0,W.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground text-xs py-2`,children:[(0,W.jsx)(V,{className:`size-4 animate-spin`}),(0,W.jsx)(`span`,{children:`Loading...`})]}),!a&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`space-y-1.5`,children:t?.logged_in?(0,W.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,W.jsx)(`div`,{className:`size-2 rounded-full bg-green-500 shrink-0`}),(0,W.jsx)(`span`,{className:`text-xs text-foreground truncate`,children:t.email})]}),(0,W.jsx)(`button`,{onClick:D,className:`text-text-subtle hover:text-foreground p-1 rounded hover:bg-muted transition-colors shrink-0`,title:`Sign out`,children:(0,W.jsx)(gt,{className:`size-3`})})]}):v?(0,W.jsxs)(`div`,{className:`space-y-2 text-center`,children:[(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Open the link below and enter the code:`}),(0,W.jsx)(`div`,{className:`font-mono text-2xl font-bold tracking-[0.3em] text-primary`,children:v.userCode}),(0,W.jsx)(`a`,{href:v.verifyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`text-xs text-primary hover:underline`,children:v.verifyUrl}),b&&(0,W.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 text-xs text-muted-foreground`,children:[(0,W.jsx)(V,{className:`size-3 animate-spin`}),(0,W.jsx)(`span`,{children:`Waiting for verification...`})]})]}):(0,W.jsxs)(`button`,{onClick:w,className:`w-full flex items-center justify-center gap-1.5 px-3 py-2 text-xs font-medium rounded-md border border-border hover:bg-muted transition-colors`,children:[(0,W.jsx)(Ie,{className:`size-3.5`}),`Sign in to PPM Cloud`]})}),t?.logged_in&&(0,W.jsx)(`div`,{className:`space-y-1.5`,children:t.linked?(0,W.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,W.jsx)(pt,{className:`size-3 text-primary shrink-0`}),(0,W.jsx)(`span`,{className:`text-foreground truncate`,children:t.device_name})]}),(0,W.jsx)(`button`,{onClick:E,disabled:f,className:`text-text-subtle hover:text-destructive p-1 rounded hover:bg-muted transition-colors shrink-0`,title:`Unlink device`,children:f?(0,W.jsx)(V,{className:`size-3 animate-spin`}):(0,W.jsx)($t,{className:`size-3`})})]}):(0,W.jsx)(`button`,{onClick:T,disabled:u,className:`w-full flex items-center justify-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50`,children:u?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(V,{className:`size-3.5 animate-spin`}),` Linking...`]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(pt,{className:`size-3.5`}),` Link this machine`]})})}),(0,W.jsx)(`div`,{className:`border-t border-border`}),r?.localUrl&&(0,W.jsxs)(`div`,{className:`space-y-1`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`Local Network`}),(0,W.jsx)(b_,{url:r.localUrl,copied:g,onCopy:S})]}),!O&&!c&&(0,W.jsxs)(`button`,{onClick:C,className:`w-full flex items-center justify-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors`,children:[(0,W.jsx)(Kt,{className:`size-3.5`}),`Start Sharing`]}),c&&(0,W.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-2`,children:[(0,W.jsx)(V,{className:`size-5 animate-spin text-primary`}),(0,W.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Starting tunnel...`})]}),O&&(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`Public URL`}),(0,W.jsx)(`div`,{className:`flex justify-center`,children:(0,W.jsx)(`div`,{className:`p-3 rounded-lg`,style:{backgroundColor:`#ffffff`,colorScheme:`light`},children:(0,W.jsx)(v_,{value:O,size:180,bgColor:`#ffffff`,fgColor:`#000000`,level:`L`,style:{display:`block`}})})}),(0,W.jsx)(b_,{url:O,copied:g,onCopy:S})]}),t?.logged_in&&t.linked&&(0,W.jsxs)(`a`,{href:t.cloud_url+`/dashboard`,target:`_blank`,rel:`noopener noreferrer`,className:`flex items-center justify-center gap-1.5 w-full px-3 py-1.5 text-xs text-muted-foreground hover:text-foreground rounded-md border border-border hover:bg-muted transition-colors`,children:[(0,W.jsx)(Ve,{className:`size-3`}),`Open Cloud Dashboard`]}),m&&(0,W.jsx)(`p`,{className:`text-xs text-destructive`,children:m})]})]})}function b_({url:e,copied:t,onCopy:n}){return(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(`input`,{readOnly:!0,value:e,className:`flex-1 text-xs font-mono text-foreground bg-muted px-2 py-1.5 rounded border border-border truncate`,onClick:e=>e.target.select()}),(0,W.jsx)(`button`,{onClick:()=>n(e),className:`flex items-center justify-center size-7 rounded border border-border text-muted-foreground bg-muted hover:bg-accent hover:text-foreground transition-colors shrink-0`,title:`Copy URL`,children:t===e?(0,W.jsx)(Ee,{className:`size-3.5 text-primary`}):(0,W.jsx)(Le,{className:`size-3.5`})})]})}var x_=`hienlh/ppm`;async function S_(e,t){let n=`(could not fetch)`;try{let e=await(await fetch(`/api/logs/recent`)).json();e.ok&&(n=e.data.logs||`(empty)`)}catch{}let r=``;if(t?.sessionId&&t?.projectName)try{let e=await B.get(`${z(t.projectName)}/chat/sessions/${t.sessionId}/logs?tail=100`);e.logs&&(r=e.logs)}catch{}return[`## Environment`,`- PPM: v${e??`unknown`}`,`- Browser: ${navigator.userAgent}`,``,`## Description`,`<!-- Describe the bug -->`,``,`## Steps to Reproduce`,`1. `,``,`## Expected Behavior`,``,...r?[`## Chat Session Logs (${t?.sessionId?.slice(0,8)})`,"```",r,"```",``]:[],`## Server Logs (last 30 lines)`,"```",n,"```"].join(`
|
|
23
|
+
`)}function C_(e){let t=`https://github.com/${x_}/issues/new?title=bug%3A%20&body=${encodeURIComponent(e)}`;window.open(t,`_blank`)}async function w_(e){try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function T_(e,t){S_(e,t).then(e=>{window.dispatchEvent(new CustomEvent(`open-bug-report`,{detail:e}))})}var E_=[`linear-gradient(135deg, #667eea, #764ba2)`,`linear-gradient(135deg, #f5576c, #f093fb)`,`linear-gradient(135deg, #4facfe, #00c6ff)`,`linear-gradient(135deg, #43e97b, #38f9d7)`,`linear-gradient(135deg, #fa709a, #fee140)`,`linear-gradient(135deg, #a18cd1, #6a3de8)`,`linear-gradient(135deg, #fd7043, #ff8a65)`,`linear-gradient(135deg, #26c6da, #0097a7)`,`linear-gradient(135deg, #ab47bc, #7b1fa2)`,`linear-gradient(135deg, #ef5350, #b71c1c)`,`linear-gradient(135deg, #1976d2, #42a5f5)`,`linear-gradient(135deg, #2e7d32, #66bb6a)`];function D_(e,t){return e??E_[t%E_.length]}function O_(e,t){let n=e.split(/[-_.\s]+/).filter(Boolean),r=(n[0]?.[0]??e[0]??`?`).toUpperCase(),i=n.length>1?r+(n[1][0]??``).toUpperCase():r,a=t.filter(t=>t!==e);if(!a.map(e=>(e.split(/[-_.\s]+/).filter(Boolean)[0]?.[0]??e[0]??``).toUpperCase()).includes(r))return r;if(!a.map(e=>{let t=e.split(/[-_.\s]+/).filter(Boolean),n=(t[0]?.[0]??e[0]??``).toUpperCase(),r=t.length>1?(t[1][0]??``).toUpperCase():n;return t.length>1?n+r:n}).includes(i))return i;let o=t.indexOf(e);return String(o>=0?o+1:`?`)}function k_({onSuccess:e,onCancel:t,footerClassName:n}){let{addProject:r}=ap(),[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(``),[c,l]=(0,H.useState)([]),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(!1),[m,h]=(0,H.useState)(!1),[g,_]=(0,H.useState)(``),v=(0,H.useRef)(null),y=(0,H.useRef)(null);(0,H.useEffect)(()=>{if(v.current&&clearTimeout(v.current),!i.trim()){l([]),d(!1);return}v.current=setTimeout(async()=>{p(!0);try{l(await B.get(`/api/projects/suggest-dirs?q=${encodeURIComponent(i)}`)??[]),d(!0)}catch{l([])}finally{p(!1)}},250)},[i]),(0,H.useEffect)(()=>{function e(e){y.current&&!y.current.contains(e.target)&&d(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);function b(e){a(e.path),o||s(e.name),d(!1)}async function x(t){if(t?.preventDefault(),!i.trim()){_(`Path is required`);return}_(``),h(!0);try{await r(i.trim(),o.trim()||void 0),e()}catch(e){_(e instanceof Error?e.message:`Failed to add project`)}finally{h(!1)}}return(0,W.jsxs)(`form`,{onSubmit:x,className:`flex flex-col gap-3`,children:[(0,W.jsxs)(`div`,{ref:y,className:`relative`,children:[(0,W.jsx)(`label`,{className:`block text-xs font-medium text-foreground mb-1`,children:`Project path`}),(0,W.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,W.jsxs)(`div`,{className:`relative flex items-center flex-1`,children:[(0,W.jsx)(Ze,{className:`absolute left-2.5 size-3.5 text-text-subtle pointer-events-none`}),(0,W.jsx)(`input`,{type:`text`,value:i,onChange:e=>{a(e.target.value),_(``)},onFocus:()=>c.length>0&&d(!0),placeholder:`/path/to/project`,className:`w-full pl-8 pr-3 py-2 rounded-md border border-border bg-background text-sm focus:outline-none focus:ring-1 focus:ring-primary`,autoFocus:!0,autoComplete:`off`}),f&&(0,W.jsx)(V,{className:`absolute right-2.5 size-3.5 text-text-subtle animate-spin`})]}),(0,W.jsx)(Tg,{mode:`folder`,onSelect:e=>{a(e),o||s(e.split(`/`).pop()??``),_(``)}})]}),u&&c.length>0&&(0,W.jsx)(`div`,{className:`absolute top-full left-0 right-0 mt-1 z-10 bg-popover border border-border rounded-md shadow-md max-h-48 overflow-y-auto`,children:c.map(e=>(0,W.jsxs)(`button`,{type:`button`,onMouseDown:()=>b(e),className:`w-full flex flex-col items-start px-3 py-2 text-left hover:bg-accent/50 transition-colors`,children:[(0,W.jsx)(`span`,{className:`text-sm font-medium truncate w-full`,children:e.name}),(0,W.jsx)(`span`,{className:`text-xs text-text-subtle truncate w-full`,children:e.path})]},e.path))})]}),(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`label`,{className:`block text-xs font-medium text-foreground mb-1`,children:[`Display name `,(0,W.jsx)(`span`,{className:`text-muted-foreground`,children:`(optional)`})]}),(0,W.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`my-project`,className:`w-full px-3 py-2 rounded-md border border-border bg-background text-sm focus:outline-none focus:ring-1 focus:ring-primary`})]}),g&&(0,W.jsx)(`p`,{className:`text-xs text-destructive`,children:g}),(0,W.jsxs)(`div`,{className:L(`flex justify-end gap-2 pt-1`,n),children:[(0,W.jsx)(`button`,{type:`button`,onClick:t,className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,W.jsx)(`button`,{type:`submit`,disabled:m||!i.trim(),className:`px-3 py-1.5 text-sm bg-primary text-white rounded-md hover:bg-primary/90 transition-colors disabled:opacity-50`,children:m?`Adding…`:`Add Project`})]})]})}function A_({name:e,color:t,active:n,allNames:r}){let i=O_(e,r),a=Jp((0,H.useMemo)(()=>Xp(e),[e]));return(0,W.jsxs)(`div`,{className:`relative`,children:[(0,W.jsx)(`div`,{className:L(`size-10 rounded-full flex items-center justify-center text-xs font-bold text-white select-none shrink-0`,n&&`ring-2 ring-primary ring-offset-2 ring-offset-background`),style:{background:t},children:i}),a&&(0,W.jsx)(`div`,{className:L(`absolute -top-0.5 -right-0.5 size-2.5 rounded-full border-2 border-background`,qp(a))})]})}function j_({current:e,onChange:t}){return(0,W.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:E_.map(n=>(0,W.jsx)(`button`,{type:`button`,onClick:()=>t(n),className:L(`size-8 rounded-full border-2 transition-all`,e===n?`border-primary scale-110`:`border-transparent hover:scale-105`),style:{background:n}},n))})}function M_(){let{projects:e,activeProject:t,setActiveProject:n,setProjectColor:r,reorderProjects:i,renameProject:a,deleteProject:o,customOrder:s}=ap();op(e=>e.openTab);let c=U(e=>e.version),l=(0,H.useCallback)(()=>T_(c),[c]),[u,d]=(0,H.useState)(null),[f,p]=(0,H.useState)(null),m=ip(e,s),h=m.map(e=>e.name),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(``),[b,x]=(0,H.useState)(``),[S,C]=(0,H.useState)(!1),[w,T]=(0,H.useState)(``),[E,D]=(0,H.useState)(!1),[O,k]=(0,H.useState)(!1),[A,j]=(0,H.useState)(``),[ee,te]=(0,H.useState)(``),[M,N]=(0,H.useState)(!1),[P,F]=(0,H.useState)(!1),ne=(0,H.useRef)(null),I=(0,H.useRef)(null),re=(0,H.useRef)(!1),R=(0,H.useRef)(!1),ie=(0,H.useRef)(typeof window<`u`&&window.matchMedia(`(hover: hover) and (pointer: fine)`).matches);(0,H.useEffect)(()=>()=>{ne.current&&clearTimeout(ne.current),I.current&&clearTimeout(I.current)},[]);let ae=(0,H.useCallback)(()=>{ie.current&&(re.current=!0,I.current&&=(clearTimeout(I.current),null),ne.current=setTimeout(()=>F(!0),150))},[]),z=(0,H.useCallback)(()=>{ie.current&&(re.current=!1,ne.current&&=(clearTimeout(ne.current),null),!R.current&&(I.current=setTimeout(()=>F(!1),300)))},[]),oe=(0,H.useCallback)(e=>{R.current=e,!e&&!re.current&&(I.current=setTimeout(()=>F(!1),300))},[]),B=(0,H.useCallback)(e=>{y(e),x(e),_(!0)},[]),se=(0,H.useCallback)(e=>{T(e),C(!0)},[]),ce=(0,H.useCallback)((e,t)=>{j(e),te(t),k(!0)},[]);async function le(){if(!b.trim()||b===v){_(!1);return}try{await a(v,b.trim())}catch{}_(!1)}async function ue(){try{await o(w)}catch{}C(!1)}async function de(){N(!0);try{await r(A,ee),k(!1)}catch(e){console.error(`Failed to save color:`,e)}finally{N(!1)}}function fe(){D(!0)}let[pe,me]=(0,H.useState)(!1),he=(0,H.useRef)(null),[ge,_e]=(0,H.useState)(null);(0,H.useEffect)(()=>{if(!pe||!he.current){_e(null);return}let e=he.current.getBoundingClientRect();_e({left:e.right+6,bottom:window.innerHeight-e.bottom})},[pe]);function ve(){let{sidebarCollapsed:e,toggleSidebar:t,setSidebarActiveTab:n}=U.getState();e&&t(),n(`settings`)}return(0,W.jsx)(`div`,{className:`hidden md:block relative w-[52px] min-w-[52px]`,onMouseEnter:ae,onMouseLeave:z,children:(0,W.jsxs)(`aside`,{className:L(`absolute inset-y-0 left-0 flex flex-col bg-background border-r border-border overflow-hidden transition-[width] duration-200 ease-out`,P?`w-[240px] shadow-lg z-30`:`w-[52px]`),children:[(0,W.jsxs)(`div`,{className:`shrink-0 flex flex-col items-center justify-center h-[41px] border-b border-border gap-0.5`,children:[(0,W.jsx)(`span`,{className:`text-[11px] font-bold text-primary leading-none`,children:`PPM`}),c&&(0,W.jsxs)(`span`,{className:`text-[8px] text-text-subtle leading-none`,children:[`v`,c]})]}),(0,W.jsxs)(`div`,{className:L(`flex-1 overflow-y-auto py-2 flex flex-col gap-2 min-h-0`,P?`items-stretch px-1.5`:`items-center`),children:[m.map((e,r)=>{let a=D_(e.color,r),o=t?.name===e.name;return(0,W.jsxs)(Sm,{onOpenChange:oe,children:[(0,W.jsx)(Cm,{asChild:!0,children:(0,W.jsxs)(`button`,{draggable:!0,onDragStart:()=>d(r),onDragOver:e=>{e.preventDefault(),p(r)},onDragLeave:()=>p(null),onDragEnd:()=>{d(null),p(null)},onDrop:()=>{if(u!=null&&u!==r){let e=m.map(e=>e.name),[t]=e.splice(u,1);e.splice(r,0,t),i(e)}d(null),p(null)},onClick:()=>n(e),className:L(`p-1 rounded-lg transition-all`,!P&&`hover:bg-surface-elevated`,u===r&&`opacity-40 scale-90`,f===r&&u!==r&&`ring-2 ring-accent`,P&&`w-full flex items-center gap-2 px-2 hover:bg-muted/50`),children:[(0,W.jsx)(A_,{name:e.name,color:a,active:o,allNames:h}),P&&(0,W.jsxs)(`div`,{className:`min-w-0 text-left`,children:[(0,W.jsx)(`p`,{className:`text-sm font-medium truncate`,children:e.name}),(0,W.jsx)(`p`,{className:`text-[11px] text-text-subtle truncate [direction:rtl] text-left`,children:e.path})]})]})}),(0,W.jsxs)(wm,{children:[(0,W.jsxs)(Tm,{onClick:()=>B(e.name),children:[(0,W.jsx)(Ot,{className:`size-3.5 mr-2`}),` Rename`]}),(0,W.jsxs)(Tm,{onClick:()=>ce(e.name,a),children:[(0,W.jsx)(Tt,{className:`size-3.5 mr-2`}),` Change Color`]}),(0,W.jsxs)(Tm,{onClick:()=>navigator.clipboard.writeText(e.path),children:[(0,W.jsx)(Le,{className:`size-3.5 mr-2`}),` Copy Path`]}),(0,W.jsx)(Em,{}),(0,W.jsxs)(Tm,{className:`text-destructive focus:text-destructive`,onClick:()=>se(e.name),children:[(0,W.jsx)(Xt,{className:`size-3.5 mr-2`}),` Delete`]})]})]},e.name)}),(0,W.jsxs)(`button`,{onClick:fe,className:L(`border-2 border-dashed border-border flex items-center justify-center text-text-subtle hover:border-primary hover:text-primary transition-colors`,P?`w-full h-10 gap-2 rounded-lg px-2`:`size-10 rounded-full`),children:[(0,W.jsx)(Nt,{className:`size-4 shrink-0`}),P&&(0,W.jsx)(`span`,{className:`text-sm whitespace-nowrap`,children:`Add Project`})]})]}),(0,W.jsxs)(`div`,{className:L(`shrink-0 flex flex-col gap-1 py-2 border-t border-border`,P?`items-stretch px-1.5`:`items-center`),children:[(0,W.jsxs)(`button`,{ref:he,onClick:()=>me(!pe),className:L(`flex items-center rounded-md transition-colors`,P?`w-full h-8 gap-2 px-2 justify-start`:`justify-center size-8`,pe?`text-primary bg-primary/10`:`text-text-subtle hover:text-foreground hover:bg-surface-elevated`),children:[(0,W.jsx)(Ie,{className:`size-4 shrink-0`}),P&&(0,W.jsx)(`span`,{className:`text-xs whitespace-nowrap`,children:`Cloud & Share`})]}),pe&&ge&&(0,sn.createPortal)((0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>me(!1)}),(0,W.jsx)(`div`,{className:`fixed z-50`,style:{left:ge.left,bottom:ge.bottom},children:(0,W.jsx)(y_,{onClose:()=>me(!1)})})]}),document.body),(0,W.jsxs)(`button`,{onClick:l,className:L(`flex items-center rounded-md text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,P?`w-full h-8 gap-2 px-2 justify-start`:`justify-center size-8`),children:[(0,W.jsx)(we,{className:`size-4 shrink-0`}),P&&(0,W.jsx)(`span`,{className:`text-xs whitespace-nowrap`,children:`Report Bug`})]}),(0,W.jsxs)(`button`,{onClick:ve,className:L(`flex items-center rounded-md text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,P?`w-full h-8 gap-2 px-2 justify-start`:`justify-center size-8`),children:[(0,W.jsx)(Gt,{className:`size-4 shrink-0`}),P&&(0,W.jsx)(`span`,{className:`text-xs whitespace-nowrap`,children:`Settings`})]})]}),(0,W.jsx)(Am,{open:E,onOpenChange:D,children:(0,W.jsxs)(Pm,{className:`sm:max-w-sm`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Add Project`})}),(0,W.jsx)(k_,{onSuccess:()=>D(!1),onCancel:()=>D(!1)})]})}),(0,W.jsx)(Am,{open:g,onOpenChange:_,children:(0,W.jsxs)(Pm,{className:`sm:max-w-sm`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Rename Project`})}),(0,W.jsx)(`input`,{type:`text`,value:b,onChange:e=>x(e.target.value),onKeyDown:e=>{e.key===`Enter`&&le()},className:`w-full px-3 py-2 rounded-md border border-border bg-background text-sm focus:outline-none focus:ring-1 focus:ring-primary`,autoFocus:!0}),(0,W.jsxs)(Im,{children:[(0,W.jsx)(`button`,{onClick:()=>_(!1),className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:le,className:`px-3 py-1.5 text-sm bg-primary text-white rounded-md hover:bg-primary/90 transition-colors`,children:`Rename`})]})]})}),(0,W.jsx)(Am,{open:S,onOpenChange:C,children:(0,W.jsxs)(Pm,{className:`sm:max-w-sm`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Delete Project`})}),(0,W.jsxs)(`p`,{className:`text-sm text-text-secondary`,children:[`Remove `,(0,W.jsx)(`strong`,{className:`text-foreground`,children:w}),` from PPM? The files on disk won't be deleted.`]}),(0,W.jsxs)(Im,{children:[(0,W.jsx)(`button`,{onClick:()=>C(!1),className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:ue,className:`px-3 py-1.5 text-sm bg-destructive text-white rounded-md hover:bg-destructive/90 transition-colors`,children:`Delete`})]})]})}),(0,W.jsx)(Am,{open:O,onOpenChange:k,children:(0,W.jsxs)(Pm,{className:`sm:max-w-sm`,children:[(0,W.jsx)(Fm,{children:(0,W.jsx)(Lm,{children:`Change Color`})}),(0,W.jsx)(j_,{current:ee,onChange:te}),(0,W.jsxs)(Im,{children:[(0,W.jsx)(`button`,{onClick:()=>k(!1),className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:de,disabled:M,className:`px-3 py-1.5 text-sm bg-primary text-white rounded-md hover:bg-primary/90 transition-colors disabled:opacity-50`,children:M?`Saving…`:`Save`})]})]})})]})})}var N_=[{type:`terminal`,label:`Terminal`},{type:`chat`,label:`AI Chat`},{type:`git-graph`,label:`Git Graph`},{type:`settings`,label:`Settings`}],P_=Object.fromEntries(N_.map(e=>[e.type,e.label])),F_={terminal:Yt,chat:vt,editor:Ge,database:Re,sqlite:Re,postgres:Re,"git-graph":tt,"git-diff":Ke,settings:Gt,ports:rt,"extension-webview":It};function I_({onMenuPress:e,onProjectsPress:t}){let n=Q(e=>e.focusedPanelId),r=Q(e=>e.panels),i=Q(e=>e.grid),{tabs:a,tabPanelMap:c}=(0,H.useMemo)(()=>{let e=i.flat(),t=[],n={};for(let i of e){let e=r[i];if(e)for(let r of e.tabs)t.push(r),n[r.id]=i}return{tabs:t,tabPanelMap:n}},[r,i]),l=r[n]?.activeTabId??null,u=(0,H.useRef)(new Map),d=(0,H.useRef)(null),f=(0,H.useRef)(a.length),p=Jp(e=>e.notifications),{canScrollLeft:m,canScrollRight:h,scrollRight:g}=Zp(d),_=$p(d.current,u.current,a,p),[v,y]=(0,H.useState)(null),[b,x]=(0,H.useState)(!1),S=(0,H.useRef)(null);(0,H.useEffect)(()=>{a.length>f.current&&l&&u.current.get(l)?.scrollIntoView({behavior:`smooth`,block:`nearest`,inline:`nearest`}),f.current=a.length},[a.length,l]);let C=(0,H.useCallback)(e=>{S.current=setTimeout(()=>y(e),400)},[]),w=(0,H.useCallback)(()=>{S.current&&=(clearTimeout(S.current),null)},[]),T=v?a.find(e=>e.id===v):null,E=v?c[v]??n:n,D=r[E]?.tabs??[],O=v?D.findIndex(e=>e.id===v):-1,k=Lf(i,E)?i.length<3:!1,A=i.flat().filter(e=>e!==E);function j(e){let t=c[e]??n,r=(Q.getState().panels[t]?.tabs??[]).findIndex(t=>t.id===e);r>0&&Q.getState().reorderTab(e,t,r-1)}function ee(e){let t=c[e]??n,r=Q.getState().panels[t]?.tabs??[],i=r.findIndex(t=>t.id===e);i<r.length-1&&Q.getState().reorderTab(e,t,i+1)}function te(e){let t=c[e]??n;Q.getState().splitPanel(`down`,e,t)}function M(e,t){let r=c[e]??n;Q.getState().moveTab(e,r,t)}let{activeProject:N}=ap.getState();function P(e){let t=Q.getState(),n=t.grid[0]?.[0]??t.focusedPanelId,r=e===`git-graph`||e===`git-diff`||e===`terminal`||e===`chat`?{projectName:N?.name}:void 0;t.openTab({type:e,title:P_[e]??e,metadata:r,projectId:N?.name??null,closable:!0},n),x(!1)}let{activeProject:F,projects:ne,customOrder:I}=ap(),re=ip(ne,I??null),R=re.map(e=>e.name),ie=re.findIndex(e=>e.name===F?.name),ae=F?D_(F.color,ie>=0?ie:0):`#4f86c6`,z=F?O_(F.name,R):null;return(0,W.jsxs)(`nav`,{className:`fixed bottom-0 left-0 right-0 md:hidden bg-background border-t border-border z-40 select-none`,children:[(0,W.jsxs)(`div`,{className:`flex items-center h-12`,children:[(0,W.jsxs)(`div`,{className:L(`flex items-center shrink-0 bg-background relative z-10 transition-all duration-200`,m?`rounded-r-2xl shadow-[6px_0_12px_-4px_rgba(0,0,0,0.12)]`:`border-r border-border`),children:[(0,W.jsx)(`button`,{onClick:e,className:`flex items-center justify-center size-12 shrink-0 text-text-secondary`,children:(0,W.jsx)(_t,{className:`size-5`})}),(0,W.jsx)(`div`,{className:`w-px self-stretch bg-border shrink-0`}),(0,W.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-12 shrink-0 text-text-secondary`,title:`Switch project`,children:z?(0,W.jsx)(`div`,{className:`size-7 rounded-full flex items-center justify-center text-[10px] font-bold text-white`,style:{background:ae},children:z}):(0,W.jsx)(dt,{className:`size-5`})}),(0,W.jsx)(`div`,{className:`w-px self-stretch bg-border shrink-0`}),(0,W.jsxs)(`button`,{onClick:()=>Up(),className:L(`flex items-center justify-center shrink-0 text-text-secondary gap-1.5 h-12`,a.length===0?`px-4`:`w-12`),children:[(0,W.jsx)(Nt,{className:`size-4`}),a.length===0&&(0,W.jsx)(`span`,{className:`text-xs`,children:`New Tab`})]})]}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0 relative flex items-center h-12 -ml-4`,children:[(0,W.jsx)(`div`,{ref:d,className:`flex-1 min-w-0 flex items-center h-12 overflow-x-auto scrollbar-none pl-4`,children:a.map(e=>{let t=F_[e.type],n=e.id===l,r=e.type===`chat`?e.metadata?.sessionId:void 0,i=r?p.get(r):void 0,a=i&&i.count>0?i.type:null;return(0,W.jsxs)(`button`,{ref:t=>{t?u.current.set(e.id,t):u.current.delete(e.id)},onClick:()=>{Q.getState().setActiveTab(e.id),r&&Jp.getState().clearForSession(r)},onTouchStart:()=>C(e.id),onTouchEnd:w,onTouchMove:w,onContextMenu:e=>e.preventDefault(),className:L(`flex items-center gap-1 px-3 h-12 whitespace-nowrap text-xs shrink-0 border-t-2 transition-colors`,n?`border-primary bg-surface text-primary`:`border-transparent text-text-secondary`),children:[(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(t,{className:`size-4`}),a&&!n&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -right-1 size-2 rounded-full`,qp(a))})]}),(0,W.jsx)(`span`,{className:`max-w-[80px] truncate`,children:e.title}),e.closable&&(0,W.jsx)(`span`,{role:`button`,tabIndex:0,onClick:t=>{t.stopPropagation(),Q.getState().closeTab(e.id)},className:`ml-0.5 p-0.5 rounded hover:bg-surface-elevated`,children:(0,W.jsx)(o,{className:`size-3`})})]},e.id)})}),h&&(0,W.jsx)(`button`,{onClick:g,className:`absolute right-0 z-10 flex items-center justify-center size-8 bg-gradient-to-l from-background via-background to-transparent`,children:(0,W.jsxs)(`span`,{className:`relative`,children:[(0,W.jsx)(s,{className:`size-3.5 text-text-secondary`}),_.right&&(0,W.jsx)(`span`,{className:L(`absolute -top-1 -left-0.5 size-1.5 rounded-full`,qp(_.right))})]})})]})]}),b&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-50`,onClick:()=>x(!1)}),(0,W.jsxs)(`div`,{className:`fixed bottom-14 left-2 right-2 z-50 bg-surface border border-border rounded-lg shadow-lg overflow-hidden animate-in slide-in-from-bottom-2 duration-150`,children:[(0,W.jsx)(`div`,{className:`px-3 py-2 text-xs text-text-secondary border-b border-border`,children:`New Tab`}),N_.map(e=>{let t=F_[e.type];return(0,W.jsxs)(`button`,{onClick:()=>P(e.type),className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(t,{className:`size-4`}),` `,e.label]},e.type)})]})]}),T&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-50`,onClick:()=>y(null)}),(0,W.jsxs)(`div`,{className:`fixed bottom-14 left-2 right-2 z-50 bg-surface border border-border rounded-lg shadow-lg overflow-hidden animate-in slide-in-from-bottom-2 duration-150`,children:[(0,W.jsx)(`div`,{className:`px-3 py-2 text-xs text-text-secondary border-b border-border truncate`,children:T.title}),O>0&&(0,W.jsxs)(`button`,{onClick:()=>{j(v),y(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(ge,{className:`size-4`}),` Move Left`]}),O<a.length-1&&(0,W.jsxs)(`button`,{onClick:()=>{ee(v),y(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(_e,{className:`size-4`}),` Move Right`]}),k&&D.length>1&&(0,W.jsxs)(`button`,{onClick:()=>{te(v),y(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(qt,{className:`size-4`}),` Split to Bottom`]}),A.map((e,t)=>(0,W.jsxs)(`button`,{onClick:()=>{M(v,e),y(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,W.jsx)(Ct,{className:`size-4`}),` Move to Panel `,t+1===1?`Top`:`Bottom`]},e))]})]})]})}var L_=[{id:`explorer`,label:`Explorer`,icon:Ze},{id:`git`,label:`Git`,icon:tt},{id:`database`,label:`Database`,icon:Re},{id:`settings`,label:`Settings`,icon:Gt}];function R_({isOpen:e,onClose:t,initialTab:n}){let{activeProject:r}=ap(),i=U(e=>e.version),[a,s]=(0,H.useState)(n??`explorer`);(0,H.useEffect)(()=>{n&&s(n)},[n]);let c=(0,H.useCallback)(()=>T_(i),[i]);return(0,W.jsxs)(`div`,{className:L(`fixed inset-0 z-50 md:hidden transition-opacity duration-200`,e?`opacity-100`:`opacity-0 pointer-events-none`),children:[(0,W.jsx)(`div`,{className:`absolute inset-0 bg-black/50`,onClick:t,"aria-label":`Close drawer`}),(0,W.jsxs)(`div`,{className:L(`fixed left-0 top-0 bottom-0 w-[90vw] bg-background border-r border-border`,`z-50 flex flex-col transition-transform duration-300 ease-out`,e?`translate-x-0`:`-translate-x-full`),children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-border shrink-0`,children:[(0,W.jsx)(`span`,{className:`text-sm font-bold text-primary tracking-tight`,children:r?.name??`PPM`}),(0,W.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-8 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,W.jsx)(o,{className:`size-4`})})]}),(0,W.jsxs)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:[a===`explorer`&&(r?(0,W.jsx)(qm,{onFileOpen:t}):(0,W.jsx)(`p`,{className:`px-4 py-6 text-xs text-text-secondary text-center`,children:`Select a project from the bottom nav bar`})),a===`git`&&(0,W.jsx)(uh,{metadata:{projectName:r?.name},onNavigate:t}),a===`database`&&(0,W.jsx)(jg,{}),a===`settings`&&(0,W.jsx)(dg,{})]}),(0,W.jsxs)(`div`,{className:`shrink-0 border-t border-border`,children:[(0,W.jsx)(`div`,{className:`flex items-center`,children:L_.map(e=>{let t=e.icon;return(0,W.jsxs)(`button`,{onClick:()=>s(e.id),className:L(`flex-1 flex flex-col items-center gap-0.5 py-2.5 text-[10px] transition-colors`,a===e.id?`text-primary`:`text-text-secondary`),children:[(0,W.jsx)(t,{className:`size-4`}),(0,W.jsx)(`span`,{children:e.label})]},e.id)})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-t border-border`,children:[i&&(0,W.jsxs)(`span`,{className:`text-[10px] text-text-subtle`,children:[`v`,i]}),(0,W.jsxs)(`button`,{onClick:c,className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,W.jsx)(we,{className:`size-3`}),(0,W.jsx)(`span`,{children:`Report Bug`})]})]})]})]})]})}function z_({name:e,color:t,allNames:n}){let r=O_(e,n);return(0,W.jsx)(`div`,{className:`size-10 rounded-full flex items-center justify-center text-xs font-bold text-white shrink-0`,style:{background:t},children:r})}function B_({isOpen:e,onClose:t}){let{projects:n,activeProject:r,setActiveProject:i,setProjectColor:s,reorderProjects:c,renameProject:l,deleteProject:u,customOrder:d}=ap();op(e=>e.openTab);let f=U(e=>e.version),p=ip(n,d),m=p.map(e=>e.name),[h,g]=(0,H.useState)(`list`),[_,v]=(0,H.useState)(null),[y,b]=(0,H.useState)(``),[x,S]=(0,H.useState)(!1),C=(0,H.useRef)(null),[w,T]=(0,H.useState)(null),[E,D]=(0,H.useState)(``),O=(0,H.useCallback)(e=>{C.current=setTimeout(()=>v(e),400)},[]),k=(0,H.useCallback)(()=>{C.current&&=(clearTimeout(C.current),null)},[]);function A(){g(`list`),t()}function j(e){let t=n.find(t=>t.name===e);t&&(i(t),A())}function ee(){g(`add`)}function te(){if(A(),window.innerWidth<768){window.dispatchEvent(new Event(`open-mobile-settings`));return}let{sidebarCollapsed:e,toggleSidebar:t,setSidebarActiveTab:n}=U.getState();e&&t(),n(`settings`)}async function M(){if(!w||!E.trim()||E===w){T(null);return}try{await l(w,E.trim())}catch{}T(null)}async function N(e){v(null);try{await u(e)}catch{}}async function P(e,t){try{await s(e,t),S(!1),v(null)}catch(e){console.error(`Failed to save color:`,e)}}_&&p.find(e=>e.name===_);let F=_?p.findIndex(e=>e.name===_):-1,ne=_?[{label:`Rename`,icon:Ot,onClick:()=>{D(_),T(_),v(null)}},{label:`Change Color`,icon:Tt,onClick:()=>{let e=p.findIndex(e=>e.name===_),t=p[e];b(D_(t?.color,e)),S(!0)}},...F>0?[{label:`Move Up`,icon:Oe,onClick:()=>{let e=p.map(e=>e.name),[t]=e.splice(F,1);e.splice(F-1,0,t),c(e),v(null)}}]:[],...F<p.length-1?[{label:`Move Down`,icon:a,onClick:()=>{let e=p.map(e=>e.name),[t]=e.splice(F,1);e.splice(F+1,0,t),c(e),v(null)}}]:[],{label:`Delete`,icon:Xt,destructive:!0,onClick:()=>N(_)}]:[];return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:L(`fixed inset-0 z-50 md:hidden transition-opacity duration-200`,e?`opacity-100`:`opacity-0 pointer-events-none`),onClick:A,style:{backgroundColor:`rgba(0,0,0,0.5)`}}),(0,W.jsxs)(`div`,{className:L(`fixed bottom-0 left-0 right-0 z-50 md:hidden bg-background rounded-t-2xl border-t border-border shadow-2xl`,`transition-transform duration-300 ease-out`,e?`translate-y-0`:`translate-y-full`),children:[(0,W.jsx)(`div`,{className:`flex justify-center pt-3 pb-1`,children:(0,W.jsx)(`div`,{className:`w-10 h-1 rounded-full bg-border`})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2`,children:[h===`add`&&(0,W.jsx)(`button`,{onClick:()=>g(`list`),className:`flex items-center justify-center size-7 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,W.jsx)(ge,{className:`size-4`})}),(0,W.jsx)(`span`,{className:`text-sm font-semibold`,children:h===`add`?`Add Project`:`Projects`})]}),(0,W.jsx)(`button`,{onClick:A,className:`flex items-center justify-center size-7 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,W.jsx)(o,{className:`size-4`})})]}),h===`add`&&(0,W.jsx)(`div`,{className:`px-4 py-4`,children:(0,W.jsx)(k_,{onSuccess:()=>{g(`list`),t()},onCancel:()=>g(`list`),footerClassName:`pt-2`})}),(0,W.jsx)(`div`,{className:h===`add`?`hidden`:`max-h-[60vh] overflow-y-auto`,children:p.map((e,t)=>{let n=D_(e.color,t),i=r?.name===e.name,a=w===e.name;return(0,W.jsxs)(`div`,{className:L(`flex items-center gap-3 px-4 py-3 transition-colors active:bg-surface-elevated`,i&&`bg-accent/10`),onClick:()=>!a&&j(e.name),onTouchStart:()=>O(e.name),onTouchEnd:k,onTouchMove:k,children:[(0,W.jsx)(z_,{name:e.name,color:n,allNames:m}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[a?(0,W.jsx)(`input`,{type:`text`,value:E,onChange:e=>D(e.target.value),onKeyDown:e=>{e.key===`Enter`&&M(),e.key===`Escape`&&T(null)},onBlur:M,onClick:e=>e.stopPropagation(),className:`w-full bg-transparent border-b border-primary text-sm outline-none`,autoFocus:!0}):(0,W.jsx)(`p`,{className:`text-sm font-medium truncate`,children:e.name}),(0,W.jsx)(`p`,{className:`text-xs text-text-subtle truncate`,children:e.path})]}),i&&(0,W.jsx)(Ee,{className:`size-4 text-primary shrink-0`})]},e.name)})}),(0,W.jsx)(`div`,{className:`border-t border-border`,children:(0,W.jsxs)(`button`,{onClick:ee,className:`w-full flex items-center gap-3 px-4 py-3 text-text-secondary hover:bg-surface-elevated transition-colors`,children:[(0,W.jsx)(Nt,{className:`size-4 shrink-0`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Add Project`})]})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-t border-border`,children:[(0,W.jsxs)(`button`,{onClick:te,className:`flex items-center gap-2 text-text-secondary hover:text-foreground transition-colors`,children:[(0,W.jsx)(Gt,{className:`size-4`}),(0,W.jsx)(`span`,{className:`text-sm`,children:`Settings`})]}),f&&(0,W.jsxs)(`span`,{className:`text-xs text-text-subtle`,children:[`v`,f]})]})]}),_&&!x&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-[60] md:hidden`,onClick:()=>v(null)}),(0,W.jsxs)(`div`,{className:`fixed bottom-0 left-0 right-0 z-[61] md:hidden bg-surface border-t border-border rounded-t-2xl shadow-2xl animate-in slide-in-from-bottom-2 duration-150`,children:[(0,W.jsx)(`div`,{className:`px-4 py-2 border-b border-border`,children:(0,W.jsx)(`p`,{className:`text-xs font-medium text-text-secondary`,children:_})}),ne.map(e=>{let t=e.icon;return(0,W.jsxs)(`button`,{onClick:e.onClick,className:L(`w-full flex items-center gap-3 px-4 py-3 text-sm transition-colors active:bg-surface-elevated`,e.destructive?`text-destructive`:`text-foreground`),children:[(0,W.jsx)(t,{className:`size-4 shrink-0`}),e.label]},e.label)})]})]}),x&&_&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-[60] md:hidden`,onClick:()=>{S(!1),v(null)}}),(0,W.jsxs)(`div`,{className:`fixed bottom-0 left-0 right-0 z-[61] md:hidden bg-surface border-t border-border rounded-t-2xl shadow-2xl p-4 space-y-4`,children:[(0,W.jsx)(`p`,{className:`text-sm font-medium`,children:`Change Color`}),(0,W.jsx)(`div`,{className:`flex flex-wrap gap-3`,children:E_.map(e=>(0,W.jsx)(`button`,{type:`button`,onClick:()=>b(e),className:L(`size-9 rounded-full border-2 transition-all`,y===e?`border-primary scale-110`:`border-transparent`),style:{background:e}},e))}),(0,W.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,W.jsx)(`button`,{onClick:()=>{S(!1),v(null)},className:`flex-1 py-2 text-sm text-text-secondary border border-border rounded-md`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:()=>P(_,y),className:`flex-1 py-2 text-sm bg-primary text-white rounded-md`,children:`Save`})]})]})]})]})}function V_({onSuccess:e}){let[t,n]=(0,H.useState)(``),r=U(e=>e.deviceName),[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(!1);async function c(n){if(n.preventDefault(),t.trim()){s(!0),a(null);try{ae(t.trim());let n=await(await fetch(`/api/auth/check`,{headers:{Authorization:`Bearer ${t.trim()}`}})).json();if(!n.ok)throw Error(n.error??`Invalid token`);e()}catch(e){a(e instanceof Error?e.message:`Authentication failed`),localStorage.removeItem(`ppm-auth-token`)}finally{s(!1)}}}return(0,W.jsx)(`div`,{className:`min-h-dvh flex items-center justify-center bg-background p-4`,children:(0,W.jsxs)(`div`,{className:`w-full max-w-sm bg-surface rounded-lg border border-border p-6 space-y-6`,children:[(0,W.jsxs)(`div`,{className:`text-center space-y-2`,children:[(0,W.jsx)(`div`,{className:`flex items-center justify-center size-12 mx-auto rounded-full bg-surface-elevated`,children:(0,W.jsx)(ht,{className:`size-6 text-primary`})}),(0,W.jsx)(`h1`,{className:`text-xl font-semibold text-foreground`,children:`PPM`}),r&&(0,W.jsx)(`p`,{className:`text-xs text-text-subtle bg-surface-elevated inline-block px-2 py-0.5 rounded-full`,children:r}),(0,W.jsx)(`p`,{className:`text-sm text-text-secondary`,children:`Enter your access password to unlock`})]}),(0,W.jsxs)(`form`,{onSubmit:c,className:`space-y-4`,children:[(0,W.jsx)(`div`,{children:(0,W.jsx)(zm,{type:`password`,placeholder:`Auth token`,value:t,onChange:e=>n(e.target.value),className:`h-11 bg-background border-border`,autoFocus:!0})}),i&&(0,W.jsxs)(`div`,{className:`flex items-center gap-2 text-error text-sm`,children:[(0,W.jsx)(ke,{className:`size-4 shrink-0`}),(0,W.jsx)(`span`,{children:i})]}),(0,W.jsx)($,{type:`submit`,disabled:o||!t.trim(),className:`w-full h-11`,children:o?`Checking...`:`Unlock`})]})]})})}var H_=[`terminal`,`chat`,`editor`,`database`,`sqlite`,`postgres`,`git-graph`,`git-diff`,`settings`,`ports`];function U_(){let e=window.location.pathname,t=new URLSearchParams(window.location.search).get(`openChat`),n=e.match(/^\/project\/([^/]+)(?:\/([^/]+)(\/.*)?)?/);if(!n)return{projectName:null,tabType:null,tabIdentifier:null,openChat:t};let r=decodeURIComponent(n[1]),i=n[2]??null,a=n[3]?n[3].slice(1):null;return i===`tab`?{projectName:r,tabType:null,tabIdentifier:null,openChat:t}:{projectName:r,tabType:H_.includes(i)?i:null,tabIdentifier:a,openChat:t}}function W_(e,t){if(!e||e===`__global__`)return`/`;let n=`/project/${encodeURIComponent(e)}`;if(!t)return n;let r=t.indexOf(`@`),i=r===-1?t:t.slice(0,r),a=i.indexOf(`:`);if(a===-1)n+=`/${i}`;else{let e=i.slice(0,a),t=i.slice(a+1);n+=`/${e}/${t.replace(/[?#]/g,encodeURIComponent)}`}return n}function G_(e,t){return t?`${e}:${t}`:e}function K_(e,t,n){switch(e){case`editor`:return t?{filePath:t,projectName:n}:null;case`chat`:{if(!t)return null;let e=t.indexOf(`/`),r=e===-1?t:t.slice(e+1),i=e===-1?void 0:t.slice(0,e),a=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(r)?r:void 0;return{...a&&{sessionId:a},...i&&{providerId:i},projectName:n}}case`terminal`:return{terminalIndex:parseInt(t??`1`,10),projectName:n};case`git-graph`:return{projectName:n};case`git-diff`:return t?{filePath:t,projectName:n}:null;case`settings`:return{};case`database`:{let[e,n]=(t??``).split(`:`);return e?{connectionId:e,tableName:n??``}:null}case`sqlite`:return t?{filePath:t,projectName:n}:null;case`postgres`:{let[e,n]=(t??``).split(`:`);return e?{connectionId:e,tableName:n??``}:null}case`ports`:return null;default:return null}}function q_(e,t){switch(e){case`editor`:return t?.split(`/`).pop()??`File`;case`chat`:return`Chat`;case`terminal`:return`Terminal ${t??`1`}`;case`git-graph`:return`Git Graph`;case`git-diff`:return t?.split(`/`).pop()??`Diff`;case`settings`:return`Settings`;case`database`:return t??`Database`;case`sqlite`:return t?.split(`/`).pop()??`SQLite`;case`postgres`:return t??`PostgreSQL`;case`ports`:return`Ports`;default:return e}}function J_(e,t,n){let{tabs:r,setActiveTab:i,openTab:a}=op.getState(),o=G_(e,t),s=r.find(e=>e.id===o);if(s){i(s.id);return}let c=K_(e,t,n);c&&a({type:e,title:q_(e,t),projectId:n,closable:!0,metadata:c})}function Y_(){let e=op(e=>e.activeTabId),t=op(e=>e.currentProject),n=(0,H.useRef)(!1);(0,H.useEffect)(()=>{if(n.current){n.current=!1;return}let r=W_(t,e);window.location.pathname!==r&&window.history.pushState(null,``,r)},[e,t]),(0,H.useEffect)(()=>{function e(){let{tabType:e,tabIdentifier:t}=U_();if(!e)return;n.current=!0;let{tabs:r,setActiveTab:i}=op.getState(),a=G_(e,t),o=r.find(e=>e.id===a);if(o)i(o.id);else{let n=op.getState().currentProject;n&&J_(e,t,n)}}return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[])}var X_=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
24
24
|
<rect width="32" height="32" rx="6" fill="#3b82f6"/>
|
|
25
25
|
<text x="16" y="22" text-anchor="middle" font-family="system-ui,sans-serif" font-weight="700" font-size="11" fill="white">PPM</text>
|
|
26
|
-
</svg>`,
|
|
26
|
+
</svg>`,Z_=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
27
27
|
<rect width="32" height="32" rx="6" fill="#3b82f6"/>
|
|
28
28
|
<text x="16" y="22" text-anchor="middle" font-family="system-ui,sans-serif" font-weight="700" font-size="11" fill="white">PPM</text>
|
|
29
29
|
<circle cx="26" cy="6" r="5" fill="#ef4444"/>
|
|
30
|
-
</svg>`,X_=`data:image/svg+xml,${encodeURIComponent(J_)}`,Z_=`data:image/svg+xml,${encodeURIComponent(Y_)}`;function Q_(e){let t=document.getElementById(`ppm-favicon`);t&&(t.href=e?Z_:X_)}function $_(e,t,n){let r=[t,n||null,`PPM`].filter(Boolean).join(` - `);return e>0?`(${e}) ${r}`:r}function ev(){let e=ap(e=>e.activeProject),t=U(e=>e.deviceName);(0,H.useEffect)(()=>{let n=()=>{let n=Yp(Jp.getState());document.title=$_(n,e?.name,t??void 0),Q_(n>0)};return n(),Jp.subscribe(n)},[e?.name,t])}var tv=15e3,nv=c((e,t)=>({isDown:!1,downSince:null,showOverlay:!1,markDown:()=>{let{downSince:n}=t(),r=Date.now(),i=n??r;e({isDown:!0,downSince:i,showOverlay:r-i>=tv})},markUp:()=>{e({isDown:!1,downSince:null,showOverlay:!1})}})),rv=1e4,iv=2e3;function av(){(0,H.useEffect)(()=>{let e=!1,t,{markDown:n,markUp:r}=nv.getState();async function i(){try{let t=await fetch(`/api/health`,{cache:`no-store`});if(t.ok&&e){if(r(),`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload();return}t.ok&&r(),e=!1}catch{e=!0,n()}t=setTimeout(i,e?iv:rv)}return t=setTimeout(i,rv),()=>clearTimeout(t)},[])}var ov=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent);function sv(e){return e?e.replace(/Mod\+/g,ov?`⌘`:`Ctrl+`).replace(/Alt\+/g,ov?`⌥`:`Alt+`).replace(/Shift\+/g,ov?`⇧`:`Shift+`).replace(/Meta\+/g,`⌘`).replace(/Ctrl\+/g,ov?`⌃`:`Ctrl+`):``}function cv(e){let t=[];for(let n of e)n.type===`file`&&t.push({name:n.name,path:n.path}),n.children&&t.push(...cv(n.children));return t}function lv(e){return e?e.startsWith(`/`)||e.startsWith(`~/`)||e.startsWith(`~\\`)||/^[A-Za-z]:[/\\]/.test(e):!1}function uv(e){let t=e.replace(/\\/g,`/`);if(t.endsWith(`/`))return e;let n=Math.max(t.lastIndexOf(`/`),e.lastIndexOf(`\\`));return n>0?e.slice(0,n+1):e}var dv=new Map;function fv({open:e,onClose:t,initialQuery:n=``}){let[r,i]=(0,H.useState)(``),[a,o]=(0,H.useState)(0),[s,c]=(0,H.useState)([]),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)([]),p=(0,H.useRef)(null),m=(0,H.useRef)(null),h=op(e=>e.openTab),g=ap(e=>e.activeProject),_=ym(e=>e.tree),v=U(e=>e.setSidebarActiveTab),y=U(e=>e.sidebarCollapsed),b=U(e=>e.toggleSidebar),x=Hp(e=>e.getBinding),S=vm(e=>e.contributions),C=(0,H.useCallback)(async e=>{if(dv.has(e)){c(dv.get(e));return}u(!0);try{let t=await B.get(`/api/fs/list?dir=${encodeURIComponent(e)}`);dv.set(e,t),c(t)}catch{c([])}finally{u(!1)}},[]);(0,H.useEffect)(()=>{if(!lv(r)){c([]);return}C(uv(r))},[r,C]),(0,H.useEffect)(()=>{if(lv(r)||r.trim().length<2){f([]);return}let e=setTimeout(async()=>{try{f(await B.get(`/api/db/search?q=${encodeURIComponent(r.trim())}`)??[])}catch{f([])}},300);return()=>clearTimeout(e)},[r]);let w=(0,H.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0,r=(r,i)=>()=>{h({type:r,title:i,projectId:e,metadata:n,closable:!0}),t()},i=[{id:`chat`,label:`New AI Chat`,icon:vt,action:r(`chat`,`AI Chat`),keywords:`ai assistant claude`,group:`action`,shortcut:sv(x(`open-chat`))},{id:`terminal`,label:`New Terminal`,icon:Yt,action:r(`terminal`,`Terminal`),keywords:`bash shell console`,group:`action`,shortcut:sv(x(`open-terminal`))},{id:`git-graph`,label:`Git Graph`,icon:tt,action:r(`git-graph`,`Git Graph`),keywords:`branch history log`,group:`action`,shortcut:sv(x(`open-git-graph`))},{id:`ports`,label:`Port Forwarding`,icon:rt,action:r(`ports`,`Ports`),keywords:`web preview localhost port forward tunnel url`,group:`action`},{id:`postgres`,label:`PostgreSQL`,icon:Re,action:r(`postgres`,`PostgreSQL`),keywords:`database pg sql query`,group:`action`},{id:`voice-input`,label:`Voice Input`,icon:yt,action:()=>{window.dispatchEvent(new CustomEvent(`toggle-voice-input`)),t()},keywords:`speech microphone dictate voice`,group:`action`,shortcut:sv(x(`voice-input`))},{id:`git-status`,label:`Git Status`,icon:nt,action:()=>{v(`git`),t()},keywords:`changes diff staged`,group:`action`,shortcut:sv(x(`open-git-status`))},{id:`settings`,label:`Settings`,icon:Gt,action:()=>{y&&b(),v(`settings`),t()},keywords:`config preferences theme`,group:`action`,shortcut:sv(x(`open-settings`))}],a=(S?.commands??[]).map(e=>({id:`ext:${e.command}`,label:e.title,hint:e.category,icon:It,group:`action`,keywords:`extension ${e.command} ${e.category??``}`,action:()=>{console.log(`[CmdPalette] ext command:`,e.command),t()}}));return[...i,...a]},[g,h,t,v,y,b,x,S]),T=(0,H.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0;return cv(_).map(r=>({id:`file:${r.path}`,label:r.name,hint:r.path,icon:Ge,group:`file`,keywords:r.path,action:()=>{h({type:`editor`,title:r.name,projectId:e,metadata:{...n,filePath:r.path},closable:!0}),t()}}))},[_,g,h,t]),E=(0,H.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0;return s.map(r=>{let i=ie(r);return{id:`fs:${r}`,label:i,hint:r,icon:Ze,group:`fs`,keywords:r,action:()=>{h({type:`editor`,title:i,projectId:e,metadata:{...n,filePath:r},closable:!0}),t()}}})},[s,g,h,t]),D=(0,H.useMemo)(()=>d.map(e=>({id:`db:${e.connectionId}:${e.schemaName}.${e.tableName}`,label:e.tableName,hint:`${e.connectionName} (${e.connectionType===`postgres`?`PG`:`SQLite`})`,icon:Re,group:`db`,connectionColor:e.connectionColor,action:()=>{h({type:`database`,title:`${e.connectionName} · ${e.tableName}`,projectId:null,closable:!0,metadata:{connectionId:e.connectionId,connectionName:e.connectionName,dbType:e.connectionType,tableName:e.tableName,schemaName:e.schemaName,connectionColor:e.connectionColor}}),t()}})),[d,h,t]),O=(0,H.useMemo)(()=>[...w,...T],[w,T]),k=(0,H.useMemo)(()=>{if(lv(r)){let e=r.lastIndexOf(`/`),t=e>=0?r.slice(e+1).toLowerCase():``;return t?E.filter(e=>{let n=e.label.toLowerCase(),r=(e.keywords??``).toLowerCase();return n.includes(t)||r.includes(t)}).slice(0,50):E.slice(0,50)}if(!r.trim())return w;let e=r.toLowerCase(),t=t=>{let n=0;for(let r=0;r<e.length;r++){if(n=t.indexOf(e[r],n),n===-1)return!1;n++}return!0},n=O.filter(e=>t(e.label.toLowerCase())||e.keywords&&t(e.keywords.toLowerCase()));return r.trim().length>=2?[...D,...n]:n},[O,w,E,D,r]);(0,H.useEffect)(()=>{e&&(i(n||``),o(0),c([]),f([]),requestAnimationFrame(()=>p.current?.focus()))},[e]),(0,H.useEffect)(()=>{o(e=>Math.min(e,Math.max(k.length-1,0)))},[k.length]),(0,H.useEffect)(()=>{let e=m.current;e&&e.children[a]?.scrollIntoView({block:`nearest`})},[a]);let A=(0,H.useCallback)(()=>{r.trim()&&(h({type:`chat`,title:`AI Chat`,projectId:g?.name??null,metadata:{projectName:g?.name,pendingMessage:r.trim()},closable:!0}),t())},[r,g,h,t]);function j(e){let n=k.length;switch(e.key){case`ArrowDown`:e.preventDefault(),n>0&&o(e=>(e+1)%n);break;case`ArrowUp`:e.preventDefault(),n>0&&o(e=>(e-1+n)%n);break;case`Enter`:e.preventDefault(),n>0?k[a]?.action():r.trim()&&A();break;case`Escape`:e.preventDefault(),t();break}}if(!e)return null;let ee=lv(r);return(0,W.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:t,children:[(0,W.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,W.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden max-h-[80vh] md:max-h-none`,onClick:e=>e.stopPropagation(),onKeyDown:j,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,W.jsx)(Vt,{className:`size-4 text-text-subtle shrink-0`}),(0,W.jsx)(`input`,{ref:p,type:`text`,value:r,onChange:e=>i(e.target.value),placeholder:`Search actions & files... (type / or ~/ for filesystem)`,className:`flex-1 bg-transparent text-sm text-text-primary outline-none placeholder:text-text-subtle`}),l&&(0,W.jsx)(V,{className:`size-3.5 animate-spin text-text-subtle shrink-0`}),(0,W.jsx)(`kbd`,{className:`hidden sm:inline-flex items-center rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] text-text-subtle font-mono`,children:`ESC`})]}),ee&&!l&&s.length===0&&r.length<4&&(0,W.jsx)(`div`,{className:`px-3 py-2 text-xs text-text-subtle border-b border-border/50`,children:`Type a directory path to browse files (e.g. ~/Projects/)`}),(0,W.jsx)(`div`,{ref:m,className:`max-h-72 overflow-y-auto py-1`,children:k.length===0?l?(0,W.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`Searching...`}):r.trim()?(0,W.jsxs)(`button`,{onClick:A,className:`flex items-center gap-3 w-full px-3 py-3 text-sm text-left text-text-secondary hover:bg-accent/15 hover:text-text-primary transition-colors`,children:[(0,W.jsx)(vt,{className:`size-4 shrink-0 text-accent`}),(0,W.jsxs)(`span`,{children:[`Ask AI: `,(0,W.jsx)(`span`,{className:`text-text-primary font-medium`,children:r.trim().slice(0,60)})]})]}):(0,W.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No results`}):k.map((e,t)=>{let n=e.icon;return(0,W.jsxs)(`button`,{onClick:e.action,className:`flex items-center gap-3 w-full px-3 py-2 text-sm text-left transition-colors ${t===a?`bg-accent/15 text-text-primary`:`text-text-secondary hover:bg-surface-elevated`}`,children:[(0,W.jsx)(n,{className:`size-4 shrink-0`}),(0,W.jsx)(`span`,{className:`truncate`,children:e.label}),e.hint&&(0,W.jsxs)(`span`,{className:`ml-auto flex items-center gap-1.5 text-xs text-text-subtle truncate max-w-[200px]`,children:[e.connectionColor&&(0,W.jsx)(`span`,{className:`shrink-0 size-2 rounded-full`,style:{backgroundColor:e.connectionColor}}),e.hint]}),e.shortcut&&(0,W.jsx)(`kbd`,{className:`ml-auto shrink-0 rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] text-text-subtle font-mono`,children:e.shortcut})]},e.id)})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 border-t border-border px-3 py-1.5`,children:[(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`Press`}),(0,W.jsx)(`kbd`,{className:`inline-flex items-center rounded border border-border bg-surface px-1 py-0.5 text-[10px] text-text-subtle font-mono`,children:`Shift`}),(0,W.jsx)(`kbd`,{className:`inline-flex items-center rounded border border-border bg-surface px-1 py-0.5 text-[10px] text-text-subtle font-mono`,children:`Shift`}),(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`to open this palette`})]})]})]})}function pv(){let[e,t]=(0,H.useState)(null),[n,r]=(0,H.useState)(!1);(0,H.useEffect)(()=>{function e(e){let n=e.detail;n&&(t(n),r(!1))}return window.addEventListener(`open-bug-report`,e),()=>window.removeEventListener(`open-bug-report`,e)},[]);let i=(0,H.useCallback)(()=>t(null),[]);return e?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/50`,onClick:i}),(0,W.jsxs)(`div`,{className:`fixed inset-4 md:inset-auto md:top-[15%] md:left-1/2 md:-translate-x-1/2 md:w-full md:max-w-lg md:max-h-[70vh] z-50 flex flex-col bg-background border border-border rounded-lg shadow-2xl overflow-hidden`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,W.jsx)(`span`,{className:`text-sm font-medium`,children:`Bug Report`}),(0,W.jsx)(`button`,{onClick:i,className:`p-1 rounded hover:bg-surface-elevated`,children:(0,W.jsx)(o,{className:`size-4`})})]}),(0,W.jsx)(`pre`,{className:`flex-1 overflow-auto px-4 py-2 text-xs font-mono whitespace-pre-wrap break-all`,children:e}),(0,W.jsxs)(`div`,{className:`flex gap-2 p-3 border-t border-border`,children:[(0,W.jsxs)(`button`,{onClick:async()=>{await S_(e)&&r(!0)},className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-surface-elevated text-xs text-foreground hover:bg-surface transition-colors`,children:[n?(0,W.jsx)(Ee,{className:`size-3`}):(0,W.jsx)(Le,{className:`size-3`}),n?`Copied`:`Copy`]}),(0,W.jsxs)(`button`,{onClick:()=>{x_(e),i()},className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-primary text-primary-foreground text-xs hover:bg-primary/90 transition-colors`,children:[(0,W.jsx)(Ve,{className:`size-3`}),`Open GitHub Issue`]})]})]})]}):null}var mv=6e4,hv=`ppm-upgrade-dismissed-`,gv=1500,_v=6e4;async function vv(){let e=!1,t=Date.now();for(;Date.now()-t<_v;){await new Promise(e=>setTimeout(e,gv));try{if((await fetch(`/api/health`,{cache:`no-store`})).ok&&e){if(`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}return window.location.reload(),!0}}catch{e=!0}}return!1}function yv({onVisibilityChange:e}){let[t,n]=(0,H.useState)(null),[r,i]=(0,H.useState)(!1),[a,s]=(0,H.useState)(!1);(0,H.useEffect)(()=>{let e;async function t(){try{let e=await B.get(`/api/upgrade`);if(e.availableVersion){n(e.availableVersion);let t=hv+e.availableVersion;sessionStorage.getItem(t)?s(!0):s(!1)}else n(null)}catch{}}return t(),e=setInterval(t,mv),()=>clearInterval(e)},[]);let c=(0,H.useCallback)(async()=>{i(!0);try{let e=await B.post(`/api/upgrade/apply`);e.restart?await vv()||(Cn.warning(`Upgrade installed but server hasn't restarted. Try refreshing manually.`),i(!1)):(Cn.info(e.message||`Upgrade installed. Restart PPM manually.`),i(!1),s(!0))}catch(e){Cn.error(`Upgrade failed: ${e.message}`),i(!1)}},[]),l=(0,H.useCallback)(()=>{t&&sessionStorage.setItem(hv+t,`1`),s(!0)},[t]),u=!!t&&!a;return(0,H.useEffect)(()=>{e?.(u)},[u,e]),u?(0,W.jsx)(`div`,{className:`w-full bg-blue-600 dark:bg-blue-700 text-white px-3 py-1 flex items-center justify-between gap-2 z-50 text-sm shrink-0`,children:r?(0,W.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,W.jsx)(V,{className:`size-4 animate-spin shrink-0`}),(0,W.jsxs)(`span`,{className:`truncate`,children:[`Upgrading to v`,t,`... PPM will restart shortly`]})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,W.jsx)(je,{className:`size-4 shrink-0`}),(0,W.jsxs)(`span`,{className:`truncate`,children:[`PPM v`,t,` available`]})]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,W.jsx)(`button`,{onClick:c,className:`bg-white text-blue-600 font-medium rounded-full px-3 py-0.5 text-xs min-h-[28px] min-w-[28px] flex items-center justify-center hover:bg-blue-50 active:bg-blue-100 transition-colors`,children:`Upgrade`}),(0,W.jsx)(`button`,{onClick:l,className:`min-h-[28px] min-w-[28px] flex items-center justify-center rounded-full hover:bg-blue-500 active:bg-blue-800 transition-colors`,"aria-label":`Dismiss upgrade notification`,children:(0,W.jsx)(o,{className:`size-4`})})]})]})}):null}var bv=c(e=>({src:null,alt:``,open:(t,n=``)=>e({src:t,alt:n}),close:()=>e({src:null,alt:``})}));function xv(){let{src:e,alt:t,close:n}=bv(),r=(0,H.useCallback)(e=>{e.key===`Escape`&&n()},[n]);return(0,H.useEffect)(()=>{if(e)return document.addEventListener(`keydown`,r),()=>document.removeEventListener(`keydown`,r)},[e,r]),e?(0,W.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-sm animate-in fade-in duration-150`,onClick:n,children:[(0,W.jsx)(`button`,{onClick:n,className:`absolute top-4 right-4 z-10 flex items-center justify-center size-8 rounded-full bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Close`,children:(0,W.jsx)(o,{className:`size-5`})}),(0,W.jsx)(`img`,{src:e,alt:t,className:`max-w-[90vw] max-h-[90vh] object-contain rounded-lg shadow-2xl`,onClick:e=>e.stopPropagation()})]}):null}var Sv=c(e=>({svg:null,open:t=>e({svg:t}),close:()=>e({svg:null})})),Cv=.25,wv=4,Tv=.25;function Ev(){let{svg:e,close:t}=Sv(),n=(0,H.useRef)(null),[r,i]=(0,H.useState)(1),[a,s]=(0,H.useState)({x:0,y:0}),c=(0,H.useRef)(!1),l=(0,H.useRef)({x:0,y:0});(0,H.useEffect)(()=>{e&&(i(1),s({x:0,y:0}))},[e]);let u=(0,H.useCallback)(e=>{e.key===`Escape`&&t(),(e.key===`=`||e.key===`+`)&&i(e=>Math.min(wv,e+Tv)),e.key===`-`&&i(e=>Math.max(Cv,e-Tv)),e.key===`0`&&(i(1),s({x:0,y:0}))},[t]);(0,H.useEffect)(()=>{if(e)return document.addEventListener(`keydown`,u),()=>document.removeEventListener(`keydown`,u)},[e,u]);let d=(0,H.useCallback)(e=>{e.preventDefault();let t=e.deltaY>0?-Tv:Tv;i(e=>Math.min(wv,Math.max(Cv,e+t)))},[]),f=(0,H.useCallback)(e=>{e.button===0&&(c.current=!0,l.current={x:e.clientX,y:e.clientY},e.target.setPointerCapture(e.pointerId))},[]),p=(0,H.useCallback)(e=>{if(!c.current)return;let t=e.clientX-l.current.x,n=e.clientY-l.current.y;l.current={x:e.clientX,y:e.clientY},s(e=>({x:e.x+t,y:e.y+n}))},[]),m=(0,H.useCallback)(()=>{c.current=!1},[]);return e?(0,W.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex flex-col bg-black/85 backdrop-blur-sm animate-in fade-in duration-150`,onClick:t,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 bg-black/40`,onClick:e=>e.stopPropagation(),children:[(0,W.jsxs)(`span`,{className:`text-sm text-white/70`,children:[Math.round(r*100),`% — Scroll to zoom, drag to pan, 0 to reset`]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(`button`,{onClick:()=>i(e=>Math.max(Cv,e-Tv)),className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Zoom out`,children:(0,W.jsx)(an,{className:`size-4`})}),(0,W.jsx)(`button`,{onClick:()=>i(e=>Math.min(wv,e+Tv)),className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Zoom in`,children:(0,W.jsx)(rn,{className:`size-4`})}),(0,W.jsx)(`button`,{onClick:()=>{i(1),s({x:0,y:0})},className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Reset zoom`,children:(0,W.jsx)(Bt,{className:`size-4`})}),(0,W.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors ml-2`,"aria-label":`Close`,children:(0,W.jsx)(o,{className:`size-5`})})]})]}),(0,W.jsx)(`div`,{ref:n,className:`flex-1 overflow-hidden cursor-grab active:cursor-grabbing`,onClick:e=>e.stopPropagation(),onWheel:d,onPointerDown:f,onPointerMove:p,onPointerUp:m,children:(0,W.jsx)(`div`,{className:`w-full h-full flex items-center justify-center`,style:{transform:`translate(${a.x}px, ${a.y}px) scale(${r})`,transformOrigin:`center center`},children:(0,W.jsx)(`div`,{className:`mermaid-overlay-content bg-white rounded-lg p-6 shadow-2xl [&_svg]:max-w-full [&_svg]:h-auto`,dangerouslySetInnerHTML:{__html:e}})})})]}):null}var Dv=`https://ppm.hienle.tech`;function Ov(){return window.location.hostname.endsWith(`.trycloudflare.com`)}function kv(){let e=nv(e=>e.showOverlay),[t,n]=(0,H.useState)(!1);if(!e)return null;let r=Ov();async function i(){n(!0);try{if((await fetch(`/api/health`,{cache:`no-store`})).ok){if(nv.getState().markUp(),`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload();return}}catch{}n(!1)}return(0,W.jsx)(`div`,{className:`fixed inset-0 z-[200] bg-background/95 backdrop-blur-sm flex items-center justify-center p-4`,children:(0,W.jsxs)(`div`,{className:`max-w-sm w-full text-center space-y-6`,children:[(0,W.jsx)(`div`,{className:`flex justify-center`,children:(0,W.jsx)(`div`,{className:`rounded-full bg-destructive/10 p-4`,children:(0,W.jsx)(r?nn:Ut,{className:`h-10 w-10 text-destructive`})})}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(`h2`,{className:`text-xl font-semibold text-foreground`,children:r?`Connection Lost`:`Server Unreachable`}),(0,W.jsx)(`p`,{className:`text-sm text-muted-foreground leading-relaxed`,children:r?`The tunnel appears to have closed. The server may have restarted with a new URL.`:`Cannot connect to the PPM server. It may have stopped or is restarting.`})]}),(0,W.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[r&&(0,W.jsx)(`a`,{href:Dv,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center justify-center rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors`,children:`Open PPM Cloud`}),(0,W.jsxs)(`button`,{onClick:i,disabled:t,className:`inline-flex items-center justify-center gap-2 rounded-md border border-border px-4 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors disabled:opacity-50`,children:[(0,W.jsx)(Lt,{className:`h-4 w-4 ${t?`animate-spin`:``}`}),t?`Retrying…`:`Retry Connection`]})]}),!r&&(0,W.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`If the server was stopped, run `,(0,W.jsx)(`code`,{className:`bg-muted px-1 py-0.5 rounded text-[11px]`,children:`ppm start`}),` to restart it.`]})]})})}function Av(){let e=vm(e=>e.statusBarItems),t=e.filter(e=>e.alignment===`left`).sort((e,t)=>t.priority-e.priority),n=e.filter(e=>e.alignment===`right`).sort((e,t)=>t.priority-e.priority);return(0,W.jsxs)(`div`,{className:`hidden md:flex items-center justify-between h-[22px] px-2 bg-surface border-t border-border text-[11px] text-text-subtle select-none shrink-0`,children:[(0,W.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:t.map(e=>(0,W.jsx)(jv,{item:e},e.id))}),(0,W.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:n.map(e=>(0,W.jsx)(jv,{item:e},e.id))})]})}function jv({item:e}){let t=(0,W.jsx)(`button`,{className:`truncate px-1 rounded-sm transition-colors ${e.command?`hover:bg-accent/15 hover:text-text-primary cursor-pointer`:`cursor-default`}`,onClick:()=>{e.command&&window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e.command}}))},children:e.text});return e.tooltip?(0,W.jsxs)(Ru,{children:[(0,W.jsx)(zu,{asChild:!0,children:t}),(0,W.jsx)(Bu,{side:`top`,className:`text-xs`,children:e.tooltip})]}):t}function Mv(){let e=vm(e=>e.quickPick),t=vm(e=>e.resolveQuickPick);return e?(0,W.jsx)(Nv,{items:e.items,options:e.options,onSelect:e=>t(e),onCancel:()=>t(void 0)}):null}function Nv({items:e,options:t,onSelect:n,onCancel:r}){let[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(0),[c,l]=(0,H.useState)(()=>{let t=new Set;return e.forEach((e,n)=>{e.picked&&t.add(n)}),t}),u=(0,H.useRef)(null),d=(0,H.useRef)(null),f=t.canPickMany??!1;(0,H.useEffect)(()=>{requestAnimationFrame(()=>u.current?.focus())},[]);let p=(0,H.useMemo)(()=>{if(!i.trim())return e.map((e,t)=>({item:e,originalIdx:t}));let t=i.toLowerCase();return e.map((e,t)=>({item:e,originalIdx:t})).filter(({item:e})=>e.label.toLowerCase().includes(t)||e.description?.toLowerCase().includes(t)||e.detail?.toLowerCase().includes(t))},[e,i]);(0,H.useEffect)(()=>{s(e=>Math.min(e,Math.max(p.length-1,0)))},[p.length]),(0,H.useEffect)(()=>{(d.current?.children[o])?.scrollIntoView({block:`nearest`})},[o]);let m=(0,H.useCallback)(()=>{f?n(e.filter((e,t)=>c.has(t))):p[o]&&n([p[o].item])},[f,c,e,p,o,n]);function h(e){switch(e.key){case`ArrowDown`:e.preventDefault(),p.length>0&&s(e=>(e+1)%p.length);break;case`ArrowUp`:e.preventDefault(),p.length>0&&s(e=>(e-1+p.length)%p.length);break;case` `:if(f&&p[o]){e.preventDefault();let t=p[o].originalIdx;l(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})}break;case`Enter`:e.preventDefault(),m();break;case`Escape`:e.preventDefault(),r();break}}return(0,W.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:r,children:[(0,W.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,W.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden max-h-[80vh] md:max-h-none`,onClick:e=>e.stopPropagation(),onKeyDown:h,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,W.jsx)(Vt,{className:`size-4 text-text-subtle shrink-0`}),(0,W.jsx)(`input`,{ref:u,type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:t.placeholder??`Select an item...`,className:`flex-1 bg-transparent text-sm text-text-primary outline-none placeholder:text-text-subtle`}),(0,W.jsx)(`kbd`,{className:`hidden sm:inline-flex items-center rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] text-text-subtle font-mono`,children:`ESC`})]}),(0,W.jsx)(`div`,{ref:d,className:`max-h-72 overflow-y-auto py-1`,children:p.length===0?(0,W.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No matching items`}):p.map(({item:e,originalIdx:t},r)=>(0,W.jsxs)(`button`,{onClick:()=>{f?l(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}):n([e])},className:L(`flex items-center gap-3 w-full px-3 py-2 text-sm text-left transition-colors`,r===o?`bg-accent/15 text-text-primary`:`text-text-secondary hover:bg-surface-elevated`),children:[f&&(0,W.jsx)(`span`,{className:L(`size-4 shrink-0 rounded border flex items-center justify-center`,c.has(t)?`bg-primary border-primary text-primary-foreground`:`border-border`),children:c.has(t)&&(0,W.jsx)(Ee,{className:`size-3`})}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsx)(`div`,{className:`truncate`,children:e.label}),e.description&&(0,W.jsx)(`span`,{className:`text-xs text-text-subtle ml-2`,children:e.description}),e.detail&&(0,W.jsx)(`div`,{className:`text-xs text-text-subtle truncate mt-0.5`,children:e.detail})]})]},t))}),f&&(0,W.jsxs)(`div`,{className:`flex items-center justify-between border-t border-border px-3 py-1.5`,children:[(0,W.jsxs)(`span`,{className:`text-[10px] text-text-subtle`,children:[c.size,` selected`]}),(0,W.jsx)(`button`,{onClick:m,className:`text-xs text-primary hover:text-primary/80 font-medium`,children:`Confirm`})]})]})]})}function Pv(){let e=vm(e=>e.inputBox),t=vm(e=>e.resolveInputBox);return e?(0,W.jsx)(Fv,{options:e.options,onConfirm:e=>t(e),onCancel:()=>t(void 0)}):null}function Fv({options:e,onConfirm:t,onCancel:n}){let[r,i]=(0,H.useState)(e.value??``),a=(0,H.useRef)(null);(0,H.useEffect)(()=>{requestAnimationFrame(()=>{a.current?.focus(),a.current?.select()})},[]);function o(e){e.key===`Enter`?(e.preventDefault(),t(r)):e.key===`Escape`&&(e.preventDefault(),n())}return(0,W.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:n,children:[(0,W.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,W.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden`,onClick:e=>e.stopPropagation(),children:[e.prompt&&(0,W.jsx)(`div`,{className:`px-3 pt-3 pb-1 text-sm text-text-primary`,children:e.prompt}),(0,W.jsx)(`div`,{className:`flex items-center gap-2 px-3 py-2.5`,children:(0,W.jsx)(`input`,{ref:a,type:e.password?`password`:`text`,value:r,onChange:e=>i(e.target.value),onKeyDown:o,placeholder:e.placeholder??``,className:`flex-1 bg-surface border border-border rounded px-2 py-1.5 text-sm text-text-primary outline-none focus:border-primary placeholder:text-text-subtle`})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t border-border px-3 py-2`,children:[(0,W.jsx)(`button`,{onClick:n,className:`px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors rounded`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:()=>t(r),className:`px-3 py-1.5 text-xs bg-primary text-primary-foreground rounded hover:bg-primary/90 transition-colors font-medium`,children:`OK`})]})]})]})}var Iv=3e4,Lv=1e3,Rv=class{ws=null;url;handlers=[];reconnectAttempts=0;reconnectTimer=null;intentionalClose=!1;pendingMessages=[];visibilityHandler=null;constructor(e){this.url=e,this.visibilityHandler=()=>{document.visibilityState===`visible`&&!this.intentionalClose&&this.ws?.readyState!==WebSocket.OPEN&&(this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null,this.reconnectAttempts=0,this.connect())},document.addEventListener(`visibilitychange`,this.visibilityHandler)}connect(){this.intentionalClose=!1,this.cleanup();let e=window.location.protocol===`https:`?`wss:`:`ws:`,t=this.url.startsWith(`ws`)?this.url:`${e}//${window.location.host}${this.url}`;this.ws=new WebSocket(t),this.ws.onopen=()=>{this.reconnectAttempts=0;try{this.ws?.send(JSON.stringify({type:`ready`}))}catch{}if(this.pendingMessages.length>0){console.log(`[ws] flushing ${this.pendingMessages.length} queued message(s)`);for(let e of this.pendingMessages)try{this.ws?.send(e)}catch{}this.pendingMessages=[]}},this.ws.onmessage=e=>{for(let t of this.handlers)t(e)},this.ws.onclose=()=>{this.intentionalClose||this.scheduleReconnect()},this.ws.onerror=()=>{this.ws?.close()}}disconnect(){this.intentionalClose=!0,this.pendingMessages=[],this.cleanup(),this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.visibilityHandler&&=(document.removeEventListener(`visibilitychange`,this.visibilityHandler),null)}send(e){this.ws?.readyState===WebSocket.OPEN?this.ws.send(e):this.ws?.readyState===WebSocket.CONNECTING?(console.warn(`[ws] WS still CONNECTING — queuing message`),this.pendingMessages.push(e)):console.warn(`[ws] message dropped — readyState=${this.ws?.readyState??`no-ws`}`)}onMessage(e){return this.handlers.push(e),()=>{this.handlers=this.handlers.filter(t=>t!==e)}}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}cleanup(){this.ws&&=(this.ws.onopen=null,this.ws.onclose=null,this.ws.onmessage=null,this.ws.onerror=null,(this.ws.readyState===WebSocket.OPEN||this.ws.readyState===WebSocket.CONNECTING)&&this.ws.close(),null)}scheduleReconnect(){let e=Math.min(Lv*2**this.reconnectAttempts,Iv);this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>this.connect(),e)}};function zv(e=!0){let t=(0,H.useRef)(null),n=(0,H.useCallback)(e=>{t.current?.send(JSON.stringify(e))},[]);return(0,H.useEffect)(()=>{if(!e)return;let r=oe(),i=new Rv(r?`/ws/extensions?token=${encodeURIComponent(r)}`:`/ws/extensions`);t.current=i,i.onMessage(e=>{let t;try{t=JSON.parse(e.data)}catch{return}let r=vm.getState();switch(t.type){case`contributions:update`:r.setContributions(t.contributions);break;case`statusbar:update`:r.addStatusBarItem(t.item);break;case`statusbar:remove`:r.removeStatusBarItem(t.itemId);break;case`tree:update`:t.parentId?r.updateTreeChildren(t.viewId,t.parentId,t.items):r.updateTree(t.viewId,t.items);break;case`tree:refresh`:r.removeTree(t.viewId);break;case`notification`:{let e=t.level===`error`?Cn.error:t.level===`warn`?Cn.warning:Cn.info;if(t.actions&&t.actions.length>0){let r={action:{label:t.actions[0],onClick:()=>n({type:`notification:action`,id:t.id,action:t.actions[0]??null})},onDismiss:()=>n({type:`notification:action`,id:t.id,action:null})};t.actions.length>1&&(r.cancel={label:t.actions[1],onClick:()=>n({type:`notification:action`,id:t.id,action:t.actions[1]??null})}),e(t.message,r)}else e(t.message);break}case`quickpick:show`:r.showQuickPick(t.items,t.options).then(e=>{n({type:`quickpick:resolve`,requestId:t.requestId,selected:e??null})});break;case`inputbox:show`:r.showInputBox(t.options).then(e=>{n({type:`inputbox:resolve`,requestId:t.requestId,value:e??null})});break;case`webview:create`:r.addWebviewPanel({id:t.panelId,extensionId:t.extensionId,viewType:t.viewType,title:t.title,html:``}),op.getState().openTab({type:`extension-webview`,title:t.title,projectId:null,closable:!0,metadata:{panelId:t.panelId,extensionId:t.extensionId}});break;case`webview:html`:r.updateWebviewPanel(t.panelId,{html:t.html});break;case`webview:dispose`:r.removeWebviewPanel(t.panelId);break;case`webview:postMessage`:window.dispatchEvent(new CustomEvent(`ext:webview:message`,{detail:{panelId:t.panelId,message:t.message}}));break}});let a=e=>{let{panelId:t,message:n}=e.detail;i.send(JSON.stringify({type:`webview:message`,panelId:t,message:n}))};window.addEventListener(`ext:webview:send`,a);let o=e=>{let{viewId:t,itemId:n}=e.detail;i.send(JSON.stringify({type:`tree:expand`,viewId:t,itemId:n}))};window.addEventListener(`ext:tree:expand`,o);let s=e=>{let{command:t,args:n}=e.detail;i.send(JSON.stringify({type:`command:execute`,command:t,args:n}))};return window.addEventListener(`ext:command:execute`,s),i.connect(),()=>{window.removeEventListener(`ext:webview:send`,a),window.removeEventListener(`ext:tree:expand`,o),window.removeEventListener(`ext:command:execute`,s),i.disconnect(),t.current=null}},[n,e]),{send:n}}function Bv(){let[e,t]=(0,H.useState)(`checking`),[n,r]=(0,H.useState)(!1),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(),[c,u]=(0,H.useState)(!1);(0,H.useEffect)(()=>{let e=()=>{s(`settings`),a(!0)};return window.addEventListener(`open-mobile-settings`,e),()=>window.removeEventListener(`open-mobile-settings`,e)},[]);let[d,f]=(0,H.useState)(()=>new Set([`__global__`])),p=U(e=>e.theme),m=U(e=>e.deviceName),h=ap(e=>e.fetchProjects),g=U(e=>e.fetchServerInfo),_=ap(e=>e.activeProject),v=(0,H.useRef)(V_());(0,H.useEffect)(()=>{if(Un(p),p===`system`){let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>Un(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}},[p]),(0,H.useEffect)(()=>{g()},[g]),(0,H.useEffect)(()=>{async function e(){let e=oe();try{let n={};e&&(n.Authorization=`Bearer ${e}`),(await(await fetch(`/api/auth/check`,{headers:n})).json()).ok?t(`authenticated`):t(`unauthenticated`)}catch{t(`unauthenticated`)}}e()},[]),q_();let{paletteOpen:y,paletteInitialQuery:b,closePalette:x}=Wp();ev(),av(),zv(e===`authenticated`),(0,H.useEffect)(()=>{if(e!==`authenticated`)return;let t=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,t),()=>window.removeEventListener(`beforeunload`,t)},[e]),(0,H.useEffect)(()=>{e===`authenticated`&&l(async()=>{let{useKeybindingsStore:e}=await import(`./keybindings-store-DsaANvBz.js`);return{useKeybindingsStore:e}},__vite__mapDeps([56,6,1,2])).then(({useKeybindingsStore:e})=>{e.getState().loadFromServer()})},[e]),(0,H.useEffect)(()=>{e===`authenticated`&&h().then(async()=>{let e=v.current,{projects:t,customOrder:n}=ap.getState();if(t.length===0)return;let r=e.projectName?t.find(t=>t.name===e.projectName):void 0;if(r||=ip(t,n)[0],!r)return;let i=await Gf(r.name);if(i){let e=localStorage.getItem(`ppm-panels-${r.name}`),t=Jf(e?JSON.parse(e):null,i);t&&t===i&&localStorage.setItem(`ppm-panels-${r.name}`,JSON.stringify(i))}ap.getState().setActiveProject(r),queueMicrotask(()=>{if(e.tabType&&K_(e.tabType,e.tabIdentifier,r.name),e.openChat){K_(`chat`,e.openChat,r.name);let t=new URL(window.location.href);t.searchParams.delete(`openChat`),window.history.replaceState(null,``,t.pathname)}})})},[e,h]),(0,H.useEffect)(()=>{let e=_?.name??`__global__`;op.getState().switchProject(e)},[_?.name]),(0,H.useEffect)(()=>{let e=_?.name??`__global__`;f(t=>t.has(e)?t:new Set([...t,e]))},[_?.name]),(0,H.useEffect)(()=>{e===`authenticated`&&!_&&op.getState().switchProject(`__global__`)},[e,_]);let S=(0,H.useCallback)(()=>{t(`authenticated`)},[]);if(e===`checking`)return(0,W.jsx)(`div`,{className:`min-h-dvh flex items-center justify-center bg-background`,children:(0,W.jsx)(`div`,{className:`animate-pulse text-text-secondary text-sm`,children:`Loading...`})});if(e===`unauthenticated`)return(0,W.jsx)(z_,{onSuccess:S});let C=_?.name??`__global__`;return(0,W.jsx)(Lu,{children:(0,W.jsxs)(`div`,{className:`h-dvh flex flex-col bg-background text-foreground overflow-hidden relative`,children:[(0,W.jsx)(yv,{onVisibilityChange:r}),m&&(0,W.jsx)(`div`,{className:L(`md:hidden fixed left-0 z-50 px-2 py-0.5 bg-primary/80 text-primary-foreground text-[10px] font-medium rounded-br transition-[top]`,n?`top-7`:`top-0`),children:m}),(0,W.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,W.jsx)(A_,{}),(0,W.jsx)(Ug,{}),(0,W.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[[...d].map(e=>(0,W.jsx)(`div`,{className:L(`flex-1 overflow-hidden pb-12 md:pb-0`,C!==e&&`hidden`),children:(0,W.jsx)(mm,{projectName:e})},e)),(0,W.jsx)(Av,{})]})]}),(0,W.jsx)(P_,{onMenuPress:()=>a(!0),onProjectsPress:()=>u(!0)}),(0,W.jsx)(I_,{isOpen:i,onClose:()=>{a(!1),s(void 0)},initialTab:o}),(0,W.jsx)(R_,{isOpen:c,onClose:()=>u(!1)}),(0,W.jsx)(fv,{open:y,onClose:x,initialQuery:b}),(0,W.jsx)(pv,{}),(0,W.jsx)(xv,{}),(0,W.jsx)(Ev,{}),(0,W.jsx)(Mv,{}),(0,W.jsx)(Pv,{}),(0,W.jsx)(kv,{}),(0,W.jsx)(Gn,{position:`bottom-left`,closeButton:!0,toastOptions:{className:`bg-surface border-border text-foreground`}})]})})}(0,on.createRoot)(document.getElementById(`root`)).render((0,W.jsx)(H.StrictMode,{children:(0,W.jsx)(Bv,{})}));export{Yt as $,Fm as A,Me as At,Jp as B,Jm as C,Ue as Ct,Pm as D,Le as Dt,Am as E,Re as Et,Tm as F,we as Ft,Hp as G,Ip as H,Em as I,Se as It,Q as J,op as K,Cm as L,ye as Lt,$ as M,Oe as Mt,Sm as N,De as Nt,Rm as O,Fe as Ot,wm as P,Ee as Pt,Xt as Q,ym as R,ve as Rt,$m as S,We as St,zm as T,ze as Tt,Vp as U,Up as V,Bp as W,Cn as X,U as Y,en as Z,eh as _,et as _t,Og as a,jt as at,ih as b,qe as bt,Eh as c,Ot as ct,gh as d,vt as dt,Gt as et,yh as f,ht as ft,Qm as g,tt as gt,_h as h,rt as ht,C_ as i,Nt as it,Lm as j,ke as jt,Im as k,Ne as kt,Th as l,Dt as lt,vh as m,it as mt,Sv as n,Bt as nt,lg as o,At as ot,bh as p,V as pt,ap as q,bv as r,Lt as rt,Ah as s,kt as st,Rv as t,Vt as tt,Ch as u,yt as ut,th as v,Ye as vt,Vm as w,Ve as wt,rh as x,Ge as xt,nh as y,Je as yt,vm as z};
|
|
30
|
+
</svg>`,Q_=`data:image/svg+xml,${encodeURIComponent(X_)}`,$_=`data:image/svg+xml,${encodeURIComponent(Z_)}`;function ev(e){let t=document.getElementById(`ppm-favicon`);t&&(t.href=e?$_:Q_)}function tv(e,t,n){let r=[t,n||null,`PPM`].filter(Boolean).join(` - `);return e>0?`(${e}) ${r}`:r}function nv(){let e=ap(e=>e.activeProject),t=U(e=>e.deviceName);(0,H.useEffect)(()=>{let n=()=>{let n=Yp(Jp.getState());document.title=tv(n,e?.name,t??void 0),ev(n>0)};return n(),Jp.subscribe(n)},[e?.name,t])}var rv=15e3,iv=c((e,t)=>({isDown:!1,downSince:null,showOverlay:!1,markDown:()=>{let{downSince:n}=t(),r=Date.now(),i=n??r;e({isDown:!0,downSince:i,showOverlay:r-i>=rv})},markUp:()=>{e({isDown:!1,downSince:null,showOverlay:!1})}})),av=1e4,ov=2e3;function sv(){(0,H.useEffect)(()=>{let e=!1,t,{markDown:n,markUp:r}=iv.getState();async function i(){try{let t=await fetch(`/api/health`,{cache:`no-store`});if(t.ok&&e){if(r(),`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload();return}t.ok&&r(),e=!1}catch{e=!0,n()}t=setTimeout(i,e?ov:av)}return t=setTimeout(i,av),()=>clearTimeout(t)},[])}var cv=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent);function lv(e){return e?e.replace(/Mod\+/g,cv?`⌘`:`Ctrl+`).replace(/Alt\+/g,cv?`⌥`:`Alt+`).replace(/Shift\+/g,cv?`⇧`:`Shift+`).replace(/Meta\+/g,`⌘`).replace(/Ctrl\+/g,cv?`⌃`:`Ctrl+`):``}function uv(e){let t=[];for(let n of e)n.type===`file`&&t.push({name:n.name,path:n.path}),n.children&&t.push(...uv(n.children));return t}function dv(e){return e?e.startsWith(`/`)||e.startsWith(`~/`)||e.startsWith(`~\\`)||/^[A-Za-z]:[/\\]/.test(e):!1}function fv(e){let t=e.replace(/\\/g,`/`);if(t.endsWith(`/`))return e;let n=Math.max(t.lastIndexOf(`/`),e.lastIndexOf(`\\`));return n>0?e.slice(0,n+1):e}var pv=new Map;function mv({open:e,onClose:t,initialQuery:n=``}){let[r,i]=(0,H.useState)(``),[a,o]=(0,H.useState)(0),[s,c]=(0,H.useState)([]),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)([]),p=(0,H.useRef)(null),m=(0,H.useRef)(null),h=op(e=>e.openTab),g=ap(e=>e.activeProject),_=ym(e=>e.tree),v=U(e=>e.setSidebarActiveTab),y=U(e=>e.sidebarCollapsed),b=U(e=>e.toggleSidebar),x=Hp(e=>e.getBinding),S=vm(e=>e.contributions),C=(0,H.useCallback)(async e=>{if(pv.has(e)){c(pv.get(e));return}u(!0);try{let t=await B.get(`/api/fs/list?dir=${encodeURIComponent(e)}`);pv.set(e,t),c(t)}catch{c([])}finally{u(!1)}},[]);(0,H.useEffect)(()=>{if(!dv(r)){c([]);return}C(fv(r))},[r,C]),(0,H.useEffect)(()=>{if(dv(r)||r.trim().length<2){f([]);return}let e=setTimeout(async()=>{try{f(await B.get(`/api/db/search?q=${encodeURIComponent(r.trim())}`)??[])}catch{f([])}},300);return()=>clearTimeout(e)},[r]);let w=(0,H.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0,r=(r,i)=>()=>{h({type:r,title:i,projectId:e,metadata:n,closable:!0}),t()},i=[{id:`chat`,label:`New AI Chat`,icon:vt,action:r(`chat`,`AI Chat`),keywords:`ai assistant claude`,group:`action`,shortcut:lv(x(`open-chat`))},{id:`terminal`,label:`New Terminal`,icon:Yt,action:r(`terminal`,`Terminal`),keywords:`bash shell console`,group:`action`,shortcut:lv(x(`open-terminal`))},{id:`git-graph`,label:`Git Graph`,icon:tt,action:r(`git-graph`,`Git Graph`),keywords:`branch history log`,group:`action`,shortcut:lv(x(`open-git-graph`))},{id:`ports`,label:`Port Forwarding`,icon:rt,action:r(`ports`,`Ports`),keywords:`web preview localhost port forward tunnel url`,group:`action`},{id:`postgres`,label:`PostgreSQL`,icon:Re,action:r(`postgres`,`PostgreSQL`),keywords:`database pg sql query`,group:`action`},{id:`voice-input`,label:`Voice Input`,icon:yt,action:()=>{window.dispatchEvent(new CustomEvent(`toggle-voice-input`)),t()},keywords:`speech microphone dictate voice`,group:`action`,shortcut:lv(x(`voice-input`))},{id:`git-status`,label:`Git Status`,icon:nt,action:()=>{v(`git`),t()},keywords:`changes diff staged`,group:`action`,shortcut:lv(x(`open-git-status`))},{id:`settings`,label:`Settings`,icon:Gt,action:()=>{y&&b(),v(`settings`),t()},keywords:`config preferences theme`,group:`action`,shortcut:lv(x(`open-settings`))}],a=(S?.commands??[]).map(e=>({id:`ext:${e.command}`,label:e.title,hint:e.category,icon:It,group:`action`,keywords:`extension ${e.command} ${e.category??``}`,action:()=>{console.log(`[CmdPalette] ext command:`,e.command),t()}}));return[...i,...a]},[g,h,t,v,y,b,x,S]),T=(0,H.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0;return uv(_).map(r=>({id:`file:${r.path}`,label:r.name,hint:r.path,icon:Ge,group:`file`,keywords:r.path,action:()=>{h({type:`editor`,title:r.name,projectId:e,metadata:{...n,filePath:r.path},closable:!0}),t()}}))},[_,g,h,t]),E=(0,H.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0;return s.map(r=>{let i=ie(r);return{id:`fs:${r}`,label:i,hint:r,icon:Ze,group:`fs`,keywords:r,action:()=>{h({type:`editor`,title:i,projectId:e,metadata:{...n,filePath:r},closable:!0}),t()}}})},[s,g,h,t]),D=(0,H.useMemo)(()=>d.map(e=>({id:`db:${e.connectionId}:${e.schemaName}.${e.tableName}`,label:e.tableName,hint:`${e.connectionName} (${e.connectionType===`postgres`?`PG`:`SQLite`})`,icon:Re,group:`db`,connectionColor:e.connectionColor,action:()=>{h({type:`database`,title:`${e.connectionName} · ${e.tableName}`,projectId:null,closable:!0,metadata:{connectionId:e.connectionId,connectionName:e.connectionName,dbType:e.connectionType,tableName:e.tableName,schemaName:e.schemaName,connectionColor:e.connectionColor}}),t()}})),[d,h,t]),O=(0,H.useMemo)(()=>[...w,...T],[w,T]),k=(0,H.useMemo)(()=>{if(dv(r)){let e=r.lastIndexOf(`/`),t=e>=0?r.slice(e+1).toLowerCase():``;return t?E.filter(e=>{let n=e.label.toLowerCase(),r=(e.keywords??``).toLowerCase();return n.includes(t)||r.includes(t)}).slice(0,50):E.slice(0,50)}if(!r.trim())return w;let e=r.toLowerCase(),t=t=>{let n=0;for(let r=0;r<e.length;r++){if(n=t.indexOf(e[r],n),n===-1)return!1;n++}return!0},n=O.filter(e=>t(e.label.toLowerCase())||e.keywords&&t(e.keywords.toLowerCase()));return r.trim().length>=2?[...D,...n]:n},[O,w,E,D,r]);(0,H.useEffect)(()=>{e&&(i(n||``),o(0),c([]),f([]),requestAnimationFrame(()=>p.current?.focus()))},[e]),(0,H.useEffect)(()=>{o(e=>Math.min(e,Math.max(k.length-1,0)))},[k.length]),(0,H.useEffect)(()=>{let e=m.current;e&&e.children[a]?.scrollIntoView({block:`nearest`})},[a]);let A=(0,H.useCallback)(()=>{r.trim()&&(h({type:`chat`,title:`AI Chat`,projectId:g?.name??null,metadata:{projectName:g?.name,pendingMessage:r.trim()},closable:!0}),t())},[r,g,h,t]);function j(e){let n=k.length;switch(e.key){case`ArrowDown`:e.preventDefault(),n>0&&o(e=>(e+1)%n);break;case`ArrowUp`:e.preventDefault(),n>0&&o(e=>(e-1+n)%n);break;case`Enter`:e.preventDefault(),n>0?k[a]?.action():r.trim()&&A();break;case`Escape`:e.preventDefault(),t();break}}if(!e)return null;let ee=dv(r);return(0,W.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:t,children:[(0,W.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,W.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden max-h-[80vh] md:max-h-none`,onClick:e=>e.stopPropagation(),onKeyDown:j,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,W.jsx)(Vt,{className:`size-4 text-text-subtle shrink-0`}),(0,W.jsx)(`input`,{ref:p,type:`text`,value:r,onChange:e=>i(e.target.value),placeholder:`Search actions & files... (type / or ~/ for filesystem)`,className:`flex-1 bg-transparent text-sm text-text-primary outline-none placeholder:text-text-subtle`}),l&&(0,W.jsx)(V,{className:`size-3.5 animate-spin text-text-subtle shrink-0`}),(0,W.jsx)(`kbd`,{className:`hidden sm:inline-flex items-center rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] text-text-subtle font-mono`,children:`ESC`})]}),ee&&!l&&s.length===0&&r.length<4&&(0,W.jsx)(`div`,{className:`px-3 py-2 text-xs text-text-subtle border-b border-border/50`,children:`Type a directory path to browse files (e.g. ~/Projects/)`}),(0,W.jsx)(`div`,{ref:m,className:`max-h-72 overflow-y-auto py-1`,children:k.length===0?l?(0,W.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`Searching...`}):r.trim()?(0,W.jsxs)(`button`,{onClick:A,className:`flex items-center gap-3 w-full px-3 py-3 text-sm text-left text-text-secondary hover:bg-accent/15 hover:text-text-primary transition-colors`,children:[(0,W.jsx)(vt,{className:`size-4 shrink-0 text-accent`}),(0,W.jsxs)(`span`,{children:[`Ask AI: `,(0,W.jsx)(`span`,{className:`text-text-primary font-medium`,children:r.trim().slice(0,60)})]})]}):(0,W.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No results`}):k.map((e,t)=>{let n=e.icon;return(0,W.jsxs)(`button`,{onClick:e.action,className:`flex items-center gap-3 w-full px-3 py-2 text-sm text-left transition-colors ${t===a?`bg-accent/15 text-text-primary`:`text-text-secondary hover:bg-surface-elevated`}`,children:[(0,W.jsx)(n,{className:`size-4 shrink-0`}),(0,W.jsx)(`span`,{className:`truncate`,children:e.label}),e.hint&&(0,W.jsxs)(`span`,{className:`ml-auto flex items-center gap-1.5 text-xs text-text-subtle truncate max-w-[200px]`,children:[e.connectionColor&&(0,W.jsx)(`span`,{className:`shrink-0 size-2 rounded-full`,style:{backgroundColor:e.connectionColor}}),e.hint]}),e.shortcut&&(0,W.jsx)(`kbd`,{className:`ml-auto shrink-0 rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] text-text-subtle font-mono`,children:e.shortcut})]},e.id)})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 border-t border-border px-3 py-1.5`,children:[(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`Press`}),(0,W.jsx)(`kbd`,{className:`inline-flex items-center rounded border border-border bg-surface px-1 py-0.5 text-[10px] text-text-subtle font-mono`,children:`Shift`}),(0,W.jsx)(`kbd`,{className:`inline-flex items-center rounded border border-border bg-surface px-1 py-0.5 text-[10px] text-text-subtle font-mono`,children:`Shift`}),(0,W.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`to open this palette`})]})]})]})}function hv(){let[e,t]=(0,H.useState)(null),[n,r]=(0,H.useState)(!1);(0,H.useEffect)(()=>{function e(e){let n=e.detail;n&&(t(n),r(!1))}return window.addEventListener(`open-bug-report`,e),()=>window.removeEventListener(`open-bug-report`,e)},[]);let i=(0,H.useCallback)(()=>t(null),[]);return e?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/50`,onClick:i}),(0,W.jsxs)(`div`,{className:`fixed inset-4 md:inset-auto md:top-[15%] md:left-1/2 md:-translate-x-1/2 md:w-full md:max-w-lg md:max-h-[70vh] z-50 flex flex-col bg-background border border-border rounded-lg shadow-2xl overflow-hidden`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,W.jsx)(`span`,{className:`text-sm font-medium`,children:`Bug Report`}),(0,W.jsx)(`button`,{onClick:i,className:`p-1 rounded hover:bg-surface-elevated`,children:(0,W.jsx)(o,{className:`size-4`})})]}),(0,W.jsx)(`pre`,{className:`flex-1 overflow-auto px-4 py-2 text-xs font-mono whitespace-pre-wrap break-all`,children:e}),(0,W.jsxs)(`div`,{className:`flex gap-2 p-3 border-t border-border`,children:[(0,W.jsxs)(`button`,{onClick:async()=>{await w_(e)&&r(!0)},className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-surface-elevated text-xs text-foreground hover:bg-surface transition-colors`,children:[n?(0,W.jsx)(Ee,{className:`size-3`}):(0,W.jsx)(Le,{className:`size-3`}),n?`Copied`:`Copy`]}),(0,W.jsxs)(`button`,{onClick:()=>{C_(e),i()},className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-primary text-primary-foreground text-xs hover:bg-primary/90 transition-colors`,children:[(0,W.jsx)(Ve,{className:`size-3`}),`Open GitHub Issue`]})]})]})]}):null}var gv=6e4,_v=`ppm-upgrade-dismissed-`,vv=1500,yv=6e4;async function bv(){let e=!1,t=Date.now();for(;Date.now()-t<yv;){await new Promise(e=>setTimeout(e,vv));try{if((await fetch(`/api/health`,{cache:`no-store`})).ok&&e){if(`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}return window.location.reload(),!0}}catch{e=!0}}return!1}function xv({onVisibilityChange:e}){let[t,n]=(0,H.useState)(null),[r,i]=(0,H.useState)(!1),[a,s]=(0,H.useState)(!1);(0,H.useEffect)(()=>{let e;async function t(){try{let e=await B.get(`/api/upgrade`);if(e.availableVersion){n(e.availableVersion);let t=_v+e.availableVersion;sessionStorage.getItem(t)?s(!0):s(!1)}else n(null)}catch{}}return t(),e=setInterval(t,gv),()=>clearInterval(e)},[]);let c=(0,H.useCallback)(async()=>{i(!0);try{let e=await B.post(`/api/upgrade/apply`);e.restart?await bv()||(Cn.warning(`Upgrade installed but server hasn't restarted. Try refreshing manually.`),i(!1)):(Cn.info(e.message||`Upgrade installed. Restart PPM manually.`),i(!1),s(!0))}catch(e){Cn.error(`Upgrade failed: ${e.message}`),i(!1)}},[]),l=(0,H.useCallback)(()=>{t&&sessionStorage.setItem(_v+t,`1`),s(!0)},[t]),u=!!t&&!a;return(0,H.useEffect)(()=>{e?.(u)},[u,e]),u?(0,W.jsx)(`div`,{className:`w-full bg-blue-600 dark:bg-blue-700 text-white px-3 py-1 flex items-center justify-between gap-2 z-50 text-sm shrink-0`,children:r?(0,W.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,W.jsx)(V,{className:`size-4 animate-spin shrink-0`}),(0,W.jsxs)(`span`,{className:`truncate`,children:[`Upgrading to v`,t,`... PPM will restart shortly`]})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,W.jsx)(je,{className:`size-4 shrink-0`}),(0,W.jsxs)(`span`,{className:`truncate`,children:[`PPM v`,t,` available`]})]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,W.jsx)(`button`,{onClick:c,className:`bg-white text-blue-600 font-medium rounded-full px-3 py-0.5 text-xs min-h-[28px] min-w-[28px] flex items-center justify-center hover:bg-blue-50 active:bg-blue-100 transition-colors`,children:`Upgrade`}),(0,W.jsx)(`button`,{onClick:l,className:`min-h-[28px] min-w-[28px] flex items-center justify-center rounded-full hover:bg-blue-500 active:bg-blue-800 transition-colors`,"aria-label":`Dismiss upgrade notification`,children:(0,W.jsx)(o,{className:`size-4`})})]})]})}):null}var Sv=c(e=>({src:null,alt:``,open:(t,n=``)=>e({src:t,alt:n}),close:()=>e({src:null,alt:``})}));function Cv(){let{src:e,alt:t,close:n}=Sv(),r=(0,H.useCallback)(e=>{e.key===`Escape`&&n()},[n]);return(0,H.useEffect)(()=>{if(e)return document.addEventListener(`keydown`,r),()=>document.removeEventListener(`keydown`,r)},[e,r]),e?(0,W.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-sm animate-in fade-in duration-150`,onClick:n,children:[(0,W.jsx)(`button`,{onClick:n,className:`absolute top-4 right-4 z-10 flex items-center justify-center size-8 rounded-full bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Close`,children:(0,W.jsx)(o,{className:`size-5`})}),(0,W.jsx)(`img`,{src:e,alt:t,className:`max-w-[90vw] max-h-[90vh] object-contain rounded-lg shadow-2xl`,onClick:e=>e.stopPropagation()})]}):null}var wv=c(e=>({svg:null,open:t=>e({svg:t}),close:()=>e({svg:null})})),Tv=.25,Ev=4,Dv=.25;function Ov(){let{svg:e,close:t}=wv(),n=(0,H.useRef)(null),[r,i]=(0,H.useState)(1),[a,s]=(0,H.useState)({x:0,y:0}),c=(0,H.useRef)(!1),l=(0,H.useRef)({x:0,y:0});(0,H.useEffect)(()=>{e&&(i(1),s({x:0,y:0}))},[e]);let u=(0,H.useCallback)(e=>{e.key===`Escape`&&t(),(e.key===`=`||e.key===`+`)&&i(e=>Math.min(Ev,e+Dv)),e.key===`-`&&i(e=>Math.max(Tv,e-Dv)),e.key===`0`&&(i(1),s({x:0,y:0}))},[t]);(0,H.useEffect)(()=>{if(e)return document.addEventListener(`keydown`,u),()=>document.removeEventListener(`keydown`,u)},[e,u]);let d=(0,H.useCallback)(e=>{e.preventDefault();let t=e.deltaY>0?-Dv:Dv;i(e=>Math.min(Ev,Math.max(Tv,e+t)))},[]),f=(0,H.useCallback)(e=>{e.button===0&&(c.current=!0,l.current={x:e.clientX,y:e.clientY},e.target.setPointerCapture(e.pointerId))},[]),p=(0,H.useCallback)(e=>{if(!c.current)return;let t=e.clientX-l.current.x,n=e.clientY-l.current.y;l.current={x:e.clientX,y:e.clientY},s(e=>({x:e.x+t,y:e.y+n}))},[]),m=(0,H.useCallback)(()=>{c.current=!1},[]);return e?(0,W.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex flex-col bg-black/85 backdrop-blur-sm animate-in fade-in duration-150`,onClick:t,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 bg-black/40`,onClick:e=>e.stopPropagation(),children:[(0,W.jsxs)(`span`,{className:`text-sm text-white/70`,children:[Math.round(r*100),`% — Scroll to zoom, drag to pan, 0 to reset`]}),(0,W.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,W.jsx)(`button`,{onClick:()=>i(e=>Math.max(Tv,e-Dv)),className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Zoom out`,children:(0,W.jsx)(an,{className:`size-4`})}),(0,W.jsx)(`button`,{onClick:()=>i(e=>Math.min(Ev,e+Dv)),className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Zoom in`,children:(0,W.jsx)(rn,{className:`size-4`})}),(0,W.jsx)(`button`,{onClick:()=>{i(1),s({x:0,y:0})},className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Reset zoom`,children:(0,W.jsx)(Bt,{className:`size-4`})}),(0,W.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors ml-2`,"aria-label":`Close`,children:(0,W.jsx)(o,{className:`size-5`})})]})]}),(0,W.jsx)(`div`,{ref:n,className:`flex-1 overflow-hidden cursor-grab active:cursor-grabbing`,onClick:e=>e.stopPropagation(),onWheel:d,onPointerDown:f,onPointerMove:p,onPointerUp:m,children:(0,W.jsx)(`div`,{className:`w-full h-full flex items-center justify-center`,style:{transform:`translate(${a.x}px, ${a.y}px) scale(${r})`,transformOrigin:`center center`},children:(0,W.jsx)(`div`,{className:`mermaid-overlay-content bg-white rounded-lg p-6 shadow-2xl [&_svg]:max-w-full [&_svg]:h-auto`,dangerouslySetInnerHTML:{__html:e}})})})]}):null}var kv=`https://ppm.hienle.tech`;function Av(){return window.location.hostname.endsWith(`.trycloudflare.com`)}function jv(){let e=iv(e=>e.showOverlay),[t,n]=(0,H.useState)(!1);if(!e)return null;let r=Av();async function i(){n(!0);try{if((await fetch(`/api/health`,{cache:`no-store`})).ok){if(iv.getState().markUp(),`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload();return}}catch{}n(!1)}return(0,W.jsx)(`div`,{className:`fixed inset-0 z-[200] bg-background/95 backdrop-blur-sm flex items-center justify-center p-4`,children:(0,W.jsxs)(`div`,{className:`max-w-sm w-full text-center space-y-6`,children:[(0,W.jsx)(`div`,{className:`flex justify-center`,children:(0,W.jsx)(`div`,{className:`rounded-full bg-destructive/10 p-4`,children:(0,W.jsx)(r?nn:Ut,{className:`h-10 w-10 text-destructive`})})}),(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsx)(`h2`,{className:`text-xl font-semibold text-foreground`,children:r?`Connection Lost`:`Server Unreachable`}),(0,W.jsx)(`p`,{className:`text-sm text-muted-foreground leading-relaxed`,children:r?`The tunnel appears to have closed. The server may have restarted with a new URL.`:`Cannot connect to the PPM server. It may have stopped or is restarting.`})]}),(0,W.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[r&&(0,W.jsx)(`a`,{href:kv,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center justify-center rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors`,children:`Open PPM Cloud`}),(0,W.jsxs)(`button`,{onClick:i,disabled:t,className:`inline-flex items-center justify-center gap-2 rounded-md border border-border px-4 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors disabled:opacity-50`,children:[(0,W.jsx)(Lt,{className:`h-4 w-4 ${t?`animate-spin`:``}`}),t?`Retrying…`:`Retry Connection`]})]}),!r&&(0,W.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`If the server was stopped, run `,(0,W.jsx)(`code`,{className:`bg-muted px-1 py-0.5 rounded text-[11px]`,children:`ppm start`}),` to restart it.`]})]})})}function Mv(){let e=vm(e=>e.statusBarItems),t=e.filter(e=>e.alignment===`left`).sort((e,t)=>t.priority-e.priority),n=e.filter(e=>e.alignment===`right`).sort((e,t)=>t.priority-e.priority);return(0,W.jsxs)(`div`,{className:`hidden md:flex items-center justify-between h-[22px] px-2 bg-surface border-t border-border text-[11px] text-text-subtle select-none shrink-0`,children:[(0,W.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:t.map(e=>(0,W.jsx)(Nv,{item:e},e.id))}),(0,W.jsx)(`div`,{className:`flex items-center gap-2 min-w-0`,children:n.map(e=>(0,W.jsx)(Nv,{item:e},e.id))})]})}function Nv({item:e}){let t=(0,W.jsx)(`button`,{className:`truncate px-1 rounded-sm transition-colors ${e.command?`hover:bg-accent/15 hover:text-text-primary cursor-pointer`:`cursor-default`}`,onClick:()=>{e.command&&window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e.command}}))},children:e.text});return e.tooltip?(0,W.jsxs)(Ru,{children:[(0,W.jsx)(zu,{asChild:!0,children:t}),(0,W.jsx)(Bu,{side:`top`,className:`text-xs`,children:e.tooltip})]}):t}function Pv(){let e=vm(e=>e.quickPick),t=vm(e=>e.resolveQuickPick);return e?(0,W.jsx)(Fv,{items:e.items,options:e.options,onSelect:e=>t(e),onCancel:()=>t(void 0)}):null}function Fv({items:e,options:t,onSelect:n,onCancel:r}){let[i,a]=(0,H.useState)(``),[o,s]=(0,H.useState)(0),[c,l]=(0,H.useState)(()=>{let t=new Set;return e.forEach((e,n)=>{e.picked&&t.add(n)}),t}),u=(0,H.useRef)(null),d=(0,H.useRef)(null),f=t.canPickMany??!1;(0,H.useEffect)(()=>{requestAnimationFrame(()=>u.current?.focus())},[]);let p=(0,H.useMemo)(()=>{if(!i.trim())return e.map((e,t)=>({item:e,originalIdx:t}));let t=i.toLowerCase();return e.map((e,t)=>({item:e,originalIdx:t})).filter(({item:e})=>e.label.toLowerCase().includes(t)||e.description?.toLowerCase().includes(t)||e.detail?.toLowerCase().includes(t))},[e,i]);(0,H.useEffect)(()=>{s(e=>Math.min(e,Math.max(p.length-1,0)))},[p.length]),(0,H.useEffect)(()=>{(d.current?.children[o])?.scrollIntoView({block:`nearest`})},[o]);let m=(0,H.useCallback)(()=>{f?n(e.filter((e,t)=>c.has(t))):p[o]&&n([p[o].item])},[f,c,e,p,o,n]);function h(e){switch(e.key){case`ArrowDown`:e.preventDefault(),p.length>0&&s(e=>(e+1)%p.length);break;case`ArrowUp`:e.preventDefault(),p.length>0&&s(e=>(e-1+p.length)%p.length);break;case` `:if(f&&p[o]){e.preventDefault();let t=p[o].originalIdx;l(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})}break;case`Enter`:e.preventDefault(),m();break;case`Escape`:e.preventDefault(),r();break}}return(0,W.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:r,children:[(0,W.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,W.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden max-h-[80vh] md:max-h-none`,onClick:e=>e.stopPropagation(),onKeyDown:h,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,W.jsx)(Vt,{className:`size-4 text-text-subtle shrink-0`}),(0,W.jsx)(`input`,{ref:u,type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:t.placeholder??`Select an item...`,className:`flex-1 bg-transparent text-sm text-text-primary outline-none placeholder:text-text-subtle`}),(0,W.jsx)(`kbd`,{className:`hidden sm:inline-flex items-center rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] text-text-subtle font-mono`,children:`ESC`})]}),(0,W.jsx)(`div`,{ref:d,className:`max-h-72 overflow-y-auto py-1`,children:p.length===0?(0,W.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No matching items`}):p.map(({item:e,originalIdx:t},r)=>(0,W.jsxs)(`button`,{onClick:()=>{f?l(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}):n([e])},className:L(`flex items-center gap-3 w-full px-3 py-2 text-sm text-left transition-colors`,r===o?`bg-accent/15 text-text-primary`:`text-text-secondary hover:bg-surface-elevated`),children:[f&&(0,W.jsx)(`span`,{className:L(`size-4 shrink-0 rounded border flex items-center justify-center`,c.has(t)?`bg-primary border-primary text-primary-foreground`:`border-border`),children:c.has(t)&&(0,W.jsx)(Ee,{className:`size-3`})}),(0,W.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,W.jsx)(`div`,{className:`truncate`,children:e.label}),e.description&&(0,W.jsx)(`span`,{className:`text-xs text-text-subtle ml-2`,children:e.description}),e.detail&&(0,W.jsx)(`div`,{className:`text-xs text-text-subtle truncate mt-0.5`,children:e.detail})]})]},t))}),f&&(0,W.jsxs)(`div`,{className:`flex items-center justify-between border-t border-border px-3 py-1.5`,children:[(0,W.jsxs)(`span`,{className:`text-[10px] text-text-subtle`,children:[c.size,` selected`]}),(0,W.jsx)(`button`,{onClick:m,className:`text-xs text-primary hover:text-primary/80 font-medium`,children:`Confirm`})]})]})]})}function Iv(){let e=vm(e=>e.inputBox),t=vm(e=>e.resolveInputBox);return e?(0,W.jsx)(Lv,{options:e.options,onConfirm:e=>t(e),onCancel:()=>t(void 0)}):null}function Lv({options:e,onConfirm:t,onCancel:n}){let[r,i]=(0,H.useState)(e.value??``),a=(0,H.useRef)(null);(0,H.useEffect)(()=>{requestAnimationFrame(()=>{a.current?.focus(),a.current?.select()})},[]);function o(e){e.key===`Enter`?(e.preventDefault(),t(r)):e.key===`Escape`&&(e.preventDefault(),n())}return(0,W.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:n,children:[(0,W.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,W.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden`,onClick:e=>e.stopPropagation(),children:[e.prompt&&(0,W.jsx)(`div`,{className:`px-3 pt-3 pb-1 text-sm text-text-primary`,children:e.prompt}),(0,W.jsx)(`div`,{className:`flex items-center gap-2 px-3 py-2.5`,children:(0,W.jsx)(`input`,{ref:a,type:e.password?`password`:`text`,value:r,onChange:e=>i(e.target.value),onKeyDown:o,placeholder:e.placeholder??``,className:`flex-1 bg-surface border border-border rounded px-2 py-1.5 text-sm text-text-primary outline-none focus:border-primary placeholder:text-text-subtle`})}),(0,W.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t border-border px-3 py-2`,children:[(0,W.jsx)(`button`,{onClick:n,className:`px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors rounded`,children:`Cancel`}),(0,W.jsx)(`button`,{onClick:()=>t(r),className:`px-3 py-1.5 text-xs bg-primary text-primary-foreground rounded hover:bg-primary/90 transition-colors font-medium`,children:`OK`})]})]})]})}var Rv=3e4,zv=1e3,Bv=class{ws=null;url;handlers=[];reconnectAttempts=0;reconnectTimer=null;intentionalClose=!1;pendingMessages=[];visibilityHandler=null;constructor(e){this.url=e,this.visibilityHandler=()=>{document.visibilityState===`visible`&&!this.intentionalClose&&this.ws?.readyState!==WebSocket.OPEN&&(this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null,this.reconnectAttempts=0,this.connect())},document.addEventListener(`visibilitychange`,this.visibilityHandler)}connect(){this.intentionalClose=!1,this.cleanup();let e=window.location.protocol===`https:`?`wss:`:`ws:`,t=this.url.startsWith(`ws`)?this.url:`${e}//${window.location.host}${this.url}`;this.ws=new WebSocket(t),this.ws.onopen=()=>{this.reconnectAttempts=0;try{this.ws?.send(JSON.stringify({type:`ready`}))}catch{}if(this.pendingMessages.length>0){console.log(`[ws] flushing ${this.pendingMessages.length} queued message(s)`);for(let e of this.pendingMessages)try{this.ws?.send(e)}catch{}this.pendingMessages=[]}},this.ws.onmessage=e=>{for(let t of this.handlers)t(e)},this.ws.onclose=()=>{this.intentionalClose||this.scheduleReconnect()},this.ws.onerror=()=>{this.ws?.close()}}disconnect(){this.intentionalClose=!0,this.pendingMessages=[],this.cleanup(),this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.visibilityHandler&&=(document.removeEventListener(`visibilitychange`,this.visibilityHandler),null)}send(e){this.ws?.readyState===WebSocket.OPEN?this.ws.send(e):this.ws?.readyState===WebSocket.CONNECTING?(console.warn(`[ws] WS still CONNECTING — queuing message`),this.pendingMessages.push(e)):console.warn(`[ws] message dropped — readyState=${this.ws?.readyState??`no-ws`}`)}onMessage(e){return this.handlers.push(e),()=>{this.handlers=this.handlers.filter(t=>t!==e)}}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}cleanup(){this.ws&&=(this.ws.onopen=null,this.ws.onclose=null,this.ws.onmessage=null,this.ws.onerror=null,(this.ws.readyState===WebSocket.OPEN||this.ws.readyState===WebSocket.CONNECTING)&&this.ws.close(),null)}scheduleReconnect(){let e=Math.min(zv*2**this.reconnectAttempts,Rv);this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>this.connect(),e)}};function Vv(e=!0){let t=(0,H.useRef)(null),n=(0,H.useCallback)(e=>{t.current?.send(JSON.stringify(e))},[]);return(0,H.useEffect)(()=>{if(!e)return;let r=oe(),i=new Bv(r?`/ws/extensions?token=${encodeURIComponent(r)}`:`/ws/extensions`);t.current=i,i.onMessage(e=>{let t;try{t=JSON.parse(e.data)}catch{return}let r=vm.getState();switch(t.type){case`contributions:update`:r.setContributions(t.contributions);break;case`statusbar:update`:r.addStatusBarItem(t.item);break;case`statusbar:remove`:r.removeStatusBarItem(t.itemId);break;case`tree:update`:t.parentId?r.updateTreeChildren(t.viewId,t.parentId,t.items):r.updateTree(t.viewId,t.items);break;case`tree:refresh`:r.removeTree(t.viewId);break;case`notification`:{let e=t.level===`error`?Cn.error:t.level===`warn`?Cn.warning:Cn.info;if(t.actions&&t.actions.length>0){let r={action:{label:t.actions[0],onClick:()=>n({type:`notification:action`,id:t.id,action:t.actions[0]??null})},onDismiss:()=>n({type:`notification:action`,id:t.id,action:null})};t.actions.length>1&&(r.cancel={label:t.actions[1],onClick:()=>n({type:`notification:action`,id:t.id,action:t.actions[1]??null})}),e(t.message,r)}else e(t.message);break}case`quickpick:show`:r.showQuickPick(t.items,t.options).then(e=>{n({type:`quickpick:resolve`,requestId:t.requestId,selected:e??null})});break;case`inputbox:show`:r.showInputBox(t.options).then(e=>{n({type:`inputbox:resolve`,requestId:t.requestId,value:e??null})});break;case`webview:create`:r.addWebviewPanel({id:t.panelId,extensionId:t.extensionId,viewType:t.viewType,title:t.title,html:``}),op.getState().openTab({type:`extension-webview`,title:t.title,projectId:null,closable:!0,metadata:{panelId:t.panelId,extensionId:t.extensionId}});break;case`webview:html`:r.updateWebviewPanel(t.panelId,{html:t.html});break;case`webview:dispose`:r.removeWebviewPanel(t.panelId);break;case`webview:postMessage`:window.dispatchEvent(new CustomEvent(`ext:webview:message`,{detail:{panelId:t.panelId,message:t.message}}));break}});let a=e=>{let{panelId:t,message:n}=e.detail;i.send(JSON.stringify({type:`webview:message`,panelId:t,message:n}))};window.addEventListener(`ext:webview:send`,a);let o=e=>{let{viewId:t,itemId:n}=e.detail;i.send(JSON.stringify({type:`tree:expand`,viewId:t,itemId:n}))};window.addEventListener(`ext:tree:expand`,o);let s=e=>{let{command:t,args:n}=e.detail;i.send(JSON.stringify({type:`command:execute`,command:t,args:n}))};return window.addEventListener(`ext:command:execute`,s),i.connect(),()=>{window.removeEventListener(`ext:webview:send`,a),window.removeEventListener(`ext:tree:expand`,o),window.removeEventListener(`ext:command:execute`,s),i.disconnect(),t.current=null}},[n,e]),{send:n}}function Hv(){let[e,t]=(0,H.useState)(`checking`),[n,r]=(0,H.useState)(!1),[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(),[c,u]=(0,H.useState)(!1);(0,H.useEffect)(()=>{let e=()=>{s(`settings`),a(!0)};return window.addEventListener(`open-mobile-settings`,e),()=>window.removeEventListener(`open-mobile-settings`,e)},[]);let[d,f]=(0,H.useState)(()=>new Set([`__global__`])),p=U(e=>e.theme),m=U(e=>e.deviceName),h=ap(e=>e.fetchProjects),g=U(e=>e.fetchServerInfo),_=ap(e=>e.activeProject),v=(0,H.useRef)(U_());(0,H.useEffect)(()=>{if(Un(p),p===`system`){let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>Un(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}},[p]),(0,H.useEffect)(()=>{g()},[g]),(0,H.useEffect)(()=>{async function e(){let e=oe();try{let n={};e&&(n.Authorization=`Bearer ${e}`),(await(await fetch(`/api/auth/check`,{headers:n})).json()).ok?t(`authenticated`):t(`unauthenticated`)}catch{t(`unauthenticated`)}}e()},[]),Y_();let{paletteOpen:y,paletteInitialQuery:b,closePalette:x}=Wp();nv(),sv(),Vv(e===`authenticated`),(0,H.useEffect)(()=>{if(e!==`authenticated`)return;let t=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,t),()=>window.removeEventListener(`beforeunload`,t)},[e]),(0,H.useEffect)(()=>{e===`authenticated`&&l(async()=>{let{useKeybindingsStore:e}=await import(`./keybindings-store-DdhEeehv.js`);return{useKeybindingsStore:e}},__vite__mapDeps([56,6,1,2])).then(({useKeybindingsStore:e})=>{e.getState().loadFromServer()})},[e]),(0,H.useEffect)(()=>{e===`authenticated`&&h().then(async()=>{let e=v.current,{projects:t,customOrder:n}=ap.getState();if(t.length===0)return;let r=e.projectName?t.find(t=>t.name===e.projectName):void 0;if(r||=ip(t,n)[0],!r)return;let i=await Gf(r.name);if(i){let e=localStorage.getItem(`ppm-panels-${r.name}`),t=Jf(e?JSON.parse(e):null,i);t&&t===i&&localStorage.setItem(`ppm-panels-${r.name}`,JSON.stringify(i))}ap.getState().setActiveProject(r),queueMicrotask(()=>{if(e.tabType&&J_(e.tabType,e.tabIdentifier,r.name),e.openChat){J_(`chat`,e.openChat,r.name);let t=new URL(window.location.href);t.searchParams.delete(`openChat`),window.history.replaceState(null,``,t.pathname)}})})},[e,h]),(0,H.useEffect)(()=>{let e=_?.name??`__global__`;op.getState().switchProject(e)},[_?.name]),(0,H.useEffect)(()=>{let e=_?.name??`__global__`;f(t=>t.has(e)?t:new Set([...t,e]))},[_?.name]),(0,H.useEffect)(()=>{e===`authenticated`&&!_&&op.getState().switchProject(`__global__`)},[e,_]);let S=(0,H.useCallback)(()=>{t(`authenticated`)},[]);if(e===`checking`)return(0,W.jsx)(`div`,{className:`min-h-dvh flex items-center justify-center bg-background`,children:(0,W.jsx)(`div`,{className:`animate-pulse text-text-secondary text-sm`,children:`Loading...`})});if(e===`unauthenticated`)return(0,W.jsx)(V_,{onSuccess:S});let C=_?.name??`__global__`;return(0,W.jsx)(Lu,{children:(0,W.jsxs)(`div`,{className:`h-dvh flex flex-col bg-background text-foreground overflow-hidden relative`,children:[(0,W.jsx)(xv,{onVisibilityChange:r}),m&&(0,W.jsx)(`div`,{className:L(`md:hidden fixed left-0 z-50 px-2 py-0.5 bg-primary/80 text-primary-foreground text-[10px] font-medium rounded-br transition-[top]`,n?`top-7`:`top-0`),children:m}),(0,W.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,W.jsx)(M_,{}),(0,W.jsx)(Gg,{}),(0,W.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[[...d].map(e=>(0,W.jsx)(`div`,{className:L(`flex-1 overflow-hidden pb-12 md:pb-0`,C!==e&&`hidden`),children:(0,W.jsx)(mm,{projectName:e})},e)),(0,W.jsx)(Mv,{})]})]}),(0,W.jsx)(I_,{onMenuPress:()=>a(!0),onProjectsPress:()=>u(!0)}),(0,W.jsx)(R_,{isOpen:i,onClose:()=>{a(!1),s(void 0)},initialTab:o}),(0,W.jsx)(B_,{isOpen:c,onClose:()=>u(!1)}),(0,W.jsx)(mv,{open:y,onClose:x,initialQuery:b}),(0,W.jsx)(hv,{}),(0,W.jsx)(Cv,{}),(0,W.jsx)(Ov,{}),(0,W.jsx)(Pv,{}),(0,W.jsx)(Iv,{}),(0,W.jsx)(jv,{}),(0,W.jsx)(Gn,{position:`bottom-left`,closeButton:!0,toastOptions:{className:`bg-surface border-border text-foreground`}})]})})}(0,on.createRoot)(document.getElementById(`root`)).render((0,W.jsx)(H.StrictMode,{children:(0,W.jsx)(Hv,{})}));export{Yt as $,Fm as A,Me as At,Jp as B,Xm as C,Ue as Ct,Pm as D,Le as Dt,Am as E,Re as Et,Tm as F,we as Ft,Hp as G,Ip as H,Em as I,Se as It,Q as J,op as K,Cm as L,ye as Lt,$ as M,Oe as Mt,Sm as N,De as Nt,Rm as O,Fe as Ot,wm as P,Ee as Pt,Xt as Q,ym as R,ve as Rt,th as S,We as St,zm as T,ze as Tt,Vp as U,Up as V,Bp as W,Cn as X,U as Y,en as Z,nh as _,et as _t,Ag as a,jt as at,oh as b,qe as bt,Oh as c,Ot as ct,vh as d,vt as dt,Gt as et,xh as f,ht as ft,eh as g,tt as gt,yh as h,rt as ht,T_ as i,Nt as it,Lm as j,ke as jt,Im as k,Ne as kt,Dh as l,Dt as lt,bh as m,it as mt,wv as n,Bt as nt,dg as o,At as ot,Sh as p,V as pt,ap as q,Sv as r,Lt as rt,Mh as s,kt as st,Bv as t,Vt as tt,Th as u,yt as ut,rh as v,Ye as vt,Vm as w,Ve as wt,ah as x,Ge as xt,ih as y,Je as yt,vm as z};
|