@hienlh/ppm 0.8.22 → 0.8.24
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 +12 -0
- package/dist/web/assets/{chat-tab-DDjg9H1D.js → chat-tab-pRLDQfWP.js} +1 -1
- package/dist/web/assets/{code-editor-DsNp2IL6.js → code-editor-Dley_Zvq.js} +1 -1
- package/dist/web/assets/{database-viewer-BhiQF2kg.js → database-viewer-CrIUjGHq.js} +1 -1
- package/dist/web/assets/{diff-viewer-36sfson3.js → diff-viewer-TKReiT4F.js} +1 -1
- package/dist/web/assets/{git-graph-CRRPqBbH.js → git-graph-CgSZW5-E.js} +1 -1
- package/dist/web/assets/{index-CYuAmjsk.js → index-1k2GbRgr.js} +4 -4
- package/dist/web/assets/keybindings-store-CJS_N6r7.js +1 -0
- package/dist/web/assets/{markdown-renderer-MxDnReRv.js → markdown-renderer-tCKFSain.js} +1 -1
- package/dist/web/assets/{postgres-viewer-EbDl0fHG.js → postgres-viewer-BrGX-jcK.js} +1 -1
- package/dist/web/assets/{settings-tab-Cavyug36.js → settings-tab-CYIypDSv.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-mxuHxYUX.js → sqlite-viewer-Bg05Ci6Z.js} +1 -1
- package/dist/web/assets/{terminal-tab-DiRnedVm.js → terminal-tab-C3mpYX0x.js} +1 -1
- package/dist/web/index.html +1 -1
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/src/providers/claude-agent-sdk.ts +3 -1
- package/src/server/routes/accounts.ts +2 -2
- package/src/services/account.service.ts +43 -9
- package/src/web/components/settings/accounts-settings-section.tsx +2 -1
- package/src/web/lib/api-settings.ts +2 -2
- package/dist/web/assets/keybindings-store-DI1pVbE8.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/terminal-tab-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/terminal-tab-C3mpYX0x.js","assets/react-CYzKIDNi.js","assets/settings-store-xG6mKqkD.js","assets/react-rgzL83kk.js","assets/utils-DC-bdPS3.js","assets/jsx-runtime-wQxeESYQ.js","assets/terminal-tab-BrP-ENHg.css","assets/chat-tab-pRLDQfWP.js","assets/input-CE3bFwLk.js","assets/switch-D8Ej2Tc7.js","assets/api-settings-CaKDC7_s.js","assets/api-client-TUmacMRS.js","assets/columns-2-fz8yNaAo.js","assets/tab-store-0CKk8cSr.js","assets/markdown-renderer-tCKFSain.js","assets/code-editor-Dley_Zvq.js","assets/use-monaco-theme-DlFSiqvG.js","assets/database-viewer-CrIUjGHq.js","assets/dist-D9RHR8A4.js","assets/sqlite-viewer-Bg05Ci6Z.js","assets/table-C0oSLUYn.js","assets/postgres-viewer-BrGX-jcK.js","assets/git-graph-CgSZW5-E.js","assets/diff-viewer-TKReiT4F.js","assets/settings-tab-CYIypDSv.js","assets/keybindings-store-CJS_N6r7.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{i as e,n as t,t as n}from"./react-CYzKIDNi.js";import{A as r,C as i,D as a,E as o,M as s,N as c,O as l,P as u,S as d,T as f,_ as p,a as m,b as h,c as g,d as _,f as v,g as y,h as b,i as x,j as S,k as C,l as w,m as T,n as E,o as D,p as O,r as k,t as A,u as ee,v as te,w as ne,x as re,y as j}from"./input-CE3bFwLk.js";import{n as M,t as ie}from"./jsx-runtime-wQxeESYQ.js";import{a as ae,c as oe,d as se,f as N,g as P,h as ce,i as le,l as ue,m as de,n as fe,o as pe,p as me,r as he,s as ge,t as _e,u as ve}from"./switch-D8Ej2Tc7.js";import{a as ye,i as be,n as F,r as xe,t as Se}from"./tab-store-0CKk8cSr.js";import{t as Ce}from"./react-rgzL83kk.js";import{n as I,r as we,t as Te}from"./settings-store-xG6mKqkD.js";import{i as Ee,n as L,t as De}from"./utils-DC-bdPS3.js";import{a as Oe,i as ke,r as Ae,t as R}from"./api-client-TUmacMRS.js";import{c as je,d as Me,f as Ne,i as Pe,l as Fe,m as Ie,o as Le,r as Re,s as ze,t as Be,u as Ve}from"./api-settings-CaKDC7_s.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 He=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&&ee(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&&ee(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 ee(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,ee(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}}}})),Ue=t(((e,t)=>{t.exports=He()})),We=t((e=>{var t=Ue(),r=n(),i=u();function a(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 o(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function s(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 c(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 l(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(s(e)!==e)throw Error(a(188))}function f(e){var t=e.alternate;if(!t){if(t=s(e),t===null)throw Error(a(188));return t===e?e:null}for(var n=e,r=t;;){var i=n.return;if(i===null)break;var o=i.alternate;if(o===null){if(r=i.return,r!==null){n=r;continue}break}if(i.child===o.child){for(o=i.child;o;){if(o===n)return d(i),e;if(o===r)return d(i),t;o=o.sibling}throw Error(a(188))}if(n.return!==r.return)n=i,r=o;else{for(var c=!1,l=i.child;l;){if(l===n){c=!0,n=i,r=o;break}if(l===r){c=!0,r=i,n=o;break}l=l.sibling}if(!c){for(l=o.child;l;){if(l===n){c=!0,n=o,r=i;break}if(l===r){c=!0,r=o,n=i;break}l=l.sibling}if(!c)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(n.tag!==3)throw Error(a(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 ee(e){return typeof e!=`object`||!e?null:(e=A&&e[A]||e[`@@iterator`],typeof e==`function`?e:null)}var te=Symbol.for(`react.client.reference`);function ne(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===te?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?ne(e.type)||`Memo`:t;case D:t=e._payload,e=e._init;try{return ne(e(t))}catch{}}return null}var re=Array.isArray,j=r.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,M=i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,ie={pending:!1,data:null,method:null,action:null},ae=[],oe=-1;function se(e){return{current:e}}function N(e){0>oe||(e.current=ae[oe],ae[oe]=null,oe--)}function P(e,t){oe++,ae[oe]=e.current,e.current=t}var ce=se(null),le=se(null),ue=se(null),de=se(null);function fe(e,t){switch(P(ue,t),P(le,e),P(ce,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Hd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Hd(t),e=Ud(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}N(ce),P(ce,e)}function pe(){N(ce),N(le),N(ue)}function me(e){e.memoizedState!==null&&P(de,e);var t=ce.current,n=Ud(t,e.type);t!==n&&(P(le,e),P(ce,n))}function he(e){le.current===e&&(N(ce),N(le)),de.current===e&&(N(de),Qf._currentValue=ie)}var ge,_e;function ve(e){if(ge===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);ge=t&&t[1]||``,_e=-1<e.stack.indexOf(`
|
|
3
3
|
at`)?` (<anonymous>)`:-1<e.stack.indexOf(`@`)?`@unknown:0:0`:``}return`
|
|
4
4
|
`+ge+e+_e}var ye=!1;function be(e,t){if(!e||ye)return``;ye=!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,12 +11,12 @@ 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 z.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},Er=`DialogDescriptionWarning`,Dr=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${wr(Er).contentName}}.`;return z.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},Or=$n,kr=ar,Ar=sr,jr=dr,Mr=gr,Nr=vr,Pr=br,Fr=`rovingFocusGroup.onEntryFocus`,Ir={bubbles:!1,cancelable:!0},Lr=`RovingFocusGroup`,[Rr,zr,Br]=h(Lr),[Vr,Hr]=d(Lr,[Br]),[Ur,Wr]=Vr(Lr),Gr=z.forwardRef((e,t)=>(0,B.jsx)(Rr.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,B.jsx)(Rr.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,B.jsx)(Kr,{...e,ref:t})})}));Gr.displayName=Lr;var Kr=z.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:o,currentTabStopId:s,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:l,onEntryFocus:u,preventScrollOnEntryFocus:d=!1,...f}=e,m=z.useRef(null),h=C(t,m),g=b(o),[_,v]=p({prop:s,defaultProp:c??null,onChange:l,caller:Lr}),[y,x]=z.useState(!1),S=T(u),w=zr(n),E=z.useRef(!1),[D,O]=z.useState(0);return z.useEffect(()=>{let e=m.current;if(e)return e.addEventListener(Fr,S),()=>e.removeEventListener(Fr,S)},[S]),(0,B.jsx)(Ur,{scope:n,orientation:r,dir:g,loop:a,currentTabStopId:_,onItemFocus:z.useCallback(e=>v(e),[v]),onItemShiftTab:z.useCallback(()=>x(!0),[]),onFocusableItemAdd:z.useCallback(()=>O(e=>e+1),[]),onFocusableItemRemove:z.useCallback(()=>O(e=>e-1),[]),children:(0,B.jsx)(i.div,{tabIndex:y||D===0?-1:0,"data-orientation":r,...f,ref:h,style:{outline:`none`,...e.style},onMouseDown:j(e.onMouseDown,()=>{E.current=!0}),onFocus:j(e.onFocus,e=>{let t=!E.current;if(e.target===e.currentTarget&&t&&!y){let t=new CustomEvent(Fr,Ir);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=w().filter(e=>e.focusable);Qr([e.find(e=>e.active),e.find(e=>e.id===_),...e].filter(Boolean).map(e=>e.ref.current),d)}}E.current=!1}),onBlur:j(e.onBlur,()=>x(!1))})})}),qr=`RovingFocusGroupItem`,Jr=z.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:o,children:s,...c}=e,l=y(),u=o||l,d=Wr(qr,n),f=d.currentTabStopId===u,p=zr(n),{onFocusableItemAdd:m,onFocusableItemRemove:h,currentTabStopId:g}=d;return z.useEffect(()=>{if(r)return m(),()=>h()},[r,m,h]),(0,B.jsx)(Rr.ItemSlot,{scope:n,id:u,focusable:r,active:a,children:(0,B.jsx)(i.span,{tabIndex:f?0:-1,"data-orientation":d.orientation,...c,ref:t,onMouseDown:j(e.onMouseDown,e=>{r?d.onItemFocus(u):e.preventDefault()}),onFocus:j(e.onFocus,()=>d.onItemFocus(u)),onKeyDown:j(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){d.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=Zr(e,d.orientation,d.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=d.loop?$r(n,r+1):n.slice(r+1)}setTimeout(()=>Qr(n))}}),children:typeof s==`function`?s({isCurrentTabStop:f,hasTabStop:g!=null}):s})})});Jr.displayName=qr;var Yr={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function Xr(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function Zr(e,t,n){let r=Xr(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return Yr[r]}function Qr(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function $r(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var ei=Gr,ti=Jr,ni=[`Enter`,` `],ri=[`ArrowDown`,`PageUp`,`Home`],ii=[`ArrowUp`,`PageDown`,`End`],ai=[...ri,...ii],oi={ltr:[...ni,`ArrowRight`],rtl:[...ni,`ArrowLeft`]},si={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},ci=`Menu`,[li,ui,di]=h(ci),[fi,pi]=d(ci,[di,D,Hr]),mi=D(),hi=Hr(),[gi,_i]=fi(ci),[vi,yi]=fi(ci),bi=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=mi(t),[c,l]=z.useState(null),u=z.useRef(!1),d=T(a),f=b(i);return z.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,B.jsx)(m,{...s,children:(0,B.jsx)(gi,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,B.jsx)(vi,{scope:t,onClose:z.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};bi.displayName=ci;var xi=`MenuAnchor`,Si=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=mi(n);return(0,B.jsx)(E,{...i,...r,ref:t})});Si.displayName=xi;var Ci=`MenuPortal`,[wi,Ti]=fi(Ci,{forceMount:void 0}),Ei=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=_i(Ci,t);return(0,B.jsx)(wi,{scope:t,forceMount:n,children:(0,B.jsx)(Wn,{present:n||a.open,children:(0,B.jsx)(_,{asChild:!0,container:i,children:r})})})};Ei.displayName=Ci;var Di=`MenuContent`,[Oi,ki]=fi(Di),Ai=z.forwardRef((e,t)=>{let n=Ti(Di,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=_i(Di,e.__scopeMenu),o=yi(Di,e.__scopeMenu);return(0,B.jsx)(li.Provider,{scope:e.__scopeMenu,children:(0,B.jsx)(Wn,{present:r||a.open,children:(0,B.jsx)(li.Slot,{scope:e.__scopeMenu,children:o.modal?(0,B.jsx)(ji,{...i,ref:t}):(0,B.jsx)(Mi,{...i,ref:t})})})})}),ji=z.forwardRef((e,t)=>{let n=_i(Di,e.__scopeMenu),r=z.useRef(null),i=C(t,r);return z.useEffect(()=>{let e=r.current;if(e)return g(e)},[]),(0,B.jsx)(Ni,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:j(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Mi=z.forwardRef((e,t)=>{let n=_i(Di,e.__scopeMenu);return(0,B.jsx)(Ni,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),V=o(`MenuContent.ScrollLock`),Ni=z.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=_i(Di,n),_=yi(Di,n),y=mi(n),b=hi(n),S=ui(n),[T,E]=z.useState(null),D=z.useRef(null),k=C(t,D,g.onContentChange),A=z.useRef(0),te=z.useRef(``),ne=z.useRef(0),re=z.useRef(null),M=z.useRef(`right`),ie=z.useRef(0),ae=m?w:z.Fragment,oe=m?{as:V,allowPinchZoom:!0}:void 0,se=e=>{let t=te.current+e,n=S().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=_a(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){te.current=t,window.clearTimeout(A.current),t!==``&&(A.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};z.useEffect(()=>()=>window.clearTimeout(A.current),[]),ee();let N=z.useCallback(e=>M.current===re.current?.side&&ya(e,re.current?.area),[]);return(0,B.jsx)(Oi,{scope:n,searchRef:te,onItemEnter:z.useCallback(e=>{N(e)&&e.preventDefault()},[N]),onItemLeave:z.useCallback(e=>{N(e)||(D.current?.focus(),E(null))},[N]),onTriggerLeave:z.useCallback(e=>{N(e)&&e.preventDefault()},[N]),pointerGraceTimerRef:ne,onPointerGraceIntentChange:z.useCallback(e=>{re.current=e},[]),children:(0,B.jsx)(ae,{...oe,children:(0,B.jsx)(v,{asChild:!0,trapped:i,onMountAutoFocus:j(a,e=>{e.preventDefault(),D.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:(0,B.jsx)(O,{asChild:!0,disableOutsidePointerEvents:s,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,children:(0,B.jsx)(ei,{asChild:!0,...b,dir:_.dir,orientation:`vertical`,loop:r,currentTabStopId:T,onCurrentTabStopIdChange:E,onEntryFocus:j(c,e=>{_.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,B.jsx)(x,{role:`menu`,"aria-orientation":`vertical`,"data-state":fa(g.open),"data-radix-menu-content":``,dir:_.dir,...y,...h,ref:k,style:{outline:`none`,...h.style},onKeyDown:j(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&&se(e.key));let i=D.current;if(e.target!==i||!ai.includes(e.key))return;e.preventDefault();let a=S().filter(e=>!e.disabled).map(e=>e.ref.current);ii.includes(e.key)&&a.reverse(),ha(a)}),onBlur:j(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(A.current),te.current=``)}),onPointerMove:j(e.onPointerMove,ba(e=>{let t=e.target,n=ie.current!==e.clientX;e.currentTarget.contains(t)&&n&&(M.current=e.clientX>ie.current?`right`:`left`,ie.current=e.clientX)}))})})})})})})});Ai.displayName=Di;var Pi=`MenuGroup`,Fi=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,B.jsx)(i.div,{role:`group`,...r,ref:t})});Fi.displayName=Pi;var Ii=`MenuLabel`,Li=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,B.jsx)(i.div,{...r,ref:t})});Li.displayName=Ii;var Ri=`MenuItem`,zi=`menu.itemSelect`,Bi=z.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:r,...i}=e,a=z.useRef(null),o=yi(Ri,e.__scopeMenu),s=ki(Ri,e.__scopeMenu),c=C(t,a),l=z.useRef(!1),u=()=>{let e=a.current;if(!n&&e){let t=new CustomEvent(zi,{bubbles:!0,cancelable:!0});e.addEventListener(zi,e=>r?.(e),{once:!0}),ne(e,t),t.defaultPrevented?l.current=!1:o.onClose()}};return(0,B.jsx)(Vi,{...i,ref:c,disabled:n,onClick:j(e.onClick,u),onPointerDown:t=>{e.onPointerDown?.(t),l.current=!0},onPointerUp:j(e.onPointerUp,e=>{l.current||e.currentTarget?.click()}),onKeyDown:j(e.onKeyDown,e=>{let t=s.searchRef.current!==``;n||t&&e.key===` `||ni.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});Bi.displayName=Ri;var Vi=z.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:a,...o}=e,s=ki(Ri,n),c=hi(n),l=z.useRef(null),u=C(t,l),[d,f]=z.useState(!1),[p,m]=z.useState(``);return z.useEffect(()=>{let e=l.current;e&&m((e.textContent??``).trim())},[o.children]),(0,B.jsx)(li.ItemSlot,{scope:n,disabled:r,textValue:a??p,children:(0,B.jsx)(ti,{asChild:!0,...c,focusable:!r,children:(0,B.jsx)(i.div,{role:`menuitem`,"data-highlighted":d?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...o,ref:u,onPointerMove:j(e.onPointerMove,ba(e=>{r?s.onItemLeave(e):(s.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:j(e.onPointerLeave,ba(e=>s.onItemLeave(e))),onFocus:j(e.onFocus,()=>f(!0)),onBlur:j(e.onBlur,()=>f(!1))})})})}),Hi=`MenuCheckboxItem`,Ui=z.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,B.jsx)(Zi,{scope:e.__scopeMenu,checked:n,children:(0,B.jsx)(Bi,{role:`menuitemcheckbox`,"aria-checked":pa(n)?`mixed`:n,...i,ref:t,"data-state":ma(n),onSelect:j(i.onSelect,()=>r?.(pa(n)?!0:!n),{checkForDefaultPrevented:!1})})})});Ui.displayName=Hi;var Wi=`MenuRadioGroup`,[Gi,Ki]=fi(Wi,{value:void 0,onValueChange:()=>{}}),qi=z.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=T(r);return(0,B.jsx)(Gi,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,B.jsx)(Fi,{...i,ref:t})})});qi.displayName=Wi;var Ji=`MenuRadioItem`,Yi=z.forwardRef((e,t)=>{let{value:n,...r}=e,i=Ki(Ji,e.__scopeMenu),a=n===i.value;return(0,B.jsx)(Zi,{scope:e.__scopeMenu,checked:a,children:(0,B.jsx)(Bi,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":ma(a),onSelect:j(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});Yi.displayName=Ji;var Xi=`MenuItemIndicator`,[Zi,Qi]=fi(Xi,{checked:!1}),$i=z.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...a}=e,o=Qi(Xi,n);return(0,B.jsx)(Wn,{present:r||pa(o.checked)||o.checked===!0,children:(0,B.jsx)(i.span,{...a,ref:t,"data-state":ma(o.checked)})})});$i.displayName=Xi;var ea=`MenuSeparator`,ta=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,B.jsx)(i.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});ta.displayName=ea;var na=`MenuArrow`,ra=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=mi(n);return(0,B.jsx)(k,{...i,...r,ref:t})});ra.displayName=na;var ia=`MenuSub`,[aa,oa]=fi(ia),sa=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=_i(ia,t),o=mi(t),[s,c]=z.useState(null),[l,u]=z.useState(null),d=T(i);return z.useEffect(()=>(a.open===!1&&d(!1),()=>d(!1)),[a.open,d]),(0,B.jsx)(m,{...o,children:(0,B.jsx)(gi,{scope:t,open:r,onOpenChange:d,content:l,onContentChange:u,children:(0,B.jsx)(aa,{scope:t,contentId:y(),triggerId:y(),trigger:s,onTriggerChange:c,children:n})})})};sa.displayName=ia;var ca=`MenuSubTrigger`,la=z.forwardRef((e,t)=>{let n=_i(ca,e.__scopeMenu),r=yi(ca,e.__scopeMenu),i=oa(ca,e.__scopeMenu),a=ki(ca,e.__scopeMenu),o=z.useRef(null),{pointerGraceTimerRef:s,onPointerGraceIntentChange:c}=a,u={__scopeMenu:e.__scopeMenu},d=z.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return z.useEffect(()=>d,[d]),z.useEffect(()=>{let e=s.current;return()=>{window.clearTimeout(e),c(null)}},[s,c]),(0,B.jsx)(Si,{asChild:!0,...u,children:(0,B.jsx)(Vi,{id:i.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":i.contentId,"data-state":fa(n.open),...e,ref:l(t,i.onTriggerChange),onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:j(e.onPointerMove,ba(t=>{a.onItemEnter(t),!t.defaultPrevented&&!e.disabled&&!n.open&&!o.current&&(a.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{n.onOpenChange(!0),d()},100))})),onPointerLeave:j(e.onPointerLeave,ba(e=>{d();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:j(e.onKeyDown,t=>{let i=a.searchRef.current!==``;e.disabled||i&&t.key===` `||oi[r.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});la.displayName=ca;var ua=`MenuSubContent`,da=z.forwardRef((e,t)=>{let n=Ti(Di,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=_i(Di,e.__scopeMenu),o=yi(Di,e.__scopeMenu),s=oa(ua,e.__scopeMenu),c=z.useRef(null),l=C(t,c);return(0,B.jsx)(li.Provider,{scope:e.__scopeMenu,children:(0,B.jsx)(Wn,{present:r||a.open,children:(0,B.jsx)(li.Slot,{scope:e.__scopeMenu,children:(0,B.jsx)(Ni,{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:j(e.onFocusOutside,e=>{e.target!==s.trigger&&a.onOpenChange(!1)}),onEscapeKeyDown:j(e.onEscapeKeyDown,e=>{o.onClose(),e.preventDefault()}),onKeyDown:j(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=si[o.dir].includes(e.key);t&&n&&(a.onOpenChange(!1),s.trigger?.focus(),e.preventDefault())})})})})})});da.displayName=ua;function fa(e){return e?`open`:`closed`}function pa(e){return e===`indeterminate`}function ma(e){return pa(e)?`indeterminate`:e?`checked`:`unchecked`}function ha(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function ga(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function _a(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=ga(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 va(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 ya(e,t){return t?va({x:e.clientX,y:e.clientY},t):!1}function ba(e){return t=>t.pointerType===`mouse`?e(t):void 0}var xa=bi,Sa=Si,Ca=Ei,wa=Ai,Ta=Fi,Ea=Li,Da=Bi,Oa=Ui,ka=qi,Aa=Yi,ja=$i,Ma=ta,Na=ra,Pa=sa,Fa=la,Ia=da,La=`ContextMenu`,[Ra,za]=d(La,[pi]),Ba=pi(),[Va,Ha]=Ra(La),Ua=e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,dir:i,modal:a=!0}=e,[o,s]=z.useState(!1),c=Ba(t),l=T(r),u=z.useCallback(e=>{s(e),l(e)},[l]);return(0,B.jsx)(Va,{scope:t,open:o,onOpenChange:u,modal:a,children:(0,B.jsx)(xa,{...c,dir:i,open:o,onOpenChange:u,modal:a,children:n})})};Ua.displayName=La;var Wa=`ContextMenuTrigger`,Ga=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,disabled:r=!1,...a}=e,o=Ha(Wa,n),s=Ba(n),c=z.useRef({x:0,y:0}),l=z.useRef({getBoundingClientRect:()=>DOMRect.fromRect({width:0,height:0,...c.current})}),u=z.useRef(0),d=z.useCallback(()=>window.clearTimeout(u.current),[]),f=e=>{c.current={x:e.clientX,y:e.clientY},o.onOpenChange(!0)};return z.useEffect(()=>d,[d]),z.useEffect(()=>void(r&&d()),[r,d]),(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Sa,{...s,virtualRef:l}),(0,B.jsx)(i.span,{"data-state":o.open?`open`:`closed`,"data-disabled":r?``:void 0,...a,ref:t,style:{WebkitTouchCallout:`none`,...e.style},onContextMenu:r?e.onContextMenu:j(e.onContextMenu,e=>{d(),f(e),e.preventDefault()}),onPointerDown:r?e.onPointerDown:j(e.onPointerDown,yo(e=>{d(),u.current=window.setTimeout(()=>f(e),700)})),onPointerMove:r?e.onPointerMove:j(e.onPointerMove,yo(d)),onPointerCancel:r?e.onPointerCancel:j(e.onPointerCancel,yo(d)),onPointerUp:r?e.onPointerUp:j(e.onPointerUp,yo(d))})]})});Ga.displayName=Wa;var Ka=`ContextMenuPortal`,qa=e=>{let{__scopeContextMenu:t,...n}=e,r=Ba(t);return(0,B.jsx)(Ca,{...r,...n})};qa.displayName=Ka;var Ja=`ContextMenuContent`,Ya=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ha(Ja,n),a=Ba(n),o=z.useRef(!1);return(0,B.jsx)(wa,{...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)`}})});Ya.displayName=Ja;var Xa=`ContextMenuGroup`,Za=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Ta,{...i,...r,ref:t})});Za.displayName=Xa;var Qa=`ContextMenuLabel`,$a=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Ea,{...i,...r,ref:t})});$a.displayName=Qa;var eo=`ContextMenuItem`,to=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Da,{...i,...r,ref:t})});to.displayName=eo;var no=`ContextMenuCheckboxItem`,ro=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Oa,{...i,...r,ref:t})});ro.displayName=no;var io=`ContextMenuRadioGroup`,ao=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(ka,{...i,...r,ref:t})});ao.displayName=io;var oo=`ContextMenuRadioItem`,so=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Aa,{...i,...r,ref:t})});so.displayName=oo;var co=`ContextMenuItemIndicator`,lo=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(ja,{...i,...r,ref:t})});lo.displayName=co;var uo=`ContextMenuSeparator`,H=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Ma,{...i,...r,ref:t})});H.displayName=uo;var U=`ContextMenuArrow`,fo=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Na,{...i,...r,ref:t})});fo.displayName=U;var po=`ContextMenuSub`,mo=e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,open:i,defaultOpen:a}=e,o=Ba(t),[s,c]=p({prop:i,defaultProp:a??!1,onChange:r,caller:po});return(0,B.jsx)(Pa,{...o,open:s,onOpenChange:c,children:n})};mo.displayName=po;var ho=`ContextMenuSubTrigger`,go=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Fa,{...i,...r,ref:t})});go.displayName=ho;var _o=`ContextMenuSubContent`,vo=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Ia,{...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)`}})});vo.displayName=_o;function yo(e){return t=>t.pointerType===`mouse`?void 0:e(t)}var bo=Ua,xo=Ga,So=qa,Co=Ya,wo=to,To=H,Eo=`DropdownMenu`,[Do,Oo]=d(Eo,[pi]),W=pi(),[ko,Ao]=Do(Eo),jo=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=W(t),l=z.useRef(null),[u,d]=p({prop:i,defaultProp:a??!1,onChange:o,caller:Eo});return(0,B.jsx)(ko,{scope:t,triggerId:y(),triggerRef:l,contentId:y(),open:u,onOpenChange:d,onOpenToggle:z.useCallback(()=>d(e=>!e),[d]),modal:s,children:(0,B.jsx)(xa,{...c,open:u,onOpenChange:d,dir:r,modal:s,children:n})})};jo.displayName=Eo;var Mo=`DropdownMenuTrigger`,No=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:r=!1,...a}=e,o=Ao(Mo,n),s=W(n);return(0,B.jsx)(Sa,{asChild:!0,...s,children:(0,B.jsx)(i.button,{type:`button`,id:o.triggerId,"aria-haspopup":`menu`,"aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":o.open?`open`:`closed`,"data-disabled":r?``:void 0,disabled:r,...a,ref:l(t,o.triggerRef),onPointerDown:j(e.onPointerDown,e=>{!r&&e.button===0&&e.ctrlKey===!1&&(o.onOpenToggle(),o.open||e.preventDefault())}),onKeyDown:j(e.onKeyDown,e=>{r||([`Enter`,` `].includes(e.key)&&o.onOpenToggle(),e.key===`ArrowDown`&&o.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});No.displayName=Mo;var Po=`DropdownMenuPortal`,Fo=e=>{let{__scopeDropdownMenu:t,...n}=e,r=W(t);return(0,B.jsx)(Ca,{...r,...n})};Fo.displayName=Po;var Io=`DropdownMenuContent`,Lo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Ao(Io,n),a=W(n),o=z.useRef(!1);return(0,B.jsx)(wa,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:j(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:j(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)`}})});Lo.displayName=Io;var Ro=`DropdownMenuGroup`,zo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Ta,{...i,...r,ref:t})});zo.displayName=Ro;var Bo=`DropdownMenuLabel`,Vo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Ea,{...i,...r,ref:t})});Vo.displayName=Bo;var Ho=`DropdownMenuItem`,Uo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Da,{...i,...r,ref:t})});Uo.displayName=Ho;var Wo=`DropdownMenuCheckboxItem`,Go=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Oa,{...i,...r,ref:t})});Go.displayName=Wo;var Ko=`DropdownMenuRadioGroup`,qo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(ka,{...i,...r,ref:t})});qo.displayName=Ko;var Jo=`DropdownMenuRadioItem`,Yo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Aa,{...i,...r,ref:t})});Yo.displayName=Jo;var Xo=`DropdownMenuItemIndicator`,Zo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(ja,{...i,...r,ref:t})});Zo.displayName=Xo;var Qo=`DropdownMenuSeparator`,$o=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Ma,{...i,...r,ref:t})});$o.displayName=Qo;var es=`DropdownMenuArrow`,ts=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Na,{...i,...r,ref:t})});ts.displayName=es;var ns=`DropdownMenuSubTrigger`,rs=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Fa,{...i,...r,ref:t})});rs.displayName=ns;var is=`DropdownMenuSubContent`,as=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Ia,{...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)`}})});as.displayName=is;var os=jo,ss=No,cs=Fo,ls=Lo,us=Uo;function ds(e,t){return z.useReducer((e,n)=>t[e][n]??e,e)}var fs=`ScrollArea`,[ps,ms]=d(fs),[hs,gs]=ps(fs),_s=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,type:r=`hover`,dir:a,scrollHideDelay:o=600,...s}=e,[c,l]=z.useState(null),[u,d]=z.useState(null),[f,p]=z.useState(null),[m,h]=z.useState(null),[g,_]=z.useState(null),[v,y]=z.useState(0),[x,S]=z.useState(0),[w,T]=z.useState(!1),[E,D]=z.useState(!1),O=C(t,e=>l(e)),k=b(a);return(0,B.jsx)(hs,{scope:n,type:r,dir:k,scrollHideDelay:o,scrollArea:c,viewport:u,onViewportChange:d,content:f,onContentChange:p,scrollbarX:m,onScrollbarXChange:h,scrollbarXEnabled:w,onScrollbarXEnabledChange:T,scrollbarY:g,onScrollbarYChange:_,scrollbarYEnabled:E,onScrollbarYEnabledChange:D,onCornerWidthChange:y,onCornerHeightChange:S,children:(0,B.jsx)(i.div,{dir:k,...s,ref:O,style:{position:`relative`,"--radix-scroll-area-corner-width":v+`px`,"--radix-scroll-area-corner-height":x+`px`,...e.style}})})});_s.displayName=fs;var vs=`ScrollAreaViewport`,ys=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,children:r,nonce:a,...o}=e,s=gs(vs,n),c=C(t,z.useRef(null),s.onViewportChange);return(0,B.jsxs)(B.Fragment,{children:[(0,B.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:a}),(0,B.jsx)(i.div,{"data-radix-scroll-area-viewport":``,...o,ref:c,style:{overflowX:s.scrollbarXEnabled?`scroll`:`hidden`,overflowY:s.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,B.jsx)(`div`,{ref:s.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})});ys.displayName=vs;var bs=`ScrollAreaScrollbar`,xs=z.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=gs(bs,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return z.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,B.jsx)(Ss,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,B.jsx)(Cs,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,B.jsx)(ws,{...r,ref:t,forceMount:n}):i.type===`always`?(0,B.jsx)(Ts,{...r,ref:t}):null});xs.displayName=bs;var Ss=z.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=gs(bs,e.__scopeScrollArea),[a,o]=z.useState(!1);return z.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,B.jsx)(Wn,{present:n||a,children:(0,B.jsx)(ws,{"data-state":a?`visible`:`hidden`,...r,ref:t})})}),Cs=z.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=gs(bs,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=Gs(()=>c(`SCROLL_END`),100),[s,c]=ds(`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 z.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),z.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,B.jsx)(Wn,{present:n||s!==`hidden`,children:(0,B.jsx)(Ts,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:j(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:j(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})}),ws=z.forwardRef((e,t)=>{let n=gs(bs,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=z.useState(!1),s=e.orientation===`horizontal`,c=Gs(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return Ks(n.viewport,c),Ks(n.content,c),(0,B.jsx)(Wn,{present:r||a,children:(0,B.jsx)(Ts,{"data-state":a?`visible`:`hidden`,...i,ref:t})})}),Ts=z.forwardRef((e,t)=>{let{orientation:n=`vertical`,...r}=e,i=gs(bs,e.__scopeScrollArea),a=z.useRef(null),o=z.useRef(0),[s,c]=z.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=Rs(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 Bs(e,o.current,s,t)}return n===`horizontal`?(0,B.jsx)(Es,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=Vs(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,B.jsx)(Ds,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=Vs(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}),Es=z.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=gs(bs,e.__scopeScrollArea),[o,s]=z.useState(),c=z.useRef(null),l=C(t,c,a.onScrollbarXChange);return z.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,B.jsx)(As,{"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":zs(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),Us(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:Ls(o.paddingLeft),paddingEnd:Ls(o.paddingRight)}})}})}),Ds=z.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=gs(bs,e.__scopeScrollArea),[o,s]=z.useState(),c=z.useRef(null),l=C(t,c,a.onScrollbarYChange);return z.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,B.jsx)(As,{"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":zs(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),Us(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:Ls(o.paddingTop),paddingEnd:Ls(o.paddingBottom)}})}})}),[Os,ks]=ps(bs),As=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,sizes:r,hasThumb:a,onThumbChange:o,onThumbPointerUp:s,onThumbPointerDown:c,onThumbPositionChange:l,onDragScroll:u,onWheelScroll:d,onResize:f,...p}=e,m=gs(bs,n),[h,g]=z.useState(null),_=C(t,e=>g(e)),v=z.useRef(null),y=z.useRef(``),b=m.viewport,x=r.content-r.viewport,S=T(d),w=T(l),E=Gs(f,10);function D(e){v.current&&u({x:e.clientX-v.current.left,y:e.clientY-v.current.top})}return z.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]),z.useEffect(w,[r,w]),Ks(h,E),Ks(m.content,E),(0,B.jsx)(Os,{scope:n,scrollbar:h,hasThumb:a,onThumbChange:T(o),onThumbPointerUp:T(s),onThumbPositionChange:w,onThumbPointerDown:T(c),children:(0,B.jsx)(i.div,{...p,ref:_,style:{position:`absolute`,...p.style},onPointerDown:j(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`),D(e))}),onPointerMove:j(e.onPointerMove,D),onPointerUp:j(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})})})}),js=`ScrollAreaThumb`,Ms=z.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=ks(js,e.__scopeScrollArea);return(0,B.jsx)(Wn,{present:n||i.hasThumb,children:(0,B.jsx)(Ns,{ref:t,...r})})}),Ns=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,style:r,...a}=e,o=gs(js,n),s=ks(js,n),{onThumbPositionChange:c}=s,l=C(t,e=>s.onThumbChange(e)),u=z.useRef(void 0),d=Gs(()=>{u.current&&=(u.current(),void 0)},100);return z.useEffect(()=>{let e=o.viewport;if(e){let t=()=>{d(),u.current||(u.current=Ws(e,c),c())};return c(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[o.viewport,d,c]),(0,B.jsx)(i.div,{"data-state":s.hasThumb?`visible`:`hidden`,...a,ref:l,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:j(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;s.onThumbPointerDown({x:n,y:r})}),onPointerUp:j(e.onPointerUp,s.onThumbPointerUp)})});Ms.displayName=js;var Ps=`ScrollAreaCorner`,Fs=z.forwardRef((e,t)=>{let n=gs(Ps,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,B.jsx)(Is,{...e,ref:t}):null});Fs.displayName=Ps;var Is=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,...r}=e,a=gs(Ps,n),[o,s]=z.useState(0),[c,l]=z.useState(0),u=!!(o&&c);return Ks(a.scrollbarX,()=>{let e=a.scrollbarX?.offsetHeight||0;a.onCornerHeightChange(e),l(e)}),Ks(a.scrollbarY,()=>{let e=a.scrollbarY?.offsetWidth||0;a.onCornerWidthChange(e),s(e)}),u?(0,B.jsx)(i.div,{...r,ref:t,style:{width:o,height:c,position:`absolute`,right:a.dir===`ltr`?0:void 0,left:a.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null});function Ls(e){return e?parseInt(e,10):0}function Rs(e,t){let n=e/t;return isNaN(n)?0:n}function zs(e){let t=Rs(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function Bs(e,t,n,r=`ltr`){let i=zs(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 Hs([c,l],d)(e)}function Vs(e,t,n=`ltr`){let r=zs(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=ue(e,n===`ltr`?[0,o]:[o*-1,0]);return Hs([0,o],[0,s])(c)}function Hs(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 Us(e,t){return e>0&&e<t}var Ws=(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 Gs(e,t){let n=T(e),r=z.useRef(0);return z.useEffect(()=>()=>window.clearTimeout(r.current),[]),z.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function Ks(e,t){let n=T(t);te(()=>{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 qs=_s,Js=ys,Ys=Fs,Xs=`Separator`,Zs=`horizontal`,Qs=[`horizontal`,`vertical`],$s=z.forwardRef((e,t)=>{let{decorative:n,orientation:r=Zs,...a}=e,o=ec(r)?r:Zs,s=o===`vertical`?o:void 0,c=n?{role:`none`}:{"aria-orientation":s,role:`separator`};return(0,B.jsx)(i.div,{"data-orientation":o,...c,...a,ref:t})});$s.displayName=Xs;function ec(e){return Qs.includes(e)}var tc=$s,nc=`Tabs`,[rc,ic]=d(nc,[Hr]),ac=Hr(),[oc,sc]=rc(nc),cc=z.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,onValueChange:a,defaultValue:o,orientation:s=`horizontal`,dir:c,activationMode:l=`automatic`,...u}=e,d=b(c),[f,m]=p({prop:r,onChange:a,defaultProp:o??``,caller:nc});return(0,B.jsx)(oc,{scope:n,baseId:y(),value:f,onValueChange:m,orientation:s,dir:d,activationMode:l,children:(0,B.jsx)(i.div,{dir:d,"data-orientation":s,...u,ref:t})})});cc.displayName=nc;var lc=`TabsList`,uc=z.forwardRef((e,t)=>{let{__scopeTabs:n,loop:r=!0,...a}=e,o=sc(lc,n),s=ac(n);return(0,B.jsx)(ei,{asChild:!0,...s,orientation:o.orientation,dir:o.dir,loop:r,children:(0,B.jsx)(i.div,{role:`tablist`,"aria-orientation":o.orientation,...a,ref:t})})});uc.displayName=lc;var dc=`TabsTrigger`,fc=z.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,disabled:a=!1,...o}=e,s=sc(dc,n),c=ac(n),l=hc(s.baseId,r),u=gc(s.baseId,r),d=r===s.value;return(0,B.jsx)(ti,{asChild:!0,...c,focusable:!a,active:d,children:(0,B.jsx)(i.button,{type:`button`,role:`tab`,"aria-selected":d,"aria-controls":u,"data-state":d?`active`:`inactive`,"data-disabled":a?``:void 0,disabled:a,id:l,...o,ref:t,onMouseDown:j(e.onMouseDown,e=>{!a&&e.button===0&&e.ctrlKey===!1?s.onValueChange(r):e.preventDefault()}),onKeyDown:j(e.onKeyDown,e=>{[` `,`Enter`].includes(e.key)&&s.onValueChange(r)}),onFocus:j(e.onFocus,()=>{let e=s.activationMode!==`manual`;!d&&!a&&e&&s.onValueChange(r)})})})});fc.displayName=dc;var pc=`TabsContent`,mc=z.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,forceMount:a,children:o,...s}=e,c=sc(pc,n),l=hc(c.baseId,r),u=gc(c.baseId,r),d=r===c.value,f=z.useRef(d);return z.useEffect(()=>{let e=requestAnimationFrame(()=>f.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,B.jsx)(Wn,{present:a||d,children:({present:n})=>(0,B.jsx)(i.div,{"data-state":d?`active`:`inactive`,"data-orientation":c.orientation,role:`tabpanel`,"aria-labelledby":l,hidden:!n,id:u,tabIndex:0,...s,ref:t,style:{...e.style,animationDuration:f.current?`0s`:void 0},children:n&&o})})});mc.displayName=pc;function hc(e,t){return`${e}-trigger-${t}`}function gc(e,t){return`${e}-content-${t}`}var _c=cc,vc=uc,yc=fc,bc=mc,[xc,Sc]=d(`Tooltip`,[D]),Cc=D(),wc=`TooltipProvider`,Tc=700,Ec=`tooltip.open`,[Dc,Oc]=xc(wc),kc=e=>{let{__scopeTooltip:t,delayDuration:n=Tc,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=z.useRef(!0),s=z.useRef(!1),c=z.useRef(0);return z.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,B.jsx)(Dc,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:z.useCallback(()=>{window.clearTimeout(c.current),o.current=!1},[]),onClose:z.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:z.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})};kc.displayName=wc;var Ac=`Tooltip`,[jc,Mc]=xc(Ac),Nc=e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,c=Oc(Ac,e.__scopeTooltip),l=Cc(t),[u,d]=z.useState(null),f=y(),h=z.useRef(0),g=o??c.disableHoverableContent,_=s??c.delayDuration,v=z.useRef(!1),[b,x]=p({prop:r,defaultProp:i??!1,onChange:e=>{e?(c.onOpen(),document.dispatchEvent(new CustomEvent(Ec))):c.onClose(),a?.(e)},caller:Ac}),S=z.useMemo(()=>b?v.current?`delayed-open`:`instant-open`:`closed`,[b]),C=z.useCallback(()=>{window.clearTimeout(h.current),h.current=0,v.current=!1,x(!0)},[x]),w=z.useCallback(()=>{window.clearTimeout(h.current),h.current=0,x(!1)},[x]),T=z.useCallback(()=>{window.clearTimeout(h.current),h.current=window.setTimeout(()=>{v.current=!0,x(!0),h.current=0},_)},[_,x]);return z.useEffect(()=>()=>{h.current&&=(window.clearTimeout(h.current),0)},[]),(0,B.jsx)(m,{...l,children:(0,B.jsx)(jc,{scope:t,contentId:f,open:b,stateAttribute:S,trigger:u,onTriggerChange:d,onTriggerEnter:z.useCallback(()=>{c.isOpenDelayedRef.current?T():C()},[c.isOpenDelayedRef,T,C]),onTriggerLeave:z.useCallback(()=>{g?w():(window.clearTimeout(h.current),h.current=0)},[w,g]),onOpen:C,onClose:w,disableHoverableContent:g,children:n})})};Nc.displayName=Ac;var Pc=`TooltipTrigger`,Fc=z.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,a=Mc(Pc,n),o=Oc(Pc,n),s=Cc(n),c=C(t,z.useRef(null),a.onTriggerChange),l=z.useRef(!1),u=z.useRef(!1),d=z.useCallback(()=>l.current=!1,[]);return z.useEffect(()=>()=>document.removeEventListener(`pointerup`,d),[d]),(0,B.jsx)(E,{asChild:!0,...s,children:(0,B.jsx)(i.button,{"aria-describedby":a.open?a.contentId:void 0,"data-state":a.stateAttribute,...r,ref:c,onPointerMove:j(e.onPointerMove,e=>{e.pointerType!==`touch`&&!u.current&&!o.isPointerInTransitRef.current&&(a.onTriggerEnter(),u.current=!0)}),onPointerLeave:j(e.onPointerLeave,()=>{a.onTriggerLeave(),u.current=!1}),onPointerDown:j(e.onPointerDown,()=>{a.open&&a.onClose(),l.current=!0,document.addEventListener(`pointerup`,d,{once:!0})}),onFocus:j(e.onFocus,()=>{l.current||a.onOpen()}),onBlur:j(e.onBlur,a.onClose),onClick:j(e.onClick,a.onClose)})})});Fc.displayName=Pc;var Ic=`TooltipPortal`,[Lc,Rc]=xc(Ic,{forceMount:void 0}),zc=e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=Mc(Ic,t);return(0,B.jsx)(Lc,{scope:t,forceMount:n,children:(0,B.jsx)(Wn,{present:n||a.open,children:(0,B.jsx)(_,{asChild:!0,container:i,children:r})})})};zc.displayName=Ic;var Bc=`TooltipContent`,Vc=z.forwardRef((e,t)=>{let n=Rc(Bc,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=Mc(Bc,e.__scopeTooltip);return(0,B.jsx)(Wn,{present:r||o.open,children:o.disableHoverableContent?(0,B.jsx)(Kc,{side:i,...a,ref:t}):(0,B.jsx)(Hc,{side:i,...a,ref:t})})}),Hc=z.forwardRef((e,t)=>{let n=Mc(Bc,e.__scopeTooltip),r=Oc(Bc,e.__scopeTooltip),i=z.useRef(null),a=C(t,i),[o,s]=z.useState(null),{trigger:c,onClose:l}=n,u=i.current,{onPointerInTransitChange:d}=r,f=z.useCallback(()=>{s(null),d(!1)},[d]),p=z.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=Xc(r,Yc(r,n.getBoundingClientRect())),a=Zc(t.getBoundingClientRect());s($c([...i,...a])),d(!0)},[d]);return z.useEffect(()=>()=>f(),[f]),z.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]),z.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=!Qc(n,o);r?f():i&&(f(),l())};return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[c,u,o,l,f]),(0,B.jsx)(Kc,{...e,ref:a})}),[Uc,Wc]=xc(Ac,{isInside:!1}),Gc=a(`TooltipContent`),Kc=z.forwardRef((e,t)=>{let{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:a,onPointerDownOutside:o,...s}=e,c=Mc(Bc,n),l=Cc(n),{onClose:u}=c;return z.useEffect(()=>(document.addEventListener(Ec,u),()=>document.removeEventListener(Ec,u)),[u]),z.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,B.jsx)(O,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:u,children:(0,B.jsxs)(x,{"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,B.jsx)(Gc,{children:r}),(0,B.jsx)(Uc,{scope:n,isInside:!0,children:(0,B.jsx)(ve,{id:c.contentId,role:`tooltip`,children:i||r})})]})})});Vc.displayName=Bc;var qc=`TooltipArrow`,Jc=z.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=Cc(n);return Wc(qc,n).isInside?null:(0,B.jsx)(k,{...i,...r,ref:t})});Jc.displayName=qc;function Yc(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 Xc(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 Zc(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 Qc(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 $c(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),el(t)}function el(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 tl=kc,nl=Nc,rl=Fc,il=zc,al=Vc,ol=Jc;function sl({delayDuration:e=0,...t}){return(0,B.jsx)(tl,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function G({...e}){return(0,B.jsx)(nl,{"data-slot":`tooltip`,...e})}function cl({...e}){return(0,B.jsx)(rl,{"data-slot":`tooltip-trigger`,...e})}function ll({className:e,sideOffset:t=0,children:n,...r}){return(0,B.jsx)(il,{children:(0,B.jsxs)(al,{"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,B.jsx)(ol,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}function ul(e,t){let n=getComputedStyle(e);return t*parseFloat(n.fontSize)}function dl(e,t){let n=getComputedStyle(e.ownerDocument.body);return t*parseFloat(n.fontSize)}function fl(e){return e/100*window.innerHeight}function pl(e){return e/100*window.innerWidth}function ml(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 hl({groupSize:e,panelElement:t,styleProp:n}){let r,[i,a]=ml(n);switch(a){case`%`:r=i/100*e;break;case`px`:r=i;break;case`rem`:r=dl(t,i);break;case`em`:r=ul(t,i);break;case`vh`:r=fl(i);break;case`vw`:r=pl(i);break}return r}function gl(e){return parseFloat(e.toFixed(3))}function _l({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 vl(e){let{panels:t}=e,n=_l({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=gl(hl({groupSize:n,panelElement:t,styleProp:r.collapsedSize})/n*100));let a;r.defaultSize!==void 0&&(a=gl(hl({groupSize:n,panelElement:t,styleProp:r.defaultSize})/n*100));let o=0;r.minSize!==void 0&&(o=gl(hl({groupSize:n,panelElement:t,styleProp:r.minSize})/n*100));let s=100;return r.maxSize!==void 0&&(s=gl(hl({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 K(e,t=`Assertion error`){if(!e)throw Error(t)}function yl(e,t){return Array.from(t).sort(e===`horizontal`?bl:xl)}function bl(e,t){let n=e.element.offsetLeft-t.element.offsetLeft;return n===0?e.element.offsetWidth-t.element.offsetWidth:n}function xl(e,t){let n=e.element.offsetTop-t.element.offsetTop;return n===0?e.element.offsetHeight-t.element.offsetHeight:n}function Sl(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.ELEMENT_NODE}function Cl(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 wl({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}=Cl(r,n),s=e===`horizontal`?t:o;s<a&&(a=s,i=n)}return K(i,`No rect found`),i}var Tl;function El(){return Tl===void 0&&(Tl=typeof matchMedia==`function`?!!matchMedia(`(pointer:coarse)`).matches:!1),Tl}function Dl(e){let{element:t,orientation:n,panels:r,separators:i}=e,a=yl(n,Array.from(t.children).filter(Sl).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,wl({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=El()?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:_l({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 Ol=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)}}},kl=new Map,Al=new Ol;function jl(e){kl=new Map(kl),kl.delete(e)}function Ml(e,t){for(let[t]of kl)if(t.id===e)return t}function Nl(e,t){for(let[t,n]of kl)if(t.id===e)return n;if(t)throw Error(`Could not find data for Group with id ${e}`)}function Pl(){return kl}function Fl(e,t){return Al.addListener(`groupChange`,n=>{n.group.id===e&&t(n)})}function Il(e,t){let n=kl.get(e);kl=new Map(kl),kl.set(e,t),Al.emit(`groupChange`,{group:e,prev:n,next:t})}function Ll(e,t,n){let r,i={x:1/0,y:1/0};for(let a of t){let t=Cl(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 q(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function Rl(e,t){if(e===t)throw Error(`Cannot compare node with itself`);let n={a:Vl(e),b:Vl(t)},r;for(;n.a.at(-1)===n.b.at(-1);)r=n.a.pop(),n.b.pop();K(r,`Stacking order can only be calculated for elements with a common ancestor`);let i={a:Bl(zl(n.a)),b:Bl(zl(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 J=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function Y(e){let t=getComputedStyle(Hl(e)??e).display;return t===`flex`||t===`inline-flex`}function X(e){let t=getComputedStyle(e);return!!(t.position===`fixed`||t.zIndex!==`auto`&&(t.position!==`static`||Y(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`||J.test(t.willChange)||t.webkitOverflowScrolling===`touch`)}function zl(e){let t=e.length;for(;t--;){let n=e[t];if(K(n,`Missing node`),X(n))return n}return null}function Bl(e){return e&&Number(getComputedStyle(e).zIndex)||0}function Vl(e){let t=[];for(;e;)t.push(e),e=Hl(e);return t}function Hl(e){let{parentNode:t}=e;return q(t)?t.host:t}function Ul(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 Wl({groupElement:e,hitRegion:t,pointerEventTarget:n}){if(!Sl(n)||n.contains(e)||e.contains(n))return!0;if(Rl(n,e)>0){let r=n;for(;r;){if(r.contains(e))return!0;if(Ul(r.getBoundingClientRect(),t))return!1;r=r.parentElement}}return!0}function Gl(e,t){let n=[];return t.forEach((t,r)=>{if(r.disabled)return;let i=Dl(r),a=Ll(r.orientation,i,{x:e.clientX,y:e.clientY});a&&a.distance.x<=0&&a.distance.y<=0&&Wl({groupElement:r.element,hitRegion:a.hitRegion.rect,pointerEventTarget:e.target})&&n.push(a.hitRegion)}),n}function Kl(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 ql(e,t,n=0){return Math.abs(gl(e)-gl(t))<=n}function Jl(e,t){return ql(e,t)?0:e>t?1:-1}function Yl({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(Jl(r,c)<0)if(a){let e=(i+c)/2;r=Jl(r,e)<0?i:c}else r=c;return r=Math.min(s,r),r=gl(r),r}function Xl({delta:e,initialLayout:t,panelConstraints:n,pivotIndices:r,prevLayout:i,trigger:a}){if(ql(e,0))return t;let o=a===`imperative-api`,s=Object.values(t),c=Object.values(i),l=[...s],[u,d]=r;K(u!=null,`Invalid first pivot index`),K(d!=null,`Invalid second pivot index`);let f=0;switch(a){case`keyboard`:{let t=e<0?d:u,r=n[t];K(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(K(n!=null,`Previous layout not found for panel index ${t}`),ql(n,i)){let t=o-n;Jl(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?u:d,r=n[t];K(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(K(n!=null,`Previous layout not found for panel index ${t}`),ql(n,o)){let t=n-i;Jl(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}break;default:{let t=e<0?d:u,r=n[t];K(r,`Panel constraints not found for index ${t}`);let i=s[t],{collapsible:a,collapsedSize:o,minSize:c}=r;if(a&&Jl(i,c)<0)if(e>0){let t=c-o,n=t/2;Jl(i+e,c)<0&&(e=Jl(e,n)<=0?0:t)}else{let t=c-o,n=100-t/2;Jl(i-e,c)<0&&(e=Jl(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];K(e!=null,`Previous layout not found for panel index ${r}`);let a=Yl({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];K(i!=null,`Previous layout not found for panel index ${t}`);let a=i-r,c=Yl({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:i,size:a});if(!ql(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(Kl(c,l))return i;{let t=e<0?d:u,r=s[t];K(r!=null,`Previous layout not found for panel index ${t}`);let i=r+f,a=Yl({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:r,size:i});if(l[t]=a,!ql(a,i)){let t=i-a,r=e<0?d:u;for(;r>=0&&r<n.length;){let i=l[r];K(i!=null,`Previous layout not found for panel index ${r}`);let a=i+t,s=Yl({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:i,size:a});if(ql(i,s)||(t-=s-i,l[r]=s),ql(t,0))break;e>0?r--:r++}}}if(!ql(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 Zl(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(t[n]===void 0||Jl(e[n],t[n])!==0)return!1;return!0}function Ql({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(!ql(i,100)&&r.length>0)for(let e=0;e<t.length;e++){let t=r[e];K(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];K(i!=null,`No layout data found for index ${e}`);let o=r[e];K(o!=null,`No layout data found for index ${e}`);let s=Yl({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:i,size:o});o!=s&&(a+=o-s,r[e]=s)}if(!ql(a,0))for(let e=0;e<t.length;e++){let n=r[e];K(n!=null,`No layout data found for index ${e}`);let i=n+a,o=Yl({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:n,size:i});if(n!==o&&(a-=o-n,r[e]=o,ql(a,0)))break}let o=Object.keys(e);return r.reduce((e,t,n)=>(e[o[n]]=t,e),{})}function $l({groupId:e,panelId:t}){let n=()=>{let t=Pl();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=Ql({layout:Xl({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});Zl(l,p)||Il(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&&ql(t,n)},resize:e=>{let{group:t}=n(),{element:r}=i(),a=_l({group:t});o(gl(hl({groupSize:a,panelElement:r,styleProp:e})/a*100))}}}function eu(e){e.defaultPrevented||Gl(e,Pl()).forEach(t=>{if(t.separator){let n=t.panels.find(e=>e.panelConstraints.defaultSize!==void 0);if(n){let r=n.panelConstraints.defaultSize,i=$l({groupId:t.group.id,panelId:n.id});i&&r!==void 0&&(i.resize(r),e.preventDefault())}}})}function tu(e){let t=Pl();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 nu({groupId:e}){let t=()=>{let t=Pl();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=Ql({layout:e,panelConstraints:r});return n?o:(Zl(o,c)||Il(i,{defaultLayoutDeferred:n,derivedPanelConstraints:r,groupSize:a,layout:c,separatorToPanels:s}),c)}}}function ru(e,t){let n=tu(e),r=Nl(n.id,!0),i=n.separators.find(t=>t.element===e);K(i,`Matching separator not found`);let a=r.separatorToPanels.get(i);K(a,`Matching panels not found`);let o=a.map(e=>n.panels.indexOf(e)),s=nu({groupId:n.id}).getLayout(),c=Ql({layout:Xl({delta:t,initialLayout:s,panelConstraints:r.derivedPanelConstraints,pivotIndices:o,prevLayout:s,trigger:`keyboard`}),panelConstraints:r.derivedPanelConstraints});Zl(s,c)||Il(n,{defaultLayoutDeferred:r.defaultLayoutDeferred,derivedPanelConstraints:r.derivedPanelConstraints,groupSize:r.groupSize,layout:c,separatorToPanels:r.separatorToPanels})}function iu(e){if(e.defaultPrevented)return;let t=e.currentTarget,n=tu(t);if(!n.disabled)switch(e.key){case`ArrowDown`:e.preventDefault(),n.orientation===`vertical`&&ru(t,5);break;case`ArrowLeft`:e.preventDefault(),n.orientation===`horizontal`&&ru(t,-5);break;case`ArrowRight`:e.preventDefault(),n.orientation===`horizontal`&&ru(t,5);break;case`ArrowUp`:e.preventDefault(),n.orientation===`vertical`&&ru(t,-5);break;case`End`:e.preventDefault(),ru(t,100);break;case`Enter`:{e.preventDefault();let n=tu(t),{derivedPanelConstraints:r,layout:i,separatorToPanels:a}=Nl(n.id,!0),o=n.separators.find(e=>e.element===t);K(o,`Matching separator not found`);let s=a.get(o);K(s,`Matching panels not found`);let c=s[0],l=r.find(e=>e.panelId===c.id);if(K(l,`Panel metadata not found`),l.collapsible){let e=i[c.id];ru(t,(l.collapsedSize===e?n.mutableState.expandedPanelSizes[c.id]??l.minSize:l.collapsedSize)-e)}break}case`F6`:{e.preventDefault();let n=tu(t).separators.map(e=>e.element),r=Array.from(n).findIndex(t=>t===e.currentTarget);K(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(),ru(t,-100);break}}var au={cursorFlags:0,state:`inactive`},ou=new Ol;function su(){return au}function cu(e){return ou.addListener(`change`,e)}function lu(e){let t=au,n={...au};n.cursorFlags=e,au=n,ou.emit(`change`,{prev:t,next:n})}function uu(e){let t=au;au=e,ou.emit(`change`,{prev:t,next:e})}function du(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=Pl(),n=Gl(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)}),uu({cursorFlags:0,hitRegions:n,initialLayoutMap:r,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:`active`}),n.length&&e.preventDefault()}var fu=e=>e,pu=()=>{},mu=1,hu=2,gu=4,_u=8,vu=3,yu=12,bu;function xu(){return bu===void 0&&(bu=!1,typeof window<`u`&&(window.navigator.userAgent.includes(`Chrome`)||window.navigator.userAgent.includes(`Firefox`))&&(bu=!0)),bu}function Su({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&&xu()){let t=(e&mu)!==0,n=(e&hu)!==0,r=(e&gu)!==0,i=(e&_u)!==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 xu()?r>0&&i>0?`move`:r>0?`ew-resize`:`ns-resize`:r>0&&i>0?`grab`:r>0?`col-resize`:`row-resize`}}var Cu=new WeakMap;function wu(e){if(e.defaultView===null||e.defaultView===void 0)return;let{prevStyle:t,styleSheet:n}=Cu.get(e)??{};n===void 0&&(n=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets&&e.adoptedStyleSheets.push(n));let r=su();switch(r.state){case`active`:case`hover`:{let e=Su({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}Cu.set(e,{prevStyle:t,styleSheet:n})}function Tu({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=Xl({delta:d,initialLayout:f,panelConstraints:h,pivotIndices:e.panels.map(e=>l.indexOf(e)),prevLayout:_,trigger:`mouse-or-touch`});if(Zl(t,_)){if(d!==0&&!u)switch(c){case`horizontal`:s|=d<0?mu:hu;break;case`vertical`:s|=d<0?gu:_u;break}}else Il(e.group,{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:t,separatorToPanels:v})}});let c=0;t.movementX===0?c|=o&vu:c|=s&vu,t.movementY===0?c|=o&yu:c|=s&yu,lu(c),wu(e)}function Eu(e){let t=Pl(),n=su();switch(n.state){case`active`:Tu({document:e.currentTarget,event:e,hitRegions:n.hitRegions,initialLayoutMap:n.initialLayoutMap,mountedGroups:t,prevCursorFlags:n.cursorFlags})}}function Du(e){if(e.defaultPrevented)return;let t=su(),n=Pl();switch(t.state){case`active`:if(e.buttons===0){uu({cursorFlags:0,state:`inactive`}),t.hitRegions.forEach(e=>{let t=Nl(e.group.id,!0);Il(e.group,t)});return}Tu({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:n,pointerDownAtPoint:t.pointerDownAtPoint,prevCursorFlags:t.cursorFlags});break;default:{let r=Gl(e,n);r.length===0?t.state!==`inactive`&&uu({cursorFlags:0,state:`inactive`}):uu({cursorFlags:0,hitRegions:r,state:`hover`}),wu(e.currentTarget);break}}}function Ou(e){if(e.relatedTarget instanceof HTMLIFrameElement)switch(su().state){case`hover`:uu({cursorFlags:0,state:`inactive`})}}function ku(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=su();switch(t.state){case`active`:uu({cursorFlags:0,state:`inactive`}),t.hitRegions.length>0&&(wu(e.currentTarget),t.hitRegions.forEach(e=>{let t=Nl(e.group.id,!0);Il(e.group,t)}),e.preventDefault())}}function Au(e){let t=0,n=0,r={};for(let i of e)if(i.defaultSize!==void 0){t++;let e=gl(i.defaultSize);n+=e,r[i.panelId]=e}else r[i.panelId]=void 0;let i=e.length-t;if(i!==0){let t=gl((100-n)/i);for(let n of e)n.defaultSize===void 0&&(r[n.panelId]=t)}return r}function ju(e,t,n){if(!n[0])return;let r=e.panels.find(e=>e.element===t);if(!r||!r.onResize)return;let i=_l({group:e}),a=e.orientation===`horizontal`?r.element.offsetWidth:r.element.offsetHeight,o=r.mutableValues.prevSize,s={asPercentage:gl(a/i*100),inPixels:a};r.mutableValues.prevSize=s,r.onResize(s,r.id,o)}function Mu(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 Nu({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=gl(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]=gl((r[e]??0)/a*l);else{let e=gl(l/c.length);for(let t of c)u[t]=e}return u}function Pu(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 Fu=new Map;function Iu(e){let t=!0;K(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=_l({group:e});if(t===0)return;let n=Nl(e.id);if(!n)return;let r=vl(e),i=n.defaultLayoutDeferred?Au(r):n.layout,a=Ql({layout:Nu({group:e,nextGroupSize:t,prevGroupSize:n.groupSize,prevLayout:i}),panelConstraints:r});if(!n.defaultLayoutDeferred&&Zl(n.layout,a)&&Mu(n.derivedPanelConstraints,r)&&n.groupSize===t)return;Il(e,{defaultLayoutDeferred:!1,derivedPanelConstraints:r,groupSize:t,layout:a,separatorToPanels:n.separatorToPanels})}}else ju(e,i,n)}});a.observe(e.element),e.panels.forEach(e=>{K(!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=_l({group:e}),s=vl(e),c=e.panels.map(({id:e})=>e).join(`,`),l=e.mutableState.defaultLayout;l&&(Pu(e.panels,l)||(l=void 0));let u=Ql({layout:e.mutableState.layouts[c]??l??Au(s),panelConstraints:s}),d=e.element.ownerDocument;Fu.set(d,(Fu.get(d)??0)+1);let f=new Map;return Dl(e).forEach(e=>{e.separator&&f.set(e.separator,e.panels)}),Il(e,{defaultLayoutDeferred:o===0,derivedPanelConstraints:s,groupSize:o,layout:u,separatorToPanels:f}),e.separators.forEach(e=>{K(!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`,iu)}),Fu.get(d)===1&&(d.addEventListener(`dblclick`,eu,!0),d.addEventListener(`pointerdown`,du,!0),d.addEventListener(`pointerleave`,Eu),d.addEventListener(`pointermove`,Du),d.addEventListener(`pointerout`,Ou),d.addEventListener(`pointerup`,ku,!0)),function(){t=!1,Fu.set(d,Math.max(0,(Fu.get(d)??0)-1)),jl(e),e.separators.forEach(e=>{e.element.removeEventListener(`keydown`,iu)}),Fu.get(d)||(d.removeEventListener(`dblclick`,eu,!0),d.removeEventListener(`pointerdown`,du,!0),d.removeEventListener(`pointerleave`,Eu),d.removeEventListener(`pointermove`,Du),d.removeEventListener(`pointerout`,Ou),d.removeEventListener(`pointerup`,ku,!0)),a.disconnect()}}function Lu(){let[e,t]=(0,z.useState)({});return[e,(0,z.useCallback)(()=>t({}),[])]}function Ru(e){let t=(0,z.useId)();return`${e??t}`}var zu=typeof window<`u`?z.useLayoutEffect:z.useEffect;function Bu(e){let t=(0,z.useRef)(e);return zu(()=>{t.current=e},[e]),(0,z.useCallback)((...e)=>t.current?.(...e),[t])}function Vu(...e){return Bu(t=>{e.forEach(e=>{if(e)switch(typeof e){case`function`:e(t);break;case`object`:e.current=t;break}})})}function Hu(e){let t=(0,z.useRef)({...e});return zu(()=>{for(let n in e)t.current[n]=e[n]},[e]),t.current}var Uu=(0,z.createContext)(null);function Wu(e,t){let n=(0,z.useRef)({getLayout:()=>({}),setLayout:fu});(0,z.useImperativeHandle)(t,()=>n.current,[]),zu(()=>{Object.assign(n.current,nu({groupId:e}))})}function Z({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,z.useRef)({onLayoutChange:{},onLayoutChanged:{}}),h=Bu(e=>{Zl(m.current.onLayoutChange,e)||(m.current.onLayoutChange=e,c?.(e))}),g=Bu(e=>{Zl(m.current.onLayoutChanged,e)||(m.current.onLayoutChanged=e,l?.(e))}),_=Ru(s),v=(0,z.useRef)(null),[y,b]=Lu(),x=(0,z.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],resizeTargetMinimumSize:d,separators:[]}),S=Vu(v,a);Wu(_,o);let C=Bu((e,t)=>{let r=su(),i=Ml(e),a=Nl(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=Hu({defaultLayout:n,disableCursor:r}),T=(0,z.useMemo)(()=>({get disableCursor(){return!!w.disableCursor},getPanelStyles:C,id:_,orientation:u,registerPanel:e=>{let t=x.current;return t.panels=yl(u,[...t.panels,e]),b(),()=>{t.panels=t.panels.filter(t=>t!==e),b()}},registerSeparator:e=>{let t=x.current;return t.separators=yl(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=Ml(_),i=Nl(_);r&&i&&Il(r,{...i,derivedPanelConstraints:vl(r)})},toggleSeparatorDisabled:(e,t)=>{let n=x.current.separators.find(t=>t.id===e);n&&(n.disabled=t)}}),[C,_,b,u,w]),E=(0,z.useRef)(null);return zu(()=>{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=Iu(r),{defaultLayoutDeferred:o,derivedPanelConstraints:s,layout:c}=Nl(r.id,!0);!o&&s.length>0&&(h(c),g(c));let l=Fl(_,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=ql(t.collapsedSize,i[t.panelId]),a=ql(t.collapsedSize,n[t.panelId]);e&&!a&&(r.mutableState.expandedPanelSizes[t.panelId]=n[t.panelId])}}});let o=su().state!==`active`;h(i),o&&g(i)});return()=>{E.current=null,a(),l()}},[i,_,g,h,u,y,w]),(0,z.useEffect)(()=>{let e=E.current;e&&(e.mutableState.defaultLayout=n,e.mutableState.disableCursor=!!r)}),(0,B.jsx)(Uu.Provider,{value:T,children:(0,B.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})})}Z.displayName=`Group`;function Gu(){let e=(0,z.useContext)(Uu);return K(e,`Group Context not found; did you render a Panel or Separator outside of a Group?`),e}function Ku(e,t){let{id:n}=Gu(),r=(0,z.useRef)({collapse:pu,expand:pu,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:pu});(0,z.useImperativeHandle)(t,()=>r.current,[]),zu(()=>{Object.assign(r.current,$l({groupId:n,panelId:e}))})}function qu({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=Ru(c),_=Hu({disabled:a}),v=(0,z.useRef)(null),y=Vu(v,o),{getPanelStyles:b,id:x,orientation:S,registerPanel:C,togglePanelDisabled:w}=Gu(),T=d!==null,E=Bu((e,t,n)=>{d?.(e,c,n)});zu(()=>{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,z.useEffect)(()=>{w(g,!!a)},[a,g,w]),Ku(g,f);let D=(0,z.useSyncExternalStore)(e=>Fl(x,e),()=>JSON.stringify(b(x,g)),()=>JSON.stringify(b(x,g)));return(0,B.jsx)(`div`,{...m,"aria-disabled":a||void 0,"data-panel":!0,"data-testid":g,id:g,ref:y,style:{...Ju,display:`flex`,flexBasis:0,flexShrink:1,overflow:`visible`,...JSON.parse(D)},children:(0,B.jsx)(`div`,{className:t,style:{maxHeight:`100%`,maxWidth:`100%`,flexGrow:1,overflow:`auto`,...p,touchAction:S===`horizontal`?`pan-y`:`pan-x`},children:e})})}qu.displayName=`Panel`;var Ju={minHeight:0,maxHeight:`100%`,height:`auto`,minWidth:0,maxWidth:`100%`,width:`auto`,border:`none`,borderWidth:0,padding:0,margin:0};function Yu({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=Ql({layout:Xl({delta:l-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n],i=Ql({layout:Xl({delta:c-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n]}return{valueControls:n,valueMax:i,valueMin:a,valueNow:o}}function Xu({children:e,className:t,disabled:n,elementRef:r,id:i,style:a,...o}){let s=Ru(i),c=Hu({disabled:n}),[l,u]=(0,z.useState)({}),[d,f]=(0,z.useState)(`inactive`),p=(0,z.useRef)(null),m=Vu(p,r),{disableCursor:h,id:g,orientation:_,registerSeparator:v,toggleSeparatorDisabled:y}=Gu(),b=_===`horizontal`?`vertical`:`horizontal`;zu(()=>{let e=p.current;if(e!==null){let t={disabled:c.disabled,element:e,id:s},n=v(t),r=cu(e=>{f(e.next.state!==`inactive`&&e.next.hitRegions.some(e=>e.separator===t)?e.next.state:`inactive`)}),i=Fl(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(Yu({layout:r,panelConstraints:n,panelId:e.id,panelIndex:t}))}});return()=>{r(),i(),n()}}},[g,s,v,c]),(0,z.useEffect)(()=>{y(s,!!n)},[n,s,y]);let x;return n&&!h&&(x=`not-allowed`),(0,B.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})}Xu.displayName=`Separator`;var Zu=`ppm-custom-order`;function Qu(){try{let e=localStorage.getItem(Zu);return e?JSON.parse(e):null}catch{return null}}function $u(e){try{localStorage.setItem(Zu,JSON.stringify(e))}catch{}}function ed(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 td=Ce((e,t)=>({projects:[],activeProject:null,customOrder:Qu(),loading:!1,error:null,fetchProjects:async()=>{e({loading:!0,error:null});try{e({projects:await R.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 R.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 R.patch(`/api/projects/${encodeURIComponent(e)}/color`,{color:n}),await t().fetchProjects()},moveProject:async(n,r)=>{let{projects:i,customOrder:a}=t(),o=ed(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]],$u(l),await R.patch(`/api/projects/reorder`,{order:l}),e({customOrder:l})},reorderProjects:async t=>{$u(t),e({customOrder:t}),await R.patch(`/api/projects/reorder`,{order:t}).catch(()=>{})},renameProject:async(e,n)=>{await R.patch(`/api/projects/${encodeURIComponent(e)}`,{name:n}),await t().fetchProjects()},deleteProject:async t=>{await R.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&&$u(r),{projects:n,customOrder:r,activeProject:e.activeProject?.name===t?n[0]??null:e.activeProject}})}})),nd=`application/ppm-tab`,rd=!1,id=new Set;function ad(e){rd!==e&&(rd=e,id.forEach(e=>e()))}function od(){return(0,z.useSyncExternalStore)(e=>(id.add(e),()=>id.delete(e)),()=>rd)}function sd(){ad(!1)}function cd(e){let[t,n]=(0,z.useState)(null),r=(0,z.useRef)(null);return{dropIndex:t,handleDragStart:(0,z.useCallback)((t,n)=>{let r={tabId:n,panelId:e};t.dataTransfer.setData(nd,JSON.stringify(r)),t.dataTransfer.effectAllowed=`move`,requestAnimationFrame(()=>ad(!0))},[e]),handleDragOver:(0,z.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,z.useCallback)(e=>{e.dataTransfer.types.includes(`application/ppm-tab`)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},[]),handleDrop:(0,z.useCallback)(i=>{i.preventDefault(),ad(!1);let a=i.dataTransfer.getData(nd);if(a){try{let n=JSON.parse(a),r=F.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,z.useCallback)(()=>{ad(!1),n(null),r.current=null},[])}}var ld=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent),ud=[{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+Shift+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`},...Array.from({length:9},(e,t)=>({id:`switch-project-${t+1}`,label:`Switch to Project ${t+1}`,category:`projects`,defaultKey:`Mod+${t+1}`}))],dd=new Map(ud.map(e=>[e.id,e.defaultKey]));function fd(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`:ld?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 pd(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 md(e){return e.replace(/Mod/g,ld?`⌘`:`Ctrl`).replace(/Shift/g,ld?`⇧`:`Shift`).replace(/Alt/g,ld?`⌥`:`Alt`).replace(/Meta|Cmd/g,`⌘`).replace(/Ctrl/g,ld?`⌃`:`Ctrl`)}function hd(e){if([`Control`,`Meta`,`Alt`,`Shift`].includes(e.key))return null;let t=[];e.ctrlKey&&!e.metaKey&&t.push(ld?`Ctrl`:`Mod`),e.metaKey&&t.push(ld?`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 gd=Ce((e,t)=>({overrides:{},loaded:!1,getBinding:e=>t().overrides[e]??dd.get(e)??``,matchesEvent:(e,n)=>{let r=t().getBinding(n);return r?pd(e,fd(r)):!1},setBinding:(n,r)=>{e({overrides:{...t().overrides,[n]:r}}),R.put(`/api/settings/keybindings`,{[n]:r}).catch(()=>{})},resetBinding:n=>{let r={...t().overrides};delete r[n],e({overrides:r}),R.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&&R.put(`/api/settings/keybindings`,n).catch(()=>{})},loadFromServer:async()=>{try{e({overrides:await R.get(`/api/settings/keybindings`),loaded:!0})}catch{e({loaded:!0})}}}));function _d(e){window.dispatchEvent(new CustomEvent(`open-command-palette`,{detail:e}))}function vd(){let[e,t]=(0,z.useState)(!1),[n,r]=(0,z.useState)(``);return(0,z.useEffect)(()=>{let e=0,{matchesEvent:n}=gd.getState();function i(n){if(n.type===`keyup`&&n.key===`Shift`&&!n.ctrlKey&&!n.metaKey&&!n.altKey){let n=Date.now();if(n-e<400){e=0,r(``),t(!0);return}e=n;return}if(n.type!==`keydown`)return;let{matchesEvent:i}=gd.getState();if(i(n,`save-prevent`)){n.preventDefault();return}if(i(n,`command-palette`)){n.preventDefault(),r(``),t(!0);return}if(i(n,`toggle-sidebar`)){n.preventDefault(),I.getState().toggleSidebar();return}if(i(n,`next-tab`)||i(n,`prev-tab`)){n.preventDefault();let{tabs:e,activeTabId:t,setActiveTab:r}=Se.getState();if(e.length<2)return;let a=e.findIndex(e=>e.id===t);r(e[i(n,`next-tab`)?(a+1)%e.length:(a-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(i(n,e.action)){n.preventDefault();let t=td.getState().activeProject;Se.getState().openTab({type:e.type,title:e.title,projectId:t?.name??null,metadata:t?{projectName:t.name}:void 0,closable:!0});return}if(i(n,`open-settings`)){n.preventDefault();let e=I.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`settings`);return}if(i(n,`open-git-status`)){n.preventDefault();let e=I.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`git`);return}if(i(n,`open-search`)){n.preventDefault();let e=I.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`search`);return}for(let e=1;e<=9;e++)if(i(n,`switch-project-${e}`)){n.preventDefault();let t=td.getState().projects[e-1];t&&(td.getState().setActiveProject(t),Se.getState().switchProject(t.name));return}}function a(e){let n=e.detail;r(typeof n==`string`?n:``),t(!0)}return window.addEventListener(`keydown`,i),window.addEventListener(`keyup`,i),window.addEventListener(`open-command-palette`,a),()=>{window.removeEventListener(`keydown`,i),window.removeEventListener(`keyup`,i),window.removeEventListener(`open-command-palette`,a)}},[]),{paletteOpen:e,paletteInitialQuery:n,closePalette:(0,z.useCallback)(()=>{t(!1),r(``)},[])}}var yd={approval_request:`bg-red-500`,question:`bg-amber-500`,done:`bg-blue-500`},Q={done:0,question:1,approval_request:2};function bd(e){return e&&yd[e]||`bg-red-500`}var xd=Ce()(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 Sd(e){let t=0;for(let[,n]of e.notifications)t+=n.count;return t}function Cd(e){return t=>{let n=null,r=-1;for(let[,i]of t.notifications){if(i.projectName!==e)continue;let t=Q[i.type]??0;t>r&&(r=t,n=i.type)}return n}}function wd(e){let[t,n]=(0,z.useState)(!1),[r,i]=(0,z.useState)(!1),a=(0,z.useCallback)(()=>{let t=e.current;t&&(n(t.scrollLeft>1),i(t.scrollLeft+t.clientWidth<t.scrollWidth-1))},[e]);return(0,z.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,z.useCallback)(()=>{e.current?.scrollBy({left:-150,behavior:`smooth`})},[e]),scrollRight:(0,z.useCallback)(()=>{e.current?.scrollBy({left:150,behavior:`smooth`})},[e])}}var Td={done:0,question:1,approval_request:2};function Ed(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,_=Td[f.type]??0;g<=i&&_>s&&(s=_,o=f.type),h>=a&&_>l&&(l=_,c=f.type)}return{left:o,right:c}}function Dd(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 Od(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 kd(e){let t=Dd(e);return t?Od(t.r,t.g,t.b)<.4:!1}function Ad({tab:e,isActive:t,icon:n,showDropBefore:i,notificationType:a,onSelect:o,onClose:s,onDragStart:c,onDragOver:l,onDragEnd:u,tabRef:d,onRename:f}){let[p,m]=(0,z.useState)(!1),[h,g]=(0,z.useState)(e.title),_=(0,z.useRef)(null);(0,z.useEffect)(()=>{p&&(g(e.title),setTimeout(()=>_.current?.select(),0))},[p]);let v=()=>{m(!1);let t=h.trim();t&&t!==e.title&&f&&f(t)},y=e.metadata?.connectionColor,b=y?{backgroundColor:t?y:`${y}33`,color:t&&kd(y)?`#fff`:void 0}:void 0;return(0,B.jsxs)(`div`,{className:`relative flex items-center`,children:[i&&(0,B.jsx)(`div`,{className:`absolute left-0 top-1 bottom-1 w-0.5 bg-primary rounded-full z-10`}),(0,B.jsxs)(`button`,{ref:d,"data-tab-item":!0,draggable:!p,onClick:o,onAuxClick:t=>{t.button===1&&e.closable&&(t.preventDefault(),s())},onDragStart:c,onDragOver:l,onDragEnd:u,style:b,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`,!b&&(t?`border-primary text-primary`:`border-transparent text-text-secondary hover:text-foreground`),b&&`border-transparent`),children:[(0,B.jsxs)(`span`,{className:`relative`,children:[(0,B.jsx)(n,{className:`size-4`}),a&&!t&&(0,B.jsx)(`span`,{className:L(`absolute -top-1 -right-1 size-2 rounded-full`,bd(a))})]}),p?(0,B.jsx)(`input`,{ref:_,value:h,onChange:e=>g(e.target.value),onBlur:v,onKeyDown:e=>{e.key===`Enter`&&v(),e.key===`Escape`&&m(!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,B.jsx)(`span`,{className:`max-w-[120px] truncate`,onDoubleClick:e=>{f&&(e.stopPropagation(),m(!0))},children:e.title}),e.closable&&!p&&(0,B.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),s()},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),s())},className:`ml-1 opacity-0 group-hover:opacity-100 rounded-sm hover:bg-surface-elevated p-0.5 transition-opacity`,children:(0,B.jsx)(r,{className:`size-3`})})]})]})}var jd={terminal:nn,chat:It,editor:mt,database:lt,sqlite:lt,postgres:lt,"git-graph":St,"git-diff":ht,settings:Qt};function Md({panelId:e}){td(e=>e.activeProject);let t=(0,z.useRef)(new Map),n=(0,z.useRef)(null),r=(0,z.useRef)(0),i=F(t=>e?t.panels[e]:t.panels[t.focusedPanelId]),a=i?.tabs??[],o=i?.activeTabId??null,s=i?.id??F.getState().focusedPanelId,{dropIndex:c,handleDragStart:l,handleDragOver:u,handleDragOverBar:d,handleDrop:f,handleDragEnd:p}=cd(s),m=xd(e=>e.notifications),{canScrollLeft:h,canScrollRight:g,scrollLeft:_,scrollRight:v}=wd(n),y=Ed(n.current,t.current,a,m);(0,z.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 b=(0,z.useCallback)((e,t)=>{Se.getState().updateTab(e.id,{title:t});let n=e.metadata?.projectName,r=e.metadata?.sessionId;n&&r&&R.patch(`${ke(n)}/chat/sessions/${r}`,{title:t}).catch(()=>{})},[]);function x(e){e.target.closest(`[data-tab-item]`)||_d()}function S(e){e.target.closest(`[data-tab-item]`)||(e.preventDefault(),_d())}return(0,B.jsxs)(`div`,{className:`hidden md:flex items-center h-10 border-b border-border bg-background relative`,onDragOver:d,onDrop:f,onDoubleClick:x,onContextMenu:S,children:[h&&(0,B.jsx)(`button`,{onClick:_,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,B.jsxs)(`span`,{className:`relative`,children:[(0,B.jsx)(et,{className:`size-4 text-text-secondary`}),y.left&&(0,B.jsx)(`span`,{className:L(`absolute -top-1 -right-0.5 size-2 rounded-full`,bd(y.left))})]})}),(0,B.jsx)(`div`,{ref:n,className:`flex-1 overflow-x-auto overflow-y-hidden min-w-0 scrollbar-none`,children:(0,B.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?m.get(r):void 0,a=i&&i.count>0?i.type:null;return(0,B.jsx)(Ad,{tab:e,isActive:e.id===o,icon:jd[e.type],showDropBefore:c===n,notificationType:a,onSelect:()=>{F.getState().setActiveTab(e.id,s),r&&xd.getState().clearForSession(r)},onClose:()=>F.getState().closeTab(e.id,s),onDragStart:t=>l(t,e.id),onDragOver:t=>u(t,e.id,n),onDragEnd:p,tabRef:n=>{n?t.current.set(e.id,n):t.current.delete(e.id)},onRename:e.type===`chat`?t=>b(e,t):void 0},e.id)}),c!==null&&c>=a.length&&(0,B.jsx)(`div`,{className:`w-0.5 h-6 bg-primary rounded-full`}),(0,B.jsx)(`button`,{onClick:()=>_d(),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,B.jsx)(Kt,{className:`size-4`})})]})}),g&&(0,B.jsx)(`button`,{onClick:v,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,B.jsxs)(`span`,{className:`relative`,children:[(0,B.jsx)(tt,{className:`size-4 text-text-secondary`}),y.right&&(0,B.jsx)(`span`,{className:L(`absolute -top-1 -left-0.5 size-2 rounded-full`,bd(y.right))})]})})]})}function Nd({panelId:e}){let[t,n]=(0,z.useState)(null),r=od(),i=F(e=>e.grid),a=F(e=>e.isMobile()),o=xe(i,e),s=!a&&i.length<3,c=o?!a&&(i[o.row]?.length??0)<be(!1):!1,l=(0,z.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&&c?`left`:n>1-i&&c?`right`:r<i&&s?`top`:r>1-i&&s?`bottom`:`center`},[c,s]),u=(0,z.useCallback)(e=>{e.dataTransfer.types.includes(`application/ppm-tab`)&&(e.preventDefault(),e.stopPropagation(),n(l(e)))},[l]),d=(0,z.useCallback)(e=>{e.currentTarget.contains(e.relatedTarget)||n(null)},[]),f=(0,z.useCallback)(t=>{t.preventDefault(),t.stopPropagation();let r=l(t);if(n(null),sd(),!r)return;let i=t.dataTransfer.getData(nd);if(i)try{let t=JSON.parse(i),n=F.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{}},[l,e]);return r?(0,B.jsxs)(`div`,{className:`absolute inset-0 z-20`,onDragOver:u,onDragLeave:d,onDrop:f,children:[t===`left`&&(0,B.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-1/3 bg-primary/10 border-2 border-primary/30 rounded-l-md`}),t===`right`&&(0,B.jsx)(`div`,{className:`absolute inset-y-0 right-0 w-1/3 bg-primary/10 border-2 border-primary/30 rounded-r-md`}),t===`top`&&(0,B.jsx)(`div`,{className:`absolute inset-x-0 top-0 h-1/3 bg-primary/10 border-2 border-primary/30 rounded-t-md`}),t===`bottom`&&(0,B.jsx)(`div`,{className:`absolute inset-x-0 bottom-0 h-1/3 bg-primary/10 border-2 border-primary/30 rounded-b-md`}),t===`center`&&(0,B.jsx)(`div`,{className:`absolute inset-0 bg-primary/5 border-2 border-dashed border-primary/30 rounded-md`})]}):null}var Pd=[{type:`terminal`,label:`Terminal`,icon:nn},{type:`chat`,label:`AI Chat`,icon:It},{type:`git-graph`,label:`Git Graph`,icon:St}],Fd={terminal:(0,z.lazy)(()=>we(()=>import(`./terminal-tab-DiRnedVm.js`).then(e=>({default:e.TerminalTab})),__vite__mapDeps([0,1,2,3,4,5,6]))),chat:(0,z.lazy)(()=>we(()=>import(`./chat-tab-DDjg9H1D.js`).then(e=>({default:e.ChatTab})),__vite__mapDeps([7,1,2,3,8,4,5,9,10,11,12,13,14]))),editor:(0,z.lazy)(()=>we(()=>import(`./code-editor-DsNp2IL6.js`).then(e=>({default:e.CodeEditor})),__vite__mapDeps([15,1,2,3,16,4,5,13,14,11]))),database:(0,z.lazy)(()=>we(()=>import(`./database-viewer-BhiQF2kg.js`).then(e=>({default:e.DatabaseViewer})),__vite__mapDeps([17,1,18,5,11]))),sqlite:(0,z.lazy)(()=>we(()=>import(`./sqlite-viewer-mxuHxYUX.js`).then(e=>({default:e.SqliteViewer})),__vite__mapDeps([19,1,18,5,20,11]))),postgres:(0,z.lazy)(()=>we(()=>import(`./postgres-viewer-EbDl0fHG.js`).then(e=>({default:e.PostgresViewer})),__vite__mapDeps([21,1,18,5,20,11]))),"git-graph":(0,z.lazy)(()=>we(()=>import(`./git-graph-CRRPqBbH.js`).then(e=>({default:e.GitGraph})),__vite__mapDeps([22,1,8,4,5,13,3,11]))),"git-diff":(0,z.lazy)(()=>we(()=>import(`./diff-viewer-36sfson3.js`).then(e=>({default:e.DiffViewer})),__vite__mapDeps([23,1,2,3,16,5,12,11]))),settings:(0,z.lazy)(()=>we(()=>import(`./settings-tab-Cavyug36.js`).then(e=>({default:e.SettingsTab})),__vite__mapDeps([24,1,2,3,8,4,5,9,10,11])))};function Id({panelId:e,projectName:t}){let n=F(t=>t.panels[e]),r=F(t=>t.focusedPanelId===e),i=F(e=>(e.currentProject===t?e.grid:e.projectGrids[t]??[[]]).flat().length);return n?(0,B.jsxs)(`div`,{className:L(`flex flex-col h-full overflow-hidden`,i>1&&`border border-transparent`,i>1&&r&&`border-primary/30`),onMouseDown:()=>{F.getState().focusedPanelId!==e&&F.getState().setFocusedPanel(e)},children:[(0,B.jsx)(Md,{panelId:e}),(0,B.jsxs)(`div`,{className:`flex-1 overflow-hidden relative`,children:[n.tabs.length===0?(0,B.jsx)(Ld,{panelId:e}):n.tabs.map(e=>{let t=Fd[e.type];return(0,B.jsx)(`div`,{className:e.id===n.activeTabId?`h-full w-full`:`hidden`,children:(0,B.jsx)(z.Suspense,{fallback:(0,B.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,B.jsx)(Mt,{className:`size-6 animate-spin text-primary`})}),children:(0,B.jsx)(t,{metadata:e.metadata,tabId:e.id})})},e.id)}),(0,B.jsx)(Nd,{panelId:e})]})]}):null}function Ld({panelId:e}){let t=td(e=>e.activeProject);function n(n){let r=n!==`settings`&&t?{projectName:t.name}:void 0;F.getState().openTab({type:n,title:Pd.find(e=>e.type===n)?.label??n,metadata:r,projectId:t?.name??null,closable:!0},e)}return(0,B.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-4 text-text-secondary`,children:[(0,B.jsx)(`p`,{className:`text-sm`,children:`Open a tab to get started`}),(0,B.jsx)(`div`,{className:`flex flex-col md:flex-row flex-wrap justify-center gap-2`,children:Pd.map(e=>{let t=e.icon;return(0,B.jsxs)(`button`,{onClick:()=>n(e.type),className:`flex items-center gap-2 px-4 py-2 rounded-md border border-border bg-surface hover:bg-surface-elevated text-sm text-foreground transition-colors`,children:[(0,B.jsx)(t,{className:`size-4`}),e.label]},e.type)})})]})}function Rd({projectName:e}){let t=F(t=>t.currentProject===e?t.grid:t.projectGrids[e]??[[]]);return t.flat().length<=1&&t[0]?.[0]?(0,B.jsx)(Id,{panelId:t[0][0],projectName:e}):(0,B.jsx)(Z,{orientation:`vertical`,style:{height:`100%`},children:t.map((n,r)=>(0,B.jsx)(zd,{row:n,rowIdx:r,totalRows:t.length,projectName:e},`row-${r}`))})}function zd({row:e,rowIdx:t,totalRows:n,projectName:r}){return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(qu,{minSize:`15%`,defaultSize:`${Math.round(100/n)}%`,children:e.length===1?(0,B.jsx)(Id,{panelId:e[0],projectName:r}):(0,B.jsx)(Z,{orientation:`horizontal`,children:e.map((t,n)=>(0,B.jsx)(Bd,{panelId:t,colIdx:n,totalCols:e.length,projectName:r},t))})}),t<n-1&&(0,B.jsx)(Vd,{orientation:`horizontal`})]})}function Bd({panelId:e,colIdx:t,totalCols:n,projectName:r}){return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(qu,{minSize:`15%`,defaultSize:`${Math.round(100/n)}%`,children:(0,B.jsx)(Id,{panelId:e,projectName:r})}),t<n-1&&(0,B.jsx)(Vd,{orientation:`vertical`})]})}function Vd({orientation:e}){let t=e===`vertical`;return(0,B.jsx)(Xu,{className:`
|
|
14
|
+
For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return z.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},Er=`DialogDescriptionWarning`,Dr=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${wr(Er).contentName}}.`;return z.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},Or=$n,kr=ar,Ar=sr,jr=dr,Mr=gr,Nr=vr,Pr=br,Fr=`rovingFocusGroup.onEntryFocus`,Ir={bubbles:!1,cancelable:!0},Lr=`RovingFocusGroup`,[Rr,zr,Br]=h(Lr),[Vr,Hr]=d(Lr,[Br]),[Ur,Wr]=Vr(Lr),Gr=z.forwardRef((e,t)=>(0,B.jsx)(Rr.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,B.jsx)(Rr.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,B.jsx)(Kr,{...e,ref:t})})}));Gr.displayName=Lr;var Kr=z.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:o,currentTabStopId:s,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:l,onEntryFocus:u,preventScrollOnEntryFocus:d=!1,...f}=e,m=z.useRef(null),h=C(t,m),g=b(o),[_,v]=p({prop:s,defaultProp:c??null,onChange:l,caller:Lr}),[y,x]=z.useState(!1),S=T(u),w=zr(n),E=z.useRef(!1),[D,O]=z.useState(0);return z.useEffect(()=>{let e=m.current;if(e)return e.addEventListener(Fr,S),()=>e.removeEventListener(Fr,S)},[S]),(0,B.jsx)(Ur,{scope:n,orientation:r,dir:g,loop:a,currentTabStopId:_,onItemFocus:z.useCallback(e=>v(e),[v]),onItemShiftTab:z.useCallback(()=>x(!0),[]),onFocusableItemAdd:z.useCallback(()=>O(e=>e+1),[]),onFocusableItemRemove:z.useCallback(()=>O(e=>e-1),[]),children:(0,B.jsx)(i.div,{tabIndex:y||D===0?-1:0,"data-orientation":r,...f,ref:h,style:{outline:`none`,...e.style},onMouseDown:j(e.onMouseDown,()=>{E.current=!0}),onFocus:j(e.onFocus,e=>{let t=!E.current;if(e.target===e.currentTarget&&t&&!y){let t=new CustomEvent(Fr,Ir);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=w().filter(e=>e.focusable);Qr([e.find(e=>e.active),e.find(e=>e.id===_),...e].filter(Boolean).map(e=>e.ref.current),d)}}E.current=!1}),onBlur:j(e.onBlur,()=>x(!1))})})}),qr=`RovingFocusGroupItem`,Jr=z.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:o,children:s,...c}=e,l=y(),u=o||l,d=Wr(qr,n),f=d.currentTabStopId===u,p=zr(n),{onFocusableItemAdd:m,onFocusableItemRemove:h,currentTabStopId:g}=d;return z.useEffect(()=>{if(r)return m(),()=>h()},[r,m,h]),(0,B.jsx)(Rr.ItemSlot,{scope:n,id:u,focusable:r,active:a,children:(0,B.jsx)(i.span,{tabIndex:f?0:-1,"data-orientation":d.orientation,...c,ref:t,onMouseDown:j(e.onMouseDown,e=>{r?d.onItemFocus(u):e.preventDefault()}),onFocus:j(e.onFocus,()=>d.onItemFocus(u)),onKeyDown:j(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){d.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=Zr(e,d.orientation,d.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=d.loop?$r(n,r+1):n.slice(r+1)}setTimeout(()=>Qr(n))}}),children:typeof s==`function`?s({isCurrentTabStop:f,hasTabStop:g!=null}):s})})});Jr.displayName=qr;var Yr={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function Xr(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function Zr(e,t,n){let r=Xr(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return Yr[r]}function Qr(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function $r(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var ei=Gr,ti=Jr,ni=[`Enter`,` `],ri=[`ArrowDown`,`PageUp`,`Home`],ii=[`ArrowUp`,`PageDown`,`End`],ai=[...ri,...ii],oi={ltr:[...ni,`ArrowRight`],rtl:[...ni,`ArrowLeft`]},si={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},ci=`Menu`,[li,ui,di]=h(ci),[fi,pi]=d(ci,[di,D,Hr]),mi=D(),hi=Hr(),[gi,_i]=fi(ci),[vi,yi]=fi(ci),bi=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=mi(t),[c,l]=z.useState(null),u=z.useRef(!1),d=T(a),f=b(i);return z.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,B.jsx)(m,{...s,children:(0,B.jsx)(gi,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,B.jsx)(vi,{scope:t,onClose:z.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})};bi.displayName=ci;var xi=`MenuAnchor`,Si=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=mi(n);return(0,B.jsx)(E,{...i,...r,ref:t})});Si.displayName=xi;var Ci=`MenuPortal`,[wi,Ti]=fi(Ci,{forceMount:void 0}),Ei=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=_i(Ci,t);return(0,B.jsx)(wi,{scope:t,forceMount:n,children:(0,B.jsx)(Wn,{present:n||a.open,children:(0,B.jsx)(_,{asChild:!0,container:i,children:r})})})};Ei.displayName=Ci;var Di=`MenuContent`,[Oi,ki]=fi(Di),Ai=z.forwardRef((e,t)=>{let n=Ti(Di,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=_i(Di,e.__scopeMenu),o=yi(Di,e.__scopeMenu);return(0,B.jsx)(li.Provider,{scope:e.__scopeMenu,children:(0,B.jsx)(Wn,{present:r||a.open,children:(0,B.jsx)(li.Slot,{scope:e.__scopeMenu,children:o.modal?(0,B.jsx)(ji,{...i,ref:t}):(0,B.jsx)(Mi,{...i,ref:t})})})})}),ji=z.forwardRef((e,t)=>{let n=_i(Di,e.__scopeMenu),r=z.useRef(null),i=C(t,r);return z.useEffect(()=>{let e=r.current;if(e)return g(e)},[]),(0,B.jsx)(Ni,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:j(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Mi=z.forwardRef((e,t)=>{let n=_i(Di,e.__scopeMenu);return(0,B.jsx)(Ni,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),V=o(`MenuContent.ScrollLock`),Ni=z.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=_i(Di,n),_=yi(Di,n),y=mi(n),b=hi(n),S=ui(n),[T,E]=z.useState(null),D=z.useRef(null),k=C(t,D,g.onContentChange),A=z.useRef(0),te=z.useRef(``),ne=z.useRef(0),re=z.useRef(null),M=z.useRef(`right`),ie=z.useRef(0),ae=m?w:z.Fragment,oe=m?{as:V,allowPinchZoom:!0}:void 0,se=e=>{let t=te.current+e,n=S().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=_a(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){te.current=t,window.clearTimeout(A.current),t!==``&&(A.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};z.useEffect(()=>()=>window.clearTimeout(A.current),[]),ee();let N=z.useCallback(e=>M.current===re.current?.side&&ya(e,re.current?.area),[]);return(0,B.jsx)(Oi,{scope:n,searchRef:te,onItemEnter:z.useCallback(e=>{N(e)&&e.preventDefault()},[N]),onItemLeave:z.useCallback(e=>{N(e)||(D.current?.focus(),E(null))},[N]),onTriggerLeave:z.useCallback(e=>{N(e)&&e.preventDefault()},[N]),pointerGraceTimerRef:ne,onPointerGraceIntentChange:z.useCallback(e=>{re.current=e},[]),children:(0,B.jsx)(ae,{...oe,children:(0,B.jsx)(v,{asChild:!0,trapped:i,onMountAutoFocus:j(a,e=>{e.preventDefault(),D.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:(0,B.jsx)(O,{asChild:!0,disableOutsidePointerEvents:s,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,children:(0,B.jsx)(ei,{asChild:!0,...b,dir:_.dir,orientation:`vertical`,loop:r,currentTabStopId:T,onCurrentTabStopIdChange:E,onEntryFocus:j(c,e=>{_.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,B.jsx)(x,{role:`menu`,"aria-orientation":`vertical`,"data-state":fa(g.open),"data-radix-menu-content":``,dir:_.dir,...y,...h,ref:k,style:{outline:`none`,...h.style},onKeyDown:j(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&&se(e.key));let i=D.current;if(e.target!==i||!ai.includes(e.key))return;e.preventDefault();let a=S().filter(e=>!e.disabled).map(e=>e.ref.current);ii.includes(e.key)&&a.reverse(),ha(a)}),onBlur:j(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(A.current),te.current=``)}),onPointerMove:j(e.onPointerMove,ba(e=>{let t=e.target,n=ie.current!==e.clientX;e.currentTarget.contains(t)&&n&&(M.current=e.clientX>ie.current?`right`:`left`,ie.current=e.clientX)}))})})})})})})});Ai.displayName=Di;var Pi=`MenuGroup`,Fi=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,B.jsx)(i.div,{role:`group`,...r,ref:t})});Fi.displayName=Pi;var Ii=`MenuLabel`,Li=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,B.jsx)(i.div,{...r,ref:t})});Li.displayName=Ii;var Ri=`MenuItem`,zi=`menu.itemSelect`,Bi=z.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:r,...i}=e,a=z.useRef(null),o=yi(Ri,e.__scopeMenu),s=ki(Ri,e.__scopeMenu),c=C(t,a),l=z.useRef(!1),u=()=>{let e=a.current;if(!n&&e){let t=new CustomEvent(zi,{bubbles:!0,cancelable:!0});e.addEventListener(zi,e=>r?.(e),{once:!0}),ne(e,t),t.defaultPrevented?l.current=!1:o.onClose()}};return(0,B.jsx)(Vi,{...i,ref:c,disabled:n,onClick:j(e.onClick,u),onPointerDown:t=>{e.onPointerDown?.(t),l.current=!0},onPointerUp:j(e.onPointerUp,e=>{l.current||e.currentTarget?.click()}),onKeyDown:j(e.onKeyDown,e=>{let t=s.searchRef.current!==``;n||t&&e.key===` `||ni.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});Bi.displayName=Ri;var Vi=z.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:a,...o}=e,s=ki(Ri,n),c=hi(n),l=z.useRef(null),u=C(t,l),[d,f]=z.useState(!1),[p,m]=z.useState(``);return z.useEffect(()=>{let e=l.current;e&&m((e.textContent??``).trim())},[o.children]),(0,B.jsx)(li.ItemSlot,{scope:n,disabled:r,textValue:a??p,children:(0,B.jsx)(ti,{asChild:!0,...c,focusable:!r,children:(0,B.jsx)(i.div,{role:`menuitem`,"data-highlighted":d?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...o,ref:u,onPointerMove:j(e.onPointerMove,ba(e=>{r?s.onItemLeave(e):(s.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:j(e.onPointerLeave,ba(e=>s.onItemLeave(e))),onFocus:j(e.onFocus,()=>f(!0)),onBlur:j(e.onBlur,()=>f(!1))})})})}),Hi=`MenuCheckboxItem`,Ui=z.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,B.jsx)(Zi,{scope:e.__scopeMenu,checked:n,children:(0,B.jsx)(Bi,{role:`menuitemcheckbox`,"aria-checked":pa(n)?`mixed`:n,...i,ref:t,"data-state":ma(n),onSelect:j(i.onSelect,()=>r?.(pa(n)?!0:!n),{checkForDefaultPrevented:!1})})})});Ui.displayName=Hi;var Wi=`MenuRadioGroup`,[Gi,Ki]=fi(Wi,{value:void 0,onValueChange:()=>{}}),qi=z.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=T(r);return(0,B.jsx)(Gi,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,B.jsx)(Fi,{...i,ref:t})})});qi.displayName=Wi;var Ji=`MenuRadioItem`,Yi=z.forwardRef((e,t)=>{let{value:n,...r}=e,i=Ki(Ji,e.__scopeMenu),a=n===i.value;return(0,B.jsx)(Zi,{scope:e.__scopeMenu,checked:a,children:(0,B.jsx)(Bi,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":ma(a),onSelect:j(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});Yi.displayName=Ji;var Xi=`MenuItemIndicator`,[Zi,Qi]=fi(Xi,{checked:!1}),$i=z.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...a}=e,o=Qi(Xi,n);return(0,B.jsx)(Wn,{present:r||pa(o.checked)||o.checked===!0,children:(0,B.jsx)(i.span,{...a,ref:t,"data-state":ma(o.checked)})})});$i.displayName=Xi;var ea=`MenuSeparator`,ta=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,B.jsx)(i.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});ta.displayName=ea;var na=`MenuArrow`,ra=z.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=mi(n);return(0,B.jsx)(k,{...i,...r,ref:t})});ra.displayName=na;var ia=`MenuSub`,[aa,oa]=fi(ia),sa=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=_i(ia,t),o=mi(t),[s,c]=z.useState(null),[l,u]=z.useState(null),d=T(i);return z.useEffect(()=>(a.open===!1&&d(!1),()=>d(!1)),[a.open,d]),(0,B.jsx)(m,{...o,children:(0,B.jsx)(gi,{scope:t,open:r,onOpenChange:d,content:l,onContentChange:u,children:(0,B.jsx)(aa,{scope:t,contentId:y(),triggerId:y(),trigger:s,onTriggerChange:c,children:n})})})};sa.displayName=ia;var ca=`MenuSubTrigger`,la=z.forwardRef((e,t)=>{let n=_i(ca,e.__scopeMenu),r=yi(ca,e.__scopeMenu),i=oa(ca,e.__scopeMenu),a=ki(ca,e.__scopeMenu),o=z.useRef(null),{pointerGraceTimerRef:s,onPointerGraceIntentChange:c}=a,u={__scopeMenu:e.__scopeMenu},d=z.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return z.useEffect(()=>d,[d]),z.useEffect(()=>{let e=s.current;return()=>{window.clearTimeout(e),c(null)}},[s,c]),(0,B.jsx)(Si,{asChild:!0,...u,children:(0,B.jsx)(Vi,{id:i.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":i.contentId,"data-state":fa(n.open),...e,ref:l(t,i.onTriggerChange),onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:j(e.onPointerMove,ba(t=>{a.onItemEnter(t),!t.defaultPrevented&&!e.disabled&&!n.open&&!o.current&&(a.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{n.onOpenChange(!0),d()},100))})),onPointerLeave:j(e.onPointerLeave,ba(e=>{d();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:j(e.onKeyDown,t=>{let i=a.searchRef.current!==``;e.disabled||i&&t.key===` `||oi[r.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});la.displayName=ca;var ua=`MenuSubContent`,da=z.forwardRef((e,t)=>{let n=Ti(Di,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=_i(Di,e.__scopeMenu),o=yi(Di,e.__scopeMenu),s=oa(ua,e.__scopeMenu),c=z.useRef(null),l=C(t,c);return(0,B.jsx)(li.Provider,{scope:e.__scopeMenu,children:(0,B.jsx)(Wn,{present:r||a.open,children:(0,B.jsx)(li.Slot,{scope:e.__scopeMenu,children:(0,B.jsx)(Ni,{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:j(e.onFocusOutside,e=>{e.target!==s.trigger&&a.onOpenChange(!1)}),onEscapeKeyDown:j(e.onEscapeKeyDown,e=>{o.onClose(),e.preventDefault()}),onKeyDown:j(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=si[o.dir].includes(e.key);t&&n&&(a.onOpenChange(!1),s.trigger?.focus(),e.preventDefault())})})})})})});da.displayName=ua;function fa(e){return e?`open`:`closed`}function pa(e){return e===`indeterminate`}function ma(e){return pa(e)?`indeterminate`:e?`checked`:`unchecked`}function ha(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function ga(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function _a(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=ga(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 va(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 ya(e,t){return t?va({x:e.clientX,y:e.clientY},t):!1}function ba(e){return t=>t.pointerType===`mouse`?e(t):void 0}var xa=bi,Sa=Si,Ca=Ei,wa=Ai,Ta=Fi,Ea=Li,Da=Bi,Oa=Ui,ka=qi,Aa=Yi,ja=$i,Ma=ta,Na=ra,Pa=sa,Fa=la,Ia=da,La=`ContextMenu`,[Ra,za]=d(La,[pi]),Ba=pi(),[Va,Ha]=Ra(La),Ua=e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,dir:i,modal:a=!0}=e,[o,s]=z.useState(!1),c=Ba(t),l=T(r),u=z.useCallback(e=>{s(e),l(e)},[l]);return(0,B.jsx)(Va,{scope:t,open:o,onOpenChange:u,modal:a,children:(0,B.jsx)(xa,{...c,dir:i,open:o,onOpenChange:u,modal:a,children:n})})};Ua.displayName=La;var Wa=`ContextMenuTrigger`,Ga=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,disabled:r=!1,...a}=e,o=Ha(Wa,n),s=Ba(n),c=z.useRef({x:0,y:0}),l=z.useRef({getBoundingClientRect:()=>DOMRect.fromRect({width:0,height:0,...c.current})}),u=z.useRef(0),d=z.useCallback(()=>window.clearTimeout(u.current),[]),f=e=>{c.current={x:e.clientX,y:e.clientY},o.onOpenChange(!0)};return z.useEffect(()=>d,[d]),z.useEffect(()=>void(r&&d()),[r,d]),(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Sa,{...s,virtualRef:l}),(0,B.jsx)(i.span,{"data-state":o.open?`open`:`closed`,"data-disabled":r?``:void 0,...a,ref:t,style:{WebkitTouchCallout:`none`,...e.style},onContextMenu:r?e.onContextMenu:j(e.onContextMenu,e=>{d(),f(e),e.preventDefault()}),onPointerDown:r?e.onPointerDown:j(e.onPointerDown,yo(e=>{d(),u.current=window.setTimeout(()=>f(e),700)})),onPointerMove:r?e.onPointerMove:j(e.onPointerMove,yo(d)),onPointerCancel:r?e.onPointerCancel:j(e.onPointerCancel,yo(d)),onPointerUp:r?e.onPointerUp:j(e.onPointerUp,yo(d))})]})});Ga.displayName=Wa;var Ka=`ContextMenuPortal`,qa=e=>{let{__scopeContextMenu:t,...n}=e,r=Ba(t);return(0,B.jsx)(Ca,{...r,...n})};qa.displayName=Ka;var Ja=`ContextMenuContent`,Ya=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ha(Ja,n),a=Ba(n),o=z.useRef(!1);return(0,B.jsx)(wa,{...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)`}})});Ya.displayName=Ja;var Xa=`ContextMenuGroup`,Za=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Ta,{...i,...r,ref:t})});Za.displayName=Xa;var Qa=`ContextMenuLabel`,$a=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Ea,{...i,...r,ref:t})});$a.displayName=Qa;var eo=`ContextMenuItem`,to=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Da,{...i,...r,ref:t})});to.displayName=eo;var no=`ContextMenuCheckboxItem`,ro=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Oa,{...i,...r,ref:t})});ro.displayName=no;var io=`ContextMenuRadioGroup`,ao=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(ka,{...i,...r,ref:t})});ao.displayName=io;var oo=`ContextMenuRadioItem`,so=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Aa,{...i,...r,ref:t})});so.displayName=oo;var co=`ContextMenuItemIndicator`,lo=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(ja,{...i,...r,ref:t})});lo.displayName=co;var uo=`ContextMenuSeparator`,H=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Ma,{...i,...r,ref:t})});H.displayName=uo;var U=`ContextMenuArrow`,fo=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Na,{...i,...r,ref:t})});fo.displayName=U;var po=`ContextMenuSub`,mo=e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,open:i,defaultOpen:a}=e,o=Ba(t),[s,c]=p({prop:i,defaultProp:a??!1,onChange:r,caller:po});return(0,B.jsx)(Pa,{...o,open:s,onOpenChange:c,children:n})};mo.displayName=po;var ho=`ContextMenuSubTrigger`,go=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Fa,{...i,...r,ref:t})});go.displayName=ho;var _o=`ContextMenuSubContent`,vo=z.forwardRef((e,t)=>{let{__scopeContextMenu:n,...r}=e,i=Ba(n);return(0,B.jsx)(Ia,{...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)`}})});vo.displayName=_o;function yo(e){return t=>t.pointerType===`mouse`?void 0:e(t)}var bo=Ua,xo=Ga,So=qa,Co=Ya,wo=to,To=H,Eo=`DropdownMenu`,[Do,Oo]=d(Eo,[pi]),W=pi(),[ko,Ao]=Do(Eo),jo=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=W(t),l=z.useRef(null),[u,d]=p({prop:i,defaultProp:a??!1,onChange:o,caller:Eo});return(0,B.jsx)(ko,{scope:t,triggerId:y(),triggerRef:l,contentId:y(),open:u,onOpenChange:d,onOpenToggle:z.useCallback(()=>d(e=>!e),[d]),modal:s,children:(0,B.jsx)(xa,{...c,open:u,onOpenChange:d,dir:r,modal:s,children:n})})};jo.displayName=Eo;var Mo=`DropdownMenuTrigger`,No=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:r=!1,...a}=e,o=Ao(Mo,n),s=W(n);return(0,B.jsx)(Sa,{asChild:!0,...s,children:(0,B.jsx)(i.button,{type:`button`,id:o.triggerId,"aria-haspopup":`menu`,"aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":o.open?`open`:`closed`,"data-disabled":r?``:void 0,disabled:r,...a,ref:l(t,o.triggerRef),onPointerDown:j(e.onPointerDown,e=>{!r&&e.button===0&&e.ctrlKey===!1&&(o.onOpenToggle(),o.open||e.preventDefault())}),onKeyDown:j(e.onKeyDown,e=>{r||([`Enter`,` `].includes(e.key)&&o.onOpenToggle(),e.key===`ArrowDown`&&o.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});No.displayName=Mo;var Po=`DropdownMenuPortal`,Fo=e=>{let{__scopeDropdownMenu:t,...n}=e,r=W(t);return(0,B.jsx)(Ca,{...r,...n})};Fo.displayName=Po;var Io=`DropdownMenuContent`,Lo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Ao(Io,n),a=W(n),o=z.useRef(!1);return(0,B.jsx)(wa,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:j(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:j(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)`}})});Lo.displayName=Io;var Ro=`DropdownMenuGroup`,zo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Ta,{...i,...r,ref:t})});zo.displayName=Ro;var Bo=`DropdownMenuLabel`,Vo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Ea,{...i,...r,ref:t})});Vo.displayName=Bo;var Ho=`DropdownMenuItem`,Uo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Da,{...i,...r,ref:t})});Uo.displayName=Ho;var Wo=`DropdownMenuCheckboxItem`,Go=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Oa,{...i,...r,ref:t})});Go.displayName=Wo;var Ko=`DropdownMenuRadioGroup`,qo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(ka,{...i,...r,ref:t})});qo.displayName=Ko;var Jo=`DropdownMenuRadioItem`,Yo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Aa,{...i,...r,ref:t})});Yo.displayName=Jo;var Xo=`DropdownMenuItemIndicator`,Zo=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(ja,{...i,...r,ref:t})});Zo.displayName=Xo;var Qo=`DropdownMenuSeparator`,$o=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Ma,{...i,...r,ref:t})});$o.displayName=Qo;var es=`DropdownMenuArrow`,ts=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Na,{...i,...r,ref:t})});ts.displayName=es;var ns=`DropdownMenuSubTrigger`,rs=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Fa,{...i,...r,ref:t})});rs.displayName=ns;var is=`DropdownMenuSubContent`,as=z.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=W(n);return(0,B.jsx)(Ia,{...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)`}})});as.displayName=is;var os=jo,ss=No,cs=Fo,ls=Lo,us=Uo;function ds(e,t){return z.useReducer((e,n)=>t[e][n]??e,e)}var fs=`ScrollArea`,[ps,ms]=d(fs),[hs,gs]=ps(fs),_s=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,type:r=`hover`,dir:a,scrollHideDelay:o=600,...s}=e,[c,l]=z.useState(null),[u,d]=z.useState(null),[f,p]=z.useState(null),[m,h]=z.useState(null),[g,_]=z.useState(null),[v,y]=z.useState(0),[x,S]=z.useState(0),[w,T]=z.useState(!1),[E,D]=z.useState(!1),O=C(t,e=>l(e)),k=b(a);return(0,B.jsx)(hs,{scope:n,type:r,dir:k,scrollHideDelay:o,scrollArea:c,viewport:u,onViewportChange:d,content:f,onContentChange:p,scrollbarX:m,onScrollbarXChange:h,scrollbarXEnabled:w,onScrollbarXEnabledChange:T,scrollbarY:g,onScrollbarYChange:_,scrollbarYEnabled:E,onScrollbarYEnabledChange:D,onCornerWidthChange:y,onCornerHeightChange:S,children:(0,B.jsx)(i.div,{dir:k,...s,ref:O,style:{position:`relative`,"--radix-scroll-area-corner-width":v+`px`,"--radix-scroll-area-corner-height":x+`px`,...e.style}})})});_s.displayName=fs;var vs=`ScrollAreaViewport`,ys=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,children:r,nonce:a,...o}=e,s=gs(vs,n),c=C(t,z.useRef(null),s.onViewportChange);return(0,B.jsxs)(B.Fragment,{children:[(0,B.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:a}),(0,B.jsx)(i.div,{"data-radix-scroll-area-viewport":``,...o,ref:c,style:{overflowX:s.scrollbarXEnabled?`scroll`:`hidden`,overflowY:s.scrollbarYEnabled?`scroll`:`hidden`,...e.style},children:(0,B.jsx)(`div`,{ref:s.onContentChange,style:{minWidth:`100%`,display:`table`},children:r})})]})});ys.displayName=vs;var bs=`ScrollAreaScrollbar`,xs=z.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=gs(bs,e.__scopeScrollArea),{onScrollbarXEnabledChange:a,onScrollbarYEnabledChange:o}=i,s=e.orientation===`horizontal`;return z.useEffect(()=>(s?a(!0):o(!0),()=>{s?a(!1):o(!1)}),[s,a,o]),i.type===`hover`?(0,B.jsx)(Ss,{...r,ref:t,forceMount:n}):i.type===`scroll`?(0,B.jsx)(Cs,{...r,ref:t,forceMount:n}):i.type===`auto`?(0,B.jsx)(ws,{...r,ref:t,forceMount:n}):i.type===`always`?(0,B.jsx)(Ts,{...r,ref:t}):null});xs.displayName=bs;var Ss=z.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=gs(bs,e.__scopeScrollArea),[a,o]=z.useState(!1);return z.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,B.jsx)(Wn,{present:n||a,children:(0,B.jsx)(ws,{"data-state":a?`visible`:`hidden`,...r,ref:t})})}),Cs=z.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=gs(bs,e.__scopeScrollArea),a=e.orientation===`horizontal`,o=Gs(()=>c(`SCROLL_END`),100),[s,c]=ds(`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 z.useEffect(()=>{if(s===`idle`){let e=window.setTimeout(()=>c(`HIDE`),i.scrollHideDelay);return()=>window.clearTimeout(e)}},[s,i.scrollHideDelay,c]),z.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,B.jsx)(Wn,{present:n||s!==`hidden`,children:(0,B.jsx)(Ts,{"data-state":s===`hidden`?`hidden`:`visible`,...r,ref:t,onPointerEnter:j(e.onPointerEnter,()=>c(`POINTER_ENTER`)),onPointerLeave:j(e.onPointerLeave,()=>c(`POINTER_LEAVE`))})})}),ws=z.forwardRef((e,t)=>{let n=gs(bs,e.__scopeScrollArea),{forceMount:r,...i}=e,[a,o]=z.useState(!1),s=e.orientation===`horizontal`,c=Gs(()=>{if(n.viewport){let e=n.viewport.offsetWidth<n.viewport.scrollWidth,t=n.viewport.offsetHeight<n.viewport.scrollHeight;o(s?e:t)}},10);return Ks(n.viewport,c),Ks(n.content,c),(0,B.jsx)(Wn,{present:r||a,children:(0,B.jsx)(Ts,{"data-state":a?`visible`:`hidden`,...i,ref:t})})}),Ts=z.forwardRef((e,t)=>{let{orientation:n=`vertical`,...r}=e,i=gs(bs,e.__scopeScrollArea),a=z.useRef(null),o=z.useRef(0),[s,c]=z.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),l=Rs(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 Bs(e,o.current,s,t)}return n===`horizontal`?(0,B.jsx)(Es,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollLeft,t=Vs(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,B.jsx)(Ds,{...u,ref:t,onThumbPositionChange:()=>{if(i.viewport&&a.current){let e=i.viewport.scrollTop,t=Vs(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}),Es=z.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=gs(bs,e.__scopeScrollArea),[o,s]=z.useState(),c=z.useRef(null),l=C(t,c,a.onScrollbarXChange);return z.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,B.jsx)(As,{"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":zs(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),Us(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:Ls(o.paddingLeft),paddingEnd:Ls(o.paddingRight)}})}})}),Ds=z.forwardRef((e,t)=>{let{sizes:n,onSizesChange:r,...i}=e,a=gs(bs,e.__scopeScrollArea),[o,s]=z.useState(),c=z.useRef(null),l=C(t,c,a.onScrollbarYChange);return z.useEffect(()=>{c.current&&s(getComputedStyle(c.current))},[c]),(0,B.jsx)(As,{"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":zs(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),Us(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:Ls(o.paddingTop),paddingEnd:Ls(o.paddingBottom)}})}})}),[Os,ks]=ps(bs),As=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,sizes:r,hasThumb:a,onThumbChange:o,onThumbPointerUp:s,onThumbPointerDown:c,onThumbPositionChange:l,onDragScroll:u,onWheelScroll:d,onResize:f,...p}=e,m=gs(bs,n),[h,g]=z.useState(null),_=C(t,e=>g(e)),v=z.useRef(null),y=z.useRef(``),b=m.viewport,x=r.content-r.viewport,S=T(d),w=T(l),E=Gs(f,10);function D(e){v.current&&u({x:e.clientX-v.current.left,y:e.clientY-v.current.top})}return z.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]),z.useEffect(w,[r,w]),Ks(h,E),Ks(m.content,E),(0,B.jsx)(Os,{scope:n,scrollbar:h,hasThumb:a,onThumbChange:T(o),onThumbPointerUp:T(s),onThumbPositionChange:w,onThumbPointerDown:T(c),children:(0,B.jsx)(i.div,{...p,ref:_,style:{position:`absolute`,...p.style},onPointerDown:j(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`),D(e))}),onPointerMove:j(e.onPointerMove,D),onPointerUp:j(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})})})}),js=`ScrollAreaThumb`,Ms=z.forwardRef((e,t)=>{let{forceMount:n,...r}=e,i=ks(js,e.__scopeScrollArea);return(0,B.jsx)(Wn,{present:n||i.hasThumb,children:(0,B.jsx)(Ns,{ref:t,...r})})}),Ns=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,style:r,...a}=e,o=gs(js,n),s=ks(js,n),{onThumbPositionChange:c}=s,l=C(t,e=>s.onThumbChange(e)),u=z.useRef(void 0),d=Gs(()=>{u.current&&=(u.current(),void 0)},100);return z.useEffect(()=>{let e=o.viewport;if(e){let t=()=>{d(),u.current||(u.current=Ws(e,c),c())};return c(),e.addEventListener(`scroll`,t),()=>e.removeEventListener(`scroll`,t)}},[o.viewport,d,c]),(0,B.jsx)(i.div,{"data-state":s.hasThumb?`visible`:`hidden`,...a,ref:l,style:{width:`var(--radix-scroll-area-thumb-width)`,height:`var(--radix-scroll-area-thumb-height)`,...r},onPointerDownCapture:j(e.onPointerDownCapture,e=>{let t=e.target.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;s.onThumbPointerDown({x:n,y:r})}),onPointerUp:j(e.onPointerUp,s.onThumbPointerUp)})});Ms.displayName=js;var Ps=`ScrollAreaCorner`,Fs=z.forwardRef((e,t)=>{let n=gs(Ps,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!==`scroll`&&r?(0,B.jsx)(Is,{...e,ref:t}):null});Fs.displayName=Ps;var Is=z.forwardRef((e,t)=>{let{__scopeScrollArea:n,...r}=e,a=gs(Ps,n),[o,s]=z.useState(0),[c,l]=z.useState(0),u=!!(o&&c);return Ks(a.scrollbarX,()=>{let e=a.scrollbarX?.offsetHeight||0;a.onCornerHeightChange(e),l(e)}),Ks(a.scrollbarY,()=>{let e=a.scrollbarY?.offsetWidth||0;a.onCornerWidthChange(e),s(e)}),u?(0,B.jsx)(i.div,{...r,ref:t,style:{width:o,height:c,position:`absolute`,right:a.dir===`ltr`?0:void 0,left:a.dir===`rtl`?0:void 0,bottom:0,...e.style}}):null});function Ls(e){return e?parseInt(e,10):0}function Rs(e,t){let n=e/t;return isNaN(n)?0:n}function zs(e){let t=Rs(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function Bs(e,t,n,r=`ltr`){let i=zs(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 Hs([c,l],d)(e)}function Vs(e,t,n=`ltr`){let r=zs(t),i=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,a=t.scrollbar.size-i,o=t.content-t.viewport,s=a-r,c=ue(e,n===`ltr`?[0,o]:[o*-1,0]);return Hs([0,o],[0,s])(c)}function Hs(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 Us(e,t){return e>0&&e<t}var Ws=(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 Gs(e,t){let n=T(e),r=z.useRef(0);return z.useEffect(()=>()=>window.clearTimeout(r.current),[]),z.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function Ks(e,t){let n=T(t);te(()=>{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 qs=_s,Js=ys,Ys=Fs,Xs=`Separator`,Zs=`horizontal`,Qs=[`horizontal`,`vertical`],$s=z.forwardRef((e,t)=>{let{decorative:n,orientation:r=Zs,...a}=e,o=ec(r)?r:Zs,s=o===`vertical`?o:void 0,c=n?{role:`none`}:{"aria-orientation":s,role:`separator`};return(0,B.jsx)(i.div,{"data-orientation":o,...c,...a,ref:t})});$s.displayName=Xs;function ec(e){return Qs.includes(e)}var tc=$s,nc=`Tabs`,[rc,ic]=d(nc,[Hr]),ac=Hr(),[oc,sc]=rc(nc),cc=z.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,onValueChange:a,defaultValue:o,orientation:s=`horizontal`,dir:c,activationMode:l=`automatic`,...u}=e,d=b(c),[f,m]=p({prop:r,onChange:a,defaultProp:o??``,caller:nc});return(0,B.jsx)(oc,{scope:n,baseId:y(),value:f,onValueChange:m,orientation:s,dir:d,activationMode:l,children:(0,B.jsx)(i.div,{dir:d,"data-orientation":s,...u,ref:t})})});cc.displayName=nc;var lc=`TabsList`,uc=z.forwardRef((e,t)=>{let{__scopeTabs:n,loop:r=!0,...a}=e,o=sc(lc,n),s=ac(n);return(0,B.jsx)(ei,{asChild:!0,...s,orientation:o.orientation,dir:o.dir,loop:r,children:(0,B.jsx)(i.div,{role:`tablist`,"aria-orientation":o.orientation,...a,ref:t})})});uc.displayName=lc;var dc=`TabsTrigger`,fc=z.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,disabled:a=!1,...o}=e,s=sc(dc,n),c=ac(n),l=hc(s.baseId,r),u=gc(s.baseId,r),d=r===s.value;return(0,B.jsx)(ti,{asChild:!0,...c,focusable:!a,active:d,children:(0,B.jsx)(i.button,{type:`button`,role:`tab`,"aria-selected":d,"aria-controls":u,"data-state":d?`active`:`inactive`,"data-disabled":a?``:void 0,disabled:a,id:l,...o,ref:t,onMouseDown:j(e.onMouseDown,e=>{!a&&e.button===0&&e.ctrlKey===!1?s.onValueChange(r):e.preventDefault()}),onKeyDown:j(e.onKeyDown,e=>{[` `,`Enter`].includes(e.key)&&s.onValueChange(r)}),onFocus:j(e.onFocus,()=>{let e=s.activationMode!==`manual`;!d&&!a&&e&&s.onValueChange(r)})})})});fc.displayName=dc;var pc=`TabsContent`,mc=z.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,forceMount:a,children:o,...s}=e,c=sc(pc,n),l=hc(c.baseId,r),u=gc(c.baseId,r),d=r===c.value,f=z.useRef(d);return z.useEffect(()=>{let e=requestAnimationFrame(()=>f.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,B.jsx)(Wn,{present:a||d,children:({present:n})=>(0,B.jsx)(i.div,{"data-state":d?`active`:`inactive`,"data-orientation":c.orientation,role:`tabpanel`,"aria-labelledby":l,hidden:!n,id:u,tabIndex:0,...s,ref:t,style:{...e.style,animationDuration:f.current?`0s`:void 0},children:n&&o})})});mc.displayName=pc;function hc(e,t){return`${e}-trigger-${t}`}function gc(e,t){return`${e}-content-${t}`}var _c=cc,vc=uc,yc=fc,bc=mc,[xc,Sc]=d(`Tooltip`,[D]),Cc=D(),wc=`TooltipProvider`,Tc=700,Ec=`tooltip.open`,[Dc,Oc]=xc(wc),kc=e=>{let{__scopeTooltip:t,delayDuration:n=Tc,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=z.useRef(!0),s=z.useRef(!1),c=z.useRef(0);return z.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,B.jsx)(Dc,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:z.useCallback(()=>{window.clearTimeout(c.current),o.current=!1},[]),onClose:z.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:z.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})};kc.displayName=wc;var Ac=`Tooltip`,[jc,Mc]=xc(Ac),Nc=e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,c=Oc(Ac,e.__scopeTooltip),l=Cc(t),[u,d]=z.useState(null),f=y(),h=z.useRef(0),g=o??c.disableHoverableContent,_=s??c.delayDuration,v=z.useRef(!1),[b,x]=p({prop:r,defaultProp:i??!1,onChange:e=>{e?(c.onOpen(),document.dispatchEvent(new CustomEvent(Ec))):c.onClose(),a?.(e)},caller:Ac}),S=z.useMemo(()=>b?v.current?`delayed-open`:`instant-open`:`closed`,[b]),C=z.useCallback(()=>{window.clearTimeout(h.current),h.current=0,v.current=!1,x(!0)},[x]),w=z.useCallback(()=>{window.clearTimeout(h.current),h.current=0,x(!1)},[x]),T=z.useCallback(()=>{window.clearTimeout(h.current),h.current=window.setTimeout(()=>{v.current=!0,x(!0),h.current=0},_)},[_,x]);return z.useEffect(()=>()=>{h.current&&=(window.clearTimeout(h.current),0)},[]),(0,B.jsx)(m,{...l,children:(0,B.jsx)(jc,{scope:t,contentId:f,open:b,stateAttribute:S,trigger:u,onTriggerChange:d,onTriggerEnter:z.useCallback(()=>{c.isOpenDelayedRef.current?T():C()},[c.isOpenDelayedRef,T,C]),onTriggerLeave:z.useCallback(()=>{g?w():(window.clearTimeout(h.current),h.current=0)},[w,g]),onOpen:C,onClose:w,disableHoverableContent:g,children:n})})};Nc.displayName=Ac;var Pc=`TooltipTrigger`,Fc=z.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,a=Mc(Pc,n),o=Oc(Pc,n),s=Cc(n),c=C(t,z.useRef(null),a.onTriggerChange),l=z.useRef(!1),u=z.useRef(!1),d=z.useCallback(()=>l.current=!1,[]);return z.useEffect(()=>()=>document.removeEventListener(`pointerup`,d),[d]),(0,B.jsx)(E,{asChild:!0,...s,children:(0,B.jsx)(i.button,{"aria-describedby":a.open?a.contentId:void 0,"data-state":a.stateAttribute,...r,ref:c,onPointerMove:j(e.onPointerMove,e=>{e.pointerType!==`touch`&&!u.current&&!o.isPointerInTransitRef.current&&(a.onTriggerEnter(),u.current=!0)}),onPointerLeave:j(e.onPointerLeave,()=>{a.onTriggerLeave(),u.current=!1}),onPointerDown:j(e.onPointerDown,()=>{a.open&&a.onClose(),l.current=!0,document.addEventListener(`pointerup`,d,{once:!0})}),onFocus:j(e.onFocus,()=>{l.current||a.onOpen()}),onBlur:j(e.onBlur,a.onClose),onClick:j(e.onClick,a.onClose)})})});Fc.displayName=Pc;var Ic=`TooltipPortal`,[Lc,Rc]=xc(Ic,{forceMount:void 0}),zc=e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=Mc(Ic,t);return(0,B.jsx)(Lc,{scope:t,forceMount:n,children:(0,B.jsx)(Wn,{present:n||a.open,children:(0,B.jsx)(_,{asChild:!0,container:i,children:r})})})};zc.displayName=Ic;var Bc=`TooltipContent`,Vc=z.forwardRef((e,t)=>{let n=Rc(Bc,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=Mc(Bc,e.__scopeTooltip);return(0,B.jsx)(Wn,{present:r||o.open,children:o.disableHoverableContent?(0,B.jsx)(Kc,{side:i,...a,ref:t}):(0,B.jsx)(Hc,{side:i,...a,ref:t})})}),Hc=z.forwardRef((e,t)=>{let n=Mc(Bc,e.__scopeTooltip),r=Oc(Bc,e.__scopeTooltip),i=z.useRef(null),a=C(t,i),[o,s]=z.useState(null),{trigger:c,onClose:l}=n,u=i.current,{onPointerInTransitChange:d}=r,f=z.useCallback(()=>{s(null),d(!1)},[d]),p=z.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=Xc(r,Yc(r,n.getBoundingClientRect())),a=Zc(t.getBoundingClientRect());s($c([...i,...a])),d(!0)},[d]);return z.useEffect(()=>()=>f(),[f]),z.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]),z.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=!Qc(n,o);r?f():i&&(f(),l())};return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[c,u,o,l,f]),(0,B.jsx)(Kc,{...e,ref:a})}),[Uc,Wc]=xc(Ac,{isInside:!1}),Gc=a(`TooltipContent`),Kc=z.forwardRef((e,t)=>{let{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:a,onPointerDownOutside:o,...s}=e,c=Mc(Bc,n),l=Cc(n),{onClose:u}=c;return z.useEffect(()=>(document.addEventListener(Ec,u),()=>document.removeEventListener(Ec,u)),[u]),z.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,B.jsx)(O,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:u,children:(0,B.jsxs)(x,{"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,B.jsx)(Gc,{children:r}),(0,B.jsx)(Uc,{scope:n,isInside:!0,children:(0,B.jsx)(ve,{id:c.contentId,role:`tooltip`,children:i||r})})]})})});Vc.displayName=Bc;var qc=`TooltipArrow`,Jc=z.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=Cc(n);return Wc(qc,n).isInside?null:(0,B.jsx)(k,{...i,...r,ref:t})});Jc.displayName=qc;function Yc(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 Xc(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 Zc(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 Qc(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 $c(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),el(t)}function el(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 tl=kc,nl=Nc,rl=Fc,il=zc,al=Vc,ol=Jc;function sl({delayDuration:e=0,...t}){return(0,B.jsx)(tl,{"data-slot":`tooltip-provider`,delayDuration:e,...t})}function G({...e}){return(0,B.jsx)(nl,{"data-slot":`tooltip`,...e})}function cl({...e}){return(0,B.jsx)(rl,{"data-slot":`tooltip-trigger`,...e})}function ll({className:e,sideOffset:t=0,children:n,...r}){return(0,B.jsx)(il,{children:(0,B.jsxs)(al,{"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,B.jsx)(ol,{className:`z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground`})]})})}function ul(e,t){let n=getComputedStyle(e);return t*parseFloat(n.fontSize)}function dl(e,t){let n=getComputedStyle(e.ownerDocument.body);return t*parseFloat(n.fontSize)}function fl(e){return e/100*window.innerHeight}function pl(e){return e/100*window.innerWidth}function ml(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 hl({groupSize:e,panelElement:t,styleProp:n}){let r,[i,a]=ml(n);switch(a){case`%`:r=i/100*e;break;case`px`:r=i;break;case`rem`:r=dl(t,i);break;case`em`:r=ul(t,i);break;case`vh`:r=fl(i);break;case`vw`:r=pl(i);break}return r}function gl(e){return parseFloat(e.toFixed(3))}function _l({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 vl(e){let{panels:t}=e,n=_l({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=gl(hl({groupSize:n,panelElement:t,styleProp:r.collapsedSize})/n*100));let a;r.defaultSize!==void 0&&(a=gl(hl({groupSize:n,panelElement:t,styleProp:r.defaultSize})/n*100));let o=0;r.minSize!==void 0&&(o=gl(hl({groupSize:n,panelElement:t,styleProp:r.minSize})/n*100));let s=100;return r.maxSize!==void 0&&(s=gl(hl({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 K(e,t=`Assertion error`){if(!e)throw Error(t)}function yl(e,t){return Array.from(t).sort(e===`horizontal`?bl:xl)}function bl(e,t){let n=e.element.offsetLeft-t.element.offsetLeft;return n===0?e.element.offsetWidth-t.element.offsetWidth:n}function xl(e,t){let n=e.element.offsetTop-t.element.offsetTop;return n===0?e.element.offsetHeight-t.element.offsetHeight:n}function Sl(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.ELEMENT_NODE}function Cl(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 wl({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}=Cl(r,n),s=e===`horizontal`?t:o;s<a&&(a=s,i=n)}return K(i,`No rect found`),i}var Tl;function El(){return Tl===void 0&&(Tl=typeof matchMedia==`function`?!!matchMedia(`(pointer:coarse)`).matches:!1),Tl}function Dl(e){let{element:t,orientation:n,panels:r,separators:i}=e,a=yl(n,Array.from(t.children).filter(Sl).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,wl({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=El()?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:_l({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 Ol=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)}}},kl=new Map,Al=new Ol;function jl(e){kl=new Map(kl),kl.delete(e)}function Ml(e,t){for(let[t]of kl)if(t.id===e)return t}function Nl(e,t){for(let[t,n]of kl)if(t.id===e)return n;if(t)throw Error(`Could not find data for Group with id ${e}`)}function Pl(){return kl}function Fl(e,t){return Al.addListener(`groupChange`,n=>{n.group.id===e&&t(n)})}function Il(e,t){let n=kl.get(e);kl=new Map(kl),kl.set(e,t),Al.emit(`groupChange`,{group:e,prev:n,next:t})}function Ll(e,t,n){let r,i={x:1/0,y:1/0};for(let a of t){let t=Cl(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 q(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function Rl(e,t){if(e===t)throw Error(`Cannot compare node with itself`);let n={a:Vl(e),b:Vl(t)},r;for(;n.a.at(-1)===n.b.at(-1);)r=n.a.pop(),n.b.pop();K(r,`Stacking order can only be calculated for elements with a common ancestor`);let i={a:Bl(zl(n.a)),b:Bl(zl(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 J=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function Y(e){let t=getComputedStyle(Hl(e)??e).display;return t===`flex`||t===`inline-flex`}function X(e){let t=getComputedStyle(e);return!!(t.position===`fixed`||t.zIndex!==`auto`&&(t.position!==`static`||Y(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`||J.test(t.willChange)||t.webkitOverflowScrolling===`touch`)}function zl(e){let t=e.length;for(;t--;){let n=e[t];if(K(n,`Missing node`),X(n))return n}return null}function Bl(e){return e&&Number(getComputedStyle(e).zIndex)||0}function Vl(e){let t=[];for(;e;)t.push(e),e=Hl(e);return t}function Hl(e){let{parentNode:t}=e;return q(t)?t.host:t}function Ul(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 Wl({groupElement:e,hitRegion:t,pointerEventTarget:n}){if(!Sl(n)||n.contains(e)||e.contains(n))return!0;if(Rl(n,e)>0){let r=n;for(;r;){if(r.contains(e))return!0;if(Ul(r.getBoundingClientRect(),t))return!1;r=r.parentElement}}return!0}function Gl(e,t){let n=[];return t.forEach((t,r)=>{if(r.disabled)return;let i=Dl(r),a=Ll(r.orientation,i,{x:e.clientX,y:e.clientY});a&&a.distance.x<=0&&a.distance.y<=0&&Wl({groupElement:r.element,hitRegion:a.hitRegion.rect,pointerEventTarget:e.target})&&n.push(a.hitRegion)}),n}function Kl(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 ql(e,t,n=0){return Math.abs(gl(e)-gl(t))<=n}function Jl(e,t){return ql(e,t)?0:e>t?1:-1}function Yl({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(Jl(r,c)<0)if(a){let e=(i+c)/2;r=Jl(r,e)<0?i:c}else r=c;return r=Math.min(s,r),r=gl(r),r}function Xl({delta:e,initialLayout:t,panelConstraints:n,pivotIndices:r,prevLayout:i,trigger:a}){if(ql(e,0))return t;let o=a===`imperative-api`,s=Object.values(t),c=Object.values(i),l=[...s],[u,d]=r;K(u!=null,`Invalid first pivot index`),K(d!=null,`Invalid second pivot index`);let f=0;switch(a){case`keyboard`:{let t=e<0?d:u,r=n[t];K(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(K(n!=null,`Previous layout not found for panel index ${t}`),ql(n,i)){let t=o-n;Jl(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?u:d,r=n[t];K(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(K(n!=null,`Previous layout not found for panel index ${t}`),ql(n,o)){let t=n-i;Jl(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}break;default:{let t=e<0?d:u,r=n[t];K(r,`Panel constraints not found for index ${t}`);let i=s[t],{collapsible:a,collapsedSize:o,minSize:c}=r;if(a&&Jl(i,c)<0)if(e>0){let t=c-o,n=t/2;Jl(i+e,c)<0&&(e=Jl(e,n)<=0?0:t)}else{let t=c-o,n=100-t/2;Jl(i-e,c)<0&&(e=Jl(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];K(e!=null,`Previous layout not found for panel index ${r}`);let a=Yl({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];K(i!=null,`Previous layout not found for panel index ${t}`);let a=i-r,c=Yl({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:i,size:a});if(!ql(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(Kl(c,l))return i;{let t=e<0?d:u,r=s[t];K(r!=null,`Previous layout not found for panel index ${t}`);let i=r+f,a=Yl({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:r,size:i});if(l[t]=a,!ql(a,i)){let t=i-a,r=e<0?d:u;for(;r>=0&&r<n.length;){let i=l[r];K(i!=null,`Previous layout not found for panel index ${r}`);let a=i+t,s=Yl({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:i,size:a});if(ql(i,s)||(t-=s-i,l[r]=s),ql(t,0))break;e>0?r--:r++}}}if(!ql(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 Zl(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(t[n]===void 0||Jl(e[n],t[n])!==0)return!1;return!0}function Ql({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(!ql(i,100)&&r.length>0)for(let e=0;e<t.length;e++){let t=r[e];K(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];K(i!=null,`No layout data found for index ${e}`);let o=r[e];K(o!=null,`No layout data found for index ${e}`);let s=Yl({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:i,size:o});o!=s&&(a+=o-s,r[e]=s)}if(!ql(a,0))for(let e=0;e<t.length;e++){let n=r[e];K(n!=null,`No layout data found for index ${e}`);let i=n+a,o=Yl({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:n,size:i});if(n!==o&&(a-=o-n,r[e]=o,ql(a,0)))break}let o=Object.keys(e);return r.reduce((e,t,n)=>(e[o[n]]=t,e),{})}function $l({groupId:e,panelId:t}){let n=()=>{let t=Pl();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=Ql({layout:Xl({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});Zl(l,p)||Il(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&&ql(t,n)},resize:e=>{let{group:t}=n(),{element:r}=i(),a=_l({group:t});o(gl(hl({groupSize:a,panelElement:r,styleProp:e})/a*100))}}}function eu(e){e.defaultPrevented||Gl(e,Pl()).forEach(t=>{if(t.separator){let n=t.panels.find(e=>e.panelConstraints.defaultSize!==void 0);if(n){let r=n.panelConstraints.defaultSize,i=$l({groupId:t.group.id,panelId:n.id});i&&r!==void 0&&(i.resize(r),e.preventDefault())}}})}function tu(e){let t=Pl();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 nu({groupId:e}){let t=()=>{let t=Pl();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=Ql({layout:e,panelConstraints:r});return n?o:(Zl(o,c)||Il(i,{defaultLayoutDeferred:n,derivedPanelConstraints:r,groupSize:a,layout:c,separatorToPanels:s}),c)}}}function ru(e,t){let n=tu(e),r=Nl(n.id,!0),i=n.separators.find(t=>t.element===e);K(i,`Matching separator not found`);let a=r.separatorToPanels.get(i);K(a,`Matching panels not found`);let o=a.map(e=>n.panels.indexOf(e)),s=nu({groupId:n.id}).getLayout(),c=Ql({layout:Xl({delta:t,initialLayout:s,panelConstraints:r.derivedPanelConstraints,pivotIndices:o,prevLayout:s,trigger:`keyboard`}),panelConstraints:r.derivedPanelConstraints});Zl(s,c)||Il(n,{defaultLayoutDeferred:r.defaultLayoutDeferred,derivedPanelConstraints:r.derivedPanelConstraints,groupSize:r.groupSize,layout:c,separatorToPanels:r.separatorToPanels})}function iu(e){if(e.defaultPrevented)return;let t=e.currentTarget,n=tu(t);if(!n.disabled)switch(e.key){case`ArrowDown`:e.preventDefault(),n.orientation===`vertical`&&ru(t,5);break;case`ArrowLeft`:e.preventDefault(),n.orientation===`horizontal`&&ru(t,-5);break;case`ArrowRight`:e.preventDefault(),n.orientation===`horizontal`&&ru(t,5);break;case`ArrowUp`:e.preventDefault(),n.orientation===`vertical`&&ru(t,-5);break;case`End`:e.preventDefault(),ru(t,100);break;case`Enter`:{e.preventDefault();let n=tu(t),{derivedPanelConstraints:r,layout:i,separatorToPanels:a}=Nl(n.id,!0),o=n.separators.find(e=>e.element===t);K(o,`Matching separator not found`);let s=a.get(o);K(s,`Matching panels not found`);let c=s[0],l=r.find(e=>e.panelId===c.id);if(K(l,`Panel metadata not found`),l.collapsible){let e=i[c.id];ru(t,(l.collapsedSize===e?n.mutableState.expandedPanelSizes[c.id]??l.minSize:l.collapsedSize)-e)}break}case`F6`:{e.preventDefault();let n=tu(t).separators.map(e=>e.element),r=Array.from(n).findIndex(t=>t===e.currentTarget);K(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(),ru(t,-100);break}}var au={cursorFlags:0,state:`inactive`},ou=new Ol;function su(){return au}function cu(e){return ou.addListener(`change`,e)}function lu(e){let t=au,n={...au};n.cursorFlags=e,au=n,ou.emit(`change`,{prev:t,next:n})}function uu(e){let t=au;au=e,ou.emit(`change`,{prev:t,next:e})}function du(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=Pl(),n=Gl(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)}),uu({cursorFlags:0,hitRegions:n,initialLayoutMap:r,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:`active`}),n.length&&e.preventDefault()}var fu=e=>e,pu=()=>{},mu=1,hu=2,gu=4,_u=8,vu=3,yu=12,bu;function xu(){return bu===void 0&&(bu=!1,typeof window<`u`&&(window.navigator.userAgent.includes(`Chrome`)||window.navigator.userAgent.includes(`Firefox`))&&(bu=!0)),bu}function Su({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&&xu()){let t=(e&mu)!==0,n=(e&hu)!==0,r=(e&gu)!==0,i=(e&_u)!==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 xu()?r>0&&i>0?`move`:r>0?`ew-resize`:`ns-resize`:r>0&&i>0?`grab`:r>0?`col-resize`:`row-resize`}}var Cu=new WeakMap;function wu(e){if(e.defaultView===null||e.defaultView===void 0)return;let{prevStyle:t,styleSheet:n}=Cu.get(e)??{};n===void 0&&(n=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets&&e.adoptedStyleSheets.push(n));let r=su();switch(r.state){case`active`:case`hover`:{let e=Su({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}Cu.set(e,{prevStyle:t,styleSheet:n})}function Tu({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=Xl({delta:d,initialLayout:f,panelConstraints:h,pivotIndices:e.panels.map(e=>l.indexOf(e)),prevLayout:_,trigger:`mouse-or-touch`});if(Zl(t,_)){if(d!==0&&!u)switch(c){case`horizontal`:s|=d<0?mu:hu;break;case`vertical`:s|=d<0?gu:_u;break}}else Il(e.group,{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:t,separatorToPanels:v})}});let c=0;t.movementX===0?c|=o&vu:c|=s&vu,t.movementY===0?c|=o&yu:c|=s&yu,lu(c),wu(e)}function Eu(e){let t=Pl(),n=su();switch(n.state){case`active`:Tu({document:e.currentTarget,event:e,hitRegions:n.hitRegions,initialLayoutMap:n.initialLayoutMap,mountedGroups:t,prevCursorFlags:n.cursorFlags})}}function Du(e){if(e.defaultPrevented)return;let t=su(),n=Pl();switch(t.state){case`active`:if(e.buttons===0){uu({cursorFlags:0,state:`inactive`}),t.hitRegions.forEach(e=>{let t=Nl(e.group.id,!0);Il(e.group,t)});return}Tu({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:n,pointerDownAtPoint:t.pointerDownAtPoint,prevCursorFlags:t.cursorFlags});break;default:{let r=Gl(e,n);r.length===0?t.state!==`inactive`&&uu({cursorFlags:0,state:`inactive`}):uu({cursorFlags:0,hitRegions:r,state:`hover`}),wu(e.currentTarget);break}}}function Ou(e){if(e.relatedTarget instanceof HTMLIFrameElement)switch(su().state){case`hover`:uu({cursorFlags:0,state:`inactive`})}}function ku(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=su();switch(t.state){case`active`:uu({cursorFlags:0,state:`inactive`}),t.hitRegions.length>0&&(wu(e.currentTarget),t.hitRegions.forEach(e=>{let t=Nl(e.group.id,!0);Il(e.group,t)}),e.preventDefault())}}function Au(e){let t=0,n=0,r={};for(let i of e)if(i.defaultSize!==void 0){t++;let e=gl(i.defaultSize);n+=e,r[i.panelId]=e}else r[i.panelId]=void 0;let i=e.length-t;if(i!==0){let t=gl((100-n)/i);for(let n of e)n.defaultSize===void 0&&(r[n.panelId]=t)}return r}function ju(e,t,n){if(!n[0])return;let r=e.panels.find(e=>e.element===t);if(!r||!r.onResize)return;let i=_l({group:e}),a=e.orientation===`horizontal`?r.element.offsetWidth:r.element.offsetHeight,o=r.mutableValues.prevSize,s={asPercentage:gl(a/i*100),inPixels:a};r.mutableValues.prevSize=s,r.onResize(s,r.id,o)}function Mu(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 Nu({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=gl(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]=gl((r[e]??0)/a*l);else{let e=gl(l/c.length);for(let t of c)u[t]=e}return u}function Pu(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 Fu=new Map;function Iu(e){let t=!0;K(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=_l({group:e});if(t===0)return;let n=Nl(e.id);if(!n)return;let r=vl(e),i=n.defaultLayoutDeferred?Au(r):n.layout,a=Ql({layout:Nu({group:e,nextGroupSize:t,prevGroupSize:n.groupSize,prevLayout:i}),panelConstraints:r});if(!n.defaultLayoutDeferred&&Zl(n.layout,a)&&Mu(n.derivedPanelConstraints,r)&&n.groupSize===t)return;Il(e,{defaultLayoutDeferred:!1,derivedPanelConstraints:r,groupSize:t,layout:a,separatorToPanels:n.separatorToPanels})}}else ju(e,i,n)}});a.observe(e.element),e.panels.forEach(e=>{K(!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=_l({group:e}),s=vl(e),c=e.panels.map(({id:e})=>e).join(`,`),l=e.mutableState.defaultLayout;l&&(Pu(e.panels,l)||(l=void 0));let u=Ql({layout:e.mutableState.layouts[c]??l??Au(s),panelConstraints:s}),d=e.element.ownerDocument;Fu.set(d,(Fu.get(d)??0)+1);let f=new Map;return Dl(e).forEach(e=>{e.separator&&f.set(e.separator,e.panels)}),Il(e,{defaultLayoutDeferred:o===0,derivedPanelConstraints:s,groupSize:o,layout:u,separatorToPanels:f}),e.separators.forEach(e=>{K(!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`,iu)}),Fu.get(d)===1&&(d.addEventListener(`dblclick`,eu,!0),d.addEventListener(`pointerdown`,du,!0),d.addEventListener(`pointerleave`,Eu),d.addEventListener(`pointermove`,Du),d.addEventListener(`pointerout`,Ou),d.addEventListener(`pointerup`,ku,!0)),function(){t=!1,Fu.set(d,Math.max(0,(Fu.get(d)??0)-1)),jl(e),e.separators.forEach(e=>{e.element.removeEventListener(`keydown`,iu)}),Fu.get(d)||(d.removeEventListener(`dblclick`,eu,!0),d.removeEventListener(`pointerdown`,du,!0),d.removeEventListener(`pointerleave`,Eu),d.removeEventListener(`pointermove`,Du),d.removeEventListener(`pointerout`,Ou),d.removeEventListener(`pointerup`,ku,!0)),a.disconnect()}}function Lu(){let[e,t]=(0,z.useState)({});return[e,(0,z.useCallback)(()=>t({}),[])]}function Ru(e){let t=(0,z.useId)();return`${e??t}`}var zu=typeof window<`u`?z.useLayoutEffect:z.useEffect;function Bu(e){let t=(0,z.useRef)(e);return zu(()=>{t.current=e},[e]),(0,z.useCallback)((...e)=>t.current?.(...e),[t])}function Vu(...e){return Bu(t=>{e.forEach(e=>{if(e)switch(typeof e){case`function`:e(t);break;case`object`:e.current=t;break}})})}function Hu(e){let t=(0,z.useRef)({...e});return zu(()=>{for(let n in e)t.current[n]=e[n]},[e]),t.current}var Uu=(0,z.createContext)(null);function Wu(e,t){let n=(0,z.useRef)({getLayout:()=>({}),setLayout:fu});(0,z.useImperativeHandle)(t,()=>n.current,[]),zu(()=>{Object.assign(n.current,nu({groupId:e}))})}function Z({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,z.useRef)({onLayoutChange:{},onLayoutChanged:{}}),h=Bu(e=>{Zl(m.current.onLayoutChange,e)||(m.current.onLayoutChange=e,c?.(e))}),g=Bu(e=>{Zl(m.current.onLayoutChanged,e)||(m.current.onLayoutChanged=e,l?.(e))}),_=Ru(s),v=(0,z.useRef)(null),[y,b]=Lu(),x=(0,z.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],resizeTargetMinimumSize:d,separators:[]}),S=Vu(v,a);Wu(_,o);let C=Bu((e,t)=>{let r=su(),i=Ml(e),a=Nl(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=Hu({defaultLayout:n,disableCursor:r}),T=(0,z.useMemo)(()=>({get disableCursor(){return!!w.disableCursor},getPanelStyles:C,id:_,orientation:u,registerPanel:e=>{let t=x.current;return t.panels=yl(u,[...t.panels,e]),b(),()=>{t.panels=t.panels.filter(t=>t!==e),b()}},registerSeparator:e=>{let t=x.current;return t.separators=yl(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=Ml(_),i=Nl(_);r&&i&&Il(r,{...i,derivedPanelConstraints:vl(r)})},toggleSeparatorDisabled:(e,t)=>{let n=x.current.separators.find(t=>t.id===e);n&&(n.disabled=t)}}),[C,_,b,u,w]),E=(0,z.useRef)(null);return zu(()=>{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=Iu(r),{defaultLayoutDeferred:o,derivedPanelConstraints:s,layout:c}=Nl(r.id,!0);!o&&s.length>0&&(h(c),g(c));let l=Fl(_,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=ql(t.collapsedSize,i[t.panelId]),a=ql(t.collapsedSize,n[t.panelId]);e&&!a&&(r.mutableState.expandedPanelSizes[t.panelId]=n[t.panelId])}}});let o=su().state!==`active`;h(i),o&&g(i)});return()=>{E.current=null,a(),l()}},[i,_,g,h,u,y,w]),(0,z.useEffect)(()=>{let e=E.current;e&&(e.mutableState.defaultLayout=n,e.mutableState.disableCursor=!!r)}),(0,B.jsx)(Uu.Provider,{value:T,children:(0,B.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})})}Z.displayName=`Group`;function Gu(){let e=(0,z.useContext)(Uu);return K(e,`Group Context not found; did you render a Panel or Separator outside of a Group?`),e}function Ku(e,t){let{id:n}=Gu(),r=(0,z.useRef)({collapse:pu,expand:pu,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:pu});(0,z.useImperativeHandle)(t,()=>r.current,[]),zu(()=>{Object.assign(r.current,$l({groupId:n,panelId:e}))})}function qu({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=Ru(c),_=Hu({disabled:a}),v=(0,z.useRef)(null),y=Vu(v,o),{getPanelStyles:b,id:x,orientation:S,registerPanel:C,togglePanelDisabled:w}=Gu(),T=d!==null,E=Bu((e,t,n)=>{d?.(e,c,n)});zu(()=>{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,z.useEffect)(()=>{w(g,!!a)},[a,g,w]),Ku(g,f);let D=(0,z.useSyncExternalStore)(e=>Fl(x,e),()=>JSON.stringify(b(x,g)),()=>JSON.stringify(b(x,g)));return(0,B.jsx)(`div`,{...m,"aria-disabled":a||void 0,"data-panel":!0,"data-testid":g,id:g,ref:y,style:{...Ju,display:`flex`,flexBasis:0,flexShrink:1,overflow:`visible`,...JSON.parse(D)},children:(0,B.jsx)(`div`,{className:t,style:{maxHeight:`100%`,maxWidth:`100%`,flexGrow:1,overflow:`auto`,...p,touchAction:S===`horizontal`?`pan-y`:`pan-x`},children:e})})}qu.displayName=`Panel`;var Ju={minHeight:0,maxHeight:`100%`,height:`auto`,minWidth:0,maxWidth:`100%`,width:`auto`,border:`none`,borderWidth:0,padding:0,margin:0};function Yu({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=Ql({layout:Xl({delta:l-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n],i=Ql({layout:Xl({delta:c-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n]}return{valueControls:n,valueMax:i,valueMin:a,valueNow:o}}function Xu({children:e,className:t,disabled:n,elementRef:r,id:i,style:a,...o}){let s=Ru(i),c=Hu({disabled:n}),[l,u]=(0,z.useState)({}),[d,f]=(0,z.useState)(`inactive`),p=(0,z.useRef)(null),m=Vu(p,r),{disableCursor:h,id:g,orientation:_,registerSeparator:v,toggleSeparatorDisabled:y}=Gu(),b=_===`horizontal`?`vertical`:`horizontal`;zu(()=>{let e=p.current;if(e!==null){let t={disabled:c.disabled,element:e,id:s},n=v(t),r=cu(e=>{f(e.next.state!==`inactive`&&e.next.hitRegions.some(e=>e.separator===t)?e.next.state:`inactive`)}),i=Fl(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(Yu({layout:r,panelConstraints:n,panelId:e.id,panelIndex:t}))}});return()=>{r(),i(),n()}}},[g,s,v,c]),(0,z.useEffect)(()=>{y(s,!!n)},[n,s,y]);let x;return n&&!h&&(x=`not-allowed`),(0,B.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})}Xu.displayName=`Separator`;var Zu=`ppm-custom-order`;function Qu(){try{let e=localStorage.getItem(Zu);return e?JSON.parse(e):null}catch{return null}}function $u(e){try{localStorage.setItem(Zu,JSON.stringify(e))}catch{}}function ed(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 td=Ce((e,t)=>({projects:[],activeProject:null,customOrder:Qu(),loading:!1,error:null,fetchProjects:async()=>{e({loading:!0,error:null});try{e({projects:await R.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 R.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 R.patch(`/api/projects/${encodeURIComponent(e)}/color`,{color:n}),await t().fetchProjects()},moveProject:async(n,r)=>{let{projects:i,customOrder:a}=t(),o=ed(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]],$u(l),await R.patch(`/api/projects/reorder`,{order:l}),e({customOrder:l})},reorderProjects:async t=>{$u(t),e({customOrder:t}),await R.patch(`/api/projects/reorder`,{order:t}).catch(()=>{})},renameProject:async(e,n)=>{await R.patch(`/api/projects/${encodeURIComponent(e)}`,{name:n}),await t().fetchProjects()},deleteProject:async t=>{await R.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&&$u(r),{projects:n,customOrder:r,activeProject:e.activeProject?.name===t?n[0]??null:e.activeProject}})}})),nd=`application/ppm-tab`,rd=!1,id=new Set;function ad(e){rd!==e&&(rd=e,id.forEach(e=>e()))}function od(){return(0,z.useSyncExternalStore)(e=>(id.add(e),()=>id.delete(e)),()=>rd)}function sd(){ad(!1)}function cd(e){let[t,n]=(0,z.useState)(null),r=(0,z.useRef)(null);return{dropIndex:t,handleDragStart:(0,z.useCallback)((t,n)=>{let r={tabId:n,panelId:e};t.dataTransfer.setData(nd,JSON.stringify(r)),t.dataTransfer.effectAllowed=`move`,requestAnimationFrame(()=>ad(!0))},[e]),handleDragOver:(0,z.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,z.useCallback)(e=>{e.dataTransfer.types.includes(`application/ppm-tab`)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},[]),handleDrop:(0,z.useCallback)(i=>{i.preventDefault(),ad(!1);let a=i.dataTransfer.getData(nd);if(a){try{let n=JSON.parse(a),r=F.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,z.useCallback)(()=>{ad(!1),n(null),r.current=null},[])}}var ld=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent),ud=[{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+Shift+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`},...Array.from({length:9},(e,t)=>({id:`switch-project-${t+1}`,label:`Switch to Project ${t+1}`,category:`projects`,defaultKey:`Mod+${t+1}`}))],dd=new Map(ud.map(e=>[e.id,e.defaultKey]));function fd(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`:ld?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 pd(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 md(e){return e.replace(/Mod/g,ld?`⌘`:`Ctrl`).replace(/Shift/g,ld?`⇧`:`Shift`).replace(/Alt/g,ld?`⌥`:`Alt`).replace(/Meta|Cmd/g,`⌘`).replace(/Ctrl/g,ld?`⌃`:`Ctrl`)}function hd(e){if([`Control`,`Meta`,`Alt`,`Shift`].includes(e.key))return null;let t=[];e.ctrlKey&&!e.metaKey&&t.push(ld?`Ctrl`:`Mod`),e.metaKey&&t.push(ld?`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 gd=Ce((e,t)=>({overrides:{},loaded:!1,getBinding:e=>t().overrides[e]??dd.get(e)??``,matchesEvent:(e,n)=>{let r=t().getBinding(n);return r?pd(e,fd(r)):!1},setBinding:(n,r)=>{e({overrides:{...t().overrides,[n]:r}}),R.put(`/api/settings/keybindings`,{[n]:r}).catch(()=>{})},resetBinding:n=>{let r={...t().overrides};delete r[n],e({overrides:r}),R.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&&R.put(`/api/settings/keybindings`,n).catch(()=>{})},loadFromServer:async()=>{try{e({overrides:await R.get(`/api/settings/keybindings`),loaded:!0})}catch{e({loaded:!0})}}}));function _d(e){window.dispatchEvent(new CustomEvent(`open-command-palette`,{detail:e}))}function vd(){let[e,t]=(0,z.useState)(!1),[n,r]=(0,z.useState)(``);return(0,z.useEffect)(()=>{let e=0,{matchesEvent:n}=gd.getState();function i(n){if(n.type===`keyup`&&n.key===`Shift`&&!n.ctrlKey&&!n.metaKey&&!n.altKey){let n=Date.now();if(n-e<400){e=0,r(``),t(!0);return}e=n;return}if(n.type!==`keydown`)return;let{matchesEvent:i}=gd.getState();if(i(n,`save-prevent`)){n.preventDefault();return}if(i(n,`command-palette`)){n.preventDefault(),r(``),t(!0);return}if(i(n,`toggle-sidebar`)){n.preventDefault(),I.getState().toggleSidebar();return}if(i(n,`next-tab`)||i(n,`prev-tab`)){n.preventDefault();let{tabs:e,activeTabId:t,setActiveTab:r}=Se.getState();if(e.length<2)return;let a=e.findIndex(e=>e.id===t);r(e[i(n,`next-tab`)?(a+1)%e.length:(a-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(i(n,e.action)){n.preventDefault();let t=td.getState().activeProject;Se.getState().openTab({type:e.type,title:e.title,projectId:t?.name??null,metadata:t?{projectName:t.name}:void 0,closable:!0});return}if(i(n,`open-settings`)){n.preventDefault();let e=I.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`settings`);return}if(i(n,`open-git-status`)){n.preventDefault();let e=I.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`git`);return}if(i(n,`open-search`)){n.preventDefault();let e=I.getState();e.sidebarCollapsed&&e.toggleSidebar(),e.setSidebarActiveTab(`search`);return}for(let e=1;e<=9;e++)if(i(n,`switch-project-${e}`)){n.preventDefault();let t=td.getState().projects[e-1];t&&(td.getState().setActiveProject(t),Se.getState().switchProject(t.name));return}}function a(e){let n=e.detail;r(typeof n==`string`?n:``),t(!0)}return window.addEventListener(`keydown`,i),window.addEventListener(`keyup`,i),window.addEventListener(`open-command-palette`,a),()=>{window.removeEventListener(`keydown`,i),window.removeEventListener(`keyup`,i),window.removeEventListener(`open-command-palette`,a)}},[]),{paletteOpen:e,paletteInitialQuery:n,closePalette:(0,z.useCallback)(()=>{t(!1),r(``)},[])}}var yd={approval_request:`bg-red-500`,question:`bg-amber-500`,done:`bg-blue-500`},Q={done:0,question:1,approval_request:2};function bd(e){return e&&yd[e]||`bg-red-500`}var xd=Ce()(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 Sd(e){let t=0;for(let[,n]of e.notifications)t+=n.count;return t}function Cd(e){return t=>{let n=null,r=-1;for(let[,i]of t.notifications){if(i.projectName!==e)continue;let t=Q[i.type]??0;t>r&&(r=t,n=i.type)}return n}}function wd(e){let[t,n]=(0,z.useState)(!1),[r,i]=(0,z.useState)(!1),a=(0,z.useCallback)(()=>{let t=e.current;t&&(n(t.scrollLeft>1),i(t.scrollLeft+t.clientWidth<t.scrollWidth-1))},[e]);return(0,z.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,z.useCallback)(()=>{e.current?.scrollBy({left:-150,behavior:`smooth`})},[e]),scrollRight:(0,z.useCallback)(()=>{e.current?.scrollBy({left:150,behavior:`smooth`})},[e])}}var Td={done:0,question:1,approval_request:2};function Ed(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,_=Td[f.type]??0;g<=i&&_>s&&(s=_,o=f.type),h>=a&&_>l&&(l=_,c=f.type)}return{left:o,right:c}}function Dd(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 Od(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 kd(e){let t=Dd(e);return t?Od(t.r,t.g,t.b)<.4:!1}function Ad({tab:e,isActive:t,icon:n,showDropBefore:i,notificationType:a,onSelect:o,onClose:s,onDragStart:c,onDragOver:l,onDragEnd:u,tabRef:d,onRename:f}){let[p,m]=(0,z.useState)(!1),[h,g]=(0,z.useState)(e.title),_=(0,z.useRef)(null);(0,z.useEffect)(()=>{p&&(g(e.title),setTimeout(()=>_.current?.select(),0))},[p]);let v=()=>{m(!1);let t=h.trim();t&&t!==e.title&&f&&f(t)},y=e.metadata?.connectionColor,b=y?{backgroundColor:t?y:`${y}33`,color:t&&kd(y)?`#fff`:void 0}:void 0;return(0,B.jsxs)(`div`,{className:`relative flex items-center`,children:[i&&(0,B.jsx)(`div`,{className:`absolute left-0 top-1 bottom-1 w-0.5 bg-primary rounded-full z-10`}),(0,B.jsxs)(`button`,{ref:d,"data-tab-item":!0,draggable:!p,onClick:o,onAuxClick:t=>{t.button===1&&e.closable&&(t.preventDefault(),s())},onDragStart:c,onDragOver:l,onDragEnd:u,style:b,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`,!b&&(t?`border-primary text-primary`:`border-transparent text-text-secondary hover:text-foreground`),b&&`border-transparent`),children:[(0,B.jsxs)(`span`,{className:`relative`,children:[(0,B.jsx)(n,{className:`size-4`}),a&&!t&&(0,B.jsx)(`span`,{className:L(`absolute -top-1 -right-1 size-2 rounded-full`,bd(a))})]}),p?(0,B.jsx)(`input`,{ref:_,value:h,onChange:e=>g(e.target.value),onBlur:v,onKeyDown:e=>{e.key===`Enter`&&v(),e.key===`Escape`&&m(!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,B.jsx)(`span`,{className:`max-w-[120px] truncate`,onDoubleClick:e=>{f&&(e.stopPropagation(),m(!0))},children:e.title}),e.closable&&!p&&(0,B.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),s()},onKeyDown:e=>{e.key===`Enter`&&(e.stopPropagation(),s())},className:`ml-1 opacity-0 group-hover:opacity-100 rounded-sm hover:bg-surface-elevated p-0.5 transition-opacity`,children:(0,B.jsx)(r,{className:`size-3`})})]})]})}var jd={terminal:nn,chat:It,editor:mt,database:lt,sqlite:lt,postgres:lt,"git-graph":St,"git-diff":ht,settings:Qt};function Md({panelId:e}){td(e=>e.activeProject);let t=(0,z.useRef)(new Map),n=(0,z.useRef)(null),r=(0,z.useRef)(0),i=F(t=>e?t.panels[e]:t.panels[t.focusedPanelId]),a=i?.tabs??[],o=i?.activeTabId??null,s=i?.id??F.getState().focusedPanelId,{dropIndex:c,handleDragStart:l,handleDragOver:u,handleDragOverBar:d,handleDrop:f,handleDragEnd:p}=cd(s),m=xd(e=>e.notifications),{canScrollLeft:h,canScrollRight:g,scrollLeft:_,scrollRight:v}=wd(n),y=Ed(n.current,t.current,a,m);(0,z.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 b=(0,z.useCallback)((e,t)=>{Se.getState().updateTab(e.id,{title:t});let n=e.metadata?.projectName,r=e.metadata?.sessionId;n&&r&&R.patch(`${ke(n)}/chat/sessions/${r}`,{title:t}).catch(()=>{})},[]);function x(e){e.target.closest(`[data-tab-item]`)||_d()}function S(e){e.target.closest(`[data-tab-item]`)||(e.preventDefault(),_d())}return(0,B.jsxs)(`div`,{className:`hidden md:flex items-center h-10 border-b border-border bg-background relative`,onDragOver:d,onDrop:f,onDoubleClick:x,onContextMenu:S,children:[h&&(0,B.jsx)(`button`,{onClick:_,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,B.jsxs)(`span`,{className:`relative`,children:[(0,B.jsx)(et,{className:`size-4 text-text-secondary`}),y.left&&(0,B.jsx)(`span`,{className:L(`absolute -top-1 -right-0.5 size-2 rounded-full`,bd(y.left))})]})}),(0,B.jsx)(`div`,{ref:n,className:`flex-1 overflow-x-auto overflow-y-hidden min-w-0 scrollbar-none`,children:(0,B.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?m.get(r):void 0,a=i&&i.count>0?i.type:null;return(0,B.jsx)(Ad,{tab:e,isActive:e.id===o,icon:jd[e.type],showDropBefore:c===n,notificationType:a,onSelect:()=>{F.getState().setActiveTab(e.id,s),r&&xd.getState().clearForSession(r)},onClose:()=>F.getState().closeTab(e.id,s),onDragStart:t=>l(t,e.id),onDragOver:t=>u(t,e.id,n),onDragEnd:p,tabRef:n=>{n?t.current.set(e.id,n):t.current.delete(e.id)},onRename:e.type===`chat`?t=>b(e,t):void 0},e.id)}),c!==null&&c>=a.length&&(0,B.jsx)(`div`,{className:`w-0.5 h-6 bg-primary rounded-full`}),(0,B.jsx)(`button`,{onClick:()=>_d(),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,B.jsx)(Kt,{className:`size-4`})})]})}),g&&(0,B.jsx)(`button`,{onClick:v,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,B.jsxs)(`span`,{className:`relative`,children:[(0,B.jsx)(tt,{className:`size-4 text-text-secondary`}),y.right&&(0,B.jsx)(`span`,{className:L(`absolute -top-1 -left-0.5 size-2 rounded-full`,bd(y.right))})]})})]})}function Nd({panelId:e}){let[t,n]=(0,z.useState)(null),r=od(),i=F(e=>e.grid),a=F(e=>e.isMobile()),o=xe(i,e),s=!a&&i.length<3,c=o?!a&&(i[o.row]?.length??0)<be(!1):!1,l=(0,z.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&&c?`left`:n>1-i&&c?`right`:r<i&&s?`top`:r>1-i&&s?`bottom`:`center`},[c,s]),u=(0,z.useCallback)(e=>{e.dataTransfer.types.includes(`application/ppm-tab`)&&(e.preventDefault(),e.stopPropagation(),n(l(e)))},[l]),d=(0,z.useCallback)(e=>{e.currentTarget.contains(e.relatedTarget)||n(null)},[]),f=(0,z.useCallback)(t=>{t.preventDefault(),t.stopPropagation();let r=l(t);if(n(null),sd(),!r)return;let i=t.dataTransfer.getData(nd);if(i)try{let t=JSON.parse(i),n=F.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{}},[l,e]);return r?(0,B.jsxs)(`div`,{className:`absolute inset-0 z-20`,onDragOver:u,onDragLeave:d,onDrop:f,children:[t===`left`&&(0,B.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-1/3 bg-primary/10 border-2 border-primary/30 rounded-l-md`}),t===`right`&&(0,B.jsx)(`div`,{className:`absolute inset-y-0 right-0 w-1/3 bg-primary/10 border-2 border-primary/30 rounded-r-md`}),t===`top`&&(0,B.jsx)(`div`,{className:`absolute inset-x-0 top-0 h-1/3 bg-primary/10 border-2 border-primary/30 rounded-t-md`}),t===`bottom`&&(0,B.jsx)(`div`,{className:`absolute inset-x-0 bottom-0 h-1/3 bg-primary/10 border-2 border-primary/30 rounded-b-md`}),t===`center`&&(0,B.jsx)(`div`,{className:`absolute inset-0 bg-primary/5 border-2 border-dashed border-primary/30 rounded-md`})]}):null}var Pd=[{type:`terminal`,label:`Terminal`,icon:nn},{type:`chat`,label:`AI Chat`,icon:It},{type:`git-graph`,label:`Git Graph`,icon:St}],Fd={terminal:(0,z.lazy)(()=>we(()=>import(`./terminal-tab-C3mpYX0x.js`).then(e=>({default:e.TerminalTab})),__vite__mapDeps([0,1,2,3,4,5,6]))),chat:(0,z.lazy)(()=>we(()=>import(`./chat-tab-pRLDQfWP.js`).then(e=>({default:e.ChatTab})),__vite__mapDeps([7,1,2,3,8,4,5,9,10,11,12,13,14]))),editor:(0,z.lazy)(()=>we(()=>import(`./code-editor-Dley_Zvq.js`).then(e=>({default:e.CodeEditor})),__vite__mapDeps([15,1,2,3,16,4,5,13,14,11]))),database:(0,z.lazy)(()=>we(()=>import(`./database-viewer-CrIUjGHq.js`).then(e=>({default:e.DatabaseViewer})),__vite__mapDeps([17,1,18,5,11]))),sqlite:(0,z.lazy)(()=>we(()=>import(`./sqlite-viewer-Bg05Ci6Z.js`).then(e=>({default:e.SqliteViewer})),__vite__mapDeps([19,1,18,5,20,11]))),postgres:(0,z.lazy)(()=>we(()=>import(`./postgres-viewer-BrGX-jcK.js`).then(e=>({default:e.PostgresViewer})),__vite__mapDeps([21,1,18,5,20,11]))),"git-graph":(0,z.lazy)(()=>we(()=>import(`./git-graph-CgSZW5-E.js`).then(e=>({default:e.GitGraph})),__vite__mapDeps([22,1,8,4,5,13,3,11]))),"git-diff":(0,z.lazy)(()=>we(()=>import(`./diff-viewer-TKReiT4F.js`).then(e=>({default:e.DiffViewer})),__vite__mapDeps([23,1,2,3,16,5,12,11]))),settings:(0,z.lazy)(()=>we(()=>import(`./settings-tab-CYIypDSv.js`).then(e=>({default:e.SettingsTab})),__vite__mapDeps([24,1,2,3,8,4,5,9,10,11])))};function Id({panelId:e,projectName:t}){let n=F(t=>t.panels[e]),r=F(t=>t.focusedPanelId===e),i=F(e=>(e.currentProject===t?e.grid:e.projectGrids[t]??[[]]).flat().length);return n?(0,B.jsxs)(`div`,{className:L(`flex flex-col h-full overflow-hidden`,i>1&&`border border-transparent`,i>1&&r&&`border-primary/30`),onMouseDown:()=>{F.getState().focusedPanelId!==e&&F.getState().setFocusedPanel(e)},children:[(0,B.jsx)(Md,{panelId:e}),(0,B.jsxs)(`div`,{className:`flex-1 overflow-hidden relative`,children:[n.tabs.length===0?(0,B.jsx)(Ld,{panelId:e}):n.tabs.map(e=>{let t=Fd[e.type];return(0,B.jsx)(`div`,{className:e.id===n.activeTabId?`h-full w-full`:`hidden`,children:(0,B.jsx)(z.Suspense,{fallback:(0,B.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,B.jsx)(Mt,{className:`size-6 animate-spin text-primary`})}),children:(0,B.jsx)(t,{metadata:e.metadata,tabId:e.id})})},e.id)}),(0,B.jsx)(Nd,{panelId:e})]})]}):null}function Ld({panelId:e}){let t=td(e=>e.activeProject);function n(n){let r=n!==`settings`&&t?{projectName:t.name}:void 0;F.getState().openTab({type:n,title:Pd.find(e=>e.type===n)?.label??n,metadata:r,projectId:t?.name??null,closable:!0},e)}return(0,B.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-4 text-text-secondary`,children:[(0,B.jsx)(`p`,{className:`text-sm`,children:`Open a tab to get started`}),(0,B.jsx)(`div`,{className:`flex flex-col md:flex-row flex-wrap justify-center gap-2`,children:Pd.map(e=>{let t=e.icon;return(0,B.jsxs)(`button`,{onClick:()=>n(e.type),className:`flex items-center gap-2 px-4 py-2 rounded-md border border-border bg-surface hover:bg-surface-elevated text-sm text-foreground transition-colors`,children:[(0,B.jsx)(t,{className:`size-4`}),e.label]},e.type)})})]})}function Rd({projectName:e}){let t=F(t=>t.currentProject===e?t.grid:t.projectGrids[e]??[[]]);return t.flat().length<=1&&t[0]?.[0]?(0,B.jsx)(Id,{panelId:t[0][0],projectName:e}):(0,B.jsx)(Z,{orientation:`vertical`,style:{height:`100%`},children:t.map((n,r)=>(0,B.jsx)(zd,{row:n,rowIdx:r,totalRows:t.length,projectName:e},`row-${r}`))})}function zd({row:e,rowIdx:t,totalRows:n,projectName:r}){return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(qu,{minSize:`15%`,defaultSize:`${Math.round(100/n)}%`,children:e.length===1?(0,B.jsx)(Id,{panelId:e[0],projectName:r}):(0,B.jsx)(Z,{orientation:`horizontal`,children:e.map((t,n)=>(0,B.jsx)(Bd,{panelId:t,colIdx:n,totalCols:e.length,projectName:r},t))})}),t<n-1&&(0,B.jsx)(Vd,{orientation:`horizontal`})]})}function Bd({panelId:e,colIdx:t,totalCols:n,projectName:r}){return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(qu,{minSize:`15%`,defaultSize:`${Math.round(100/n)}%`,children:(0,B.jsx)(Id,{panelId:e,projectName:r})}),t<n-1&&(0,B.jsx)(Vd,{orientation:`vertical`})]})}function Vd({orientation:e}){let t=e===`vertical`;return(0,B.jsx)(Xu,{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,B.jsx)(`div`,{className:`absolute opacity-0 group-hover/handle:opacity-70 transition-opacity text-foreground/50`,children:t?(0,B.jsx)(Tt,{className:`size-3`}):(0,B.jsx)(wt,{className:`size-3`})})})}var Hd=Ce((e,t)=>({tree:[],loading:!1,error:null,expandedPaths:new Set,selectedFiles:[],fetchTree:async t=>{e({loading:!0,error:null});try{e({tree:await R.get(`${ke(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 Ud({className:e,children:t,...n}){return(0,B.jsxs)(qs,{"data-slot":`scroll-area`,className:L(`relative`,e),...n,children:[(0,B.jsx)(Js,{"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,B.jsx)(Wd,{}),(0,B.jsx)(Ys,{})]})}function Wd({className:e,orientation:t=`vertical`,...n}){return(0,B.jsx)(xs,{"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,B.jsx)(Ms,{"data-slot":`scroll-area-thumb`,className:`relative flex-1 rounded-full bg-border`})})}function Gd({...e}){return(0,B.jsx)(bo,{"data-slot":`context-menu`,...e})}function Kd({...e}){return(0,B.jsx)(xo,{"data-slot":`context-menu-trigger`,...e})}function qd({className:e,...t}){return(0,B.jsx)(So,{children:(0,B.jsx)(Co,{"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 Jd({className:e,inset:t,variant:n=`default`,...r}){return(0,B.jsx)(wo,{"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 Yd({className:e,...t}){return(0,B.jsx)(To,{"data-slot":`context-menu-separator`,className:L(`-mx-1 my-1 h-px bg-border`,e),...t})}var Xd=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,Zd=Ee,Qd=(e,t)=>n=>{if(t?.variants==null)return Zd(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=Xd(t)||Xd(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 Zd(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)},$d=Qd(`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,B.jsx)(r?f:`button`,{"data-slot":`button`,"data-variant":t,"data-size":n,className:L($d({variant:t,size:n,className:e})),...i})}function ef({...e}){return(0,B.jsx)(Or,{"data-slot":`dialog`,...e})}function tf({...e}){return(0,B.jsx)(kr,{"data-slot":`dialog-portal`,...e})}function nf({className:e,...t}){return(0,B.jsx)(Ar,{"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 rf({className:e,children:t,showCloseButton:n=!0,...i}){return(0,B.jsxs)(tf,{"data-slot":`dialog-portal`,children:[(0,B.jsx)(nf,{}),(0,B.jsxs)(jr,{"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),...i,children:[t,n&&(0,B.jsxs)(Pr,{"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,B.jsx)(r,{}),(0,B.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function af({className:e,...t}){return(0,B.jsx)(`div`,{"data-slot":`dialog-header`,className:L(`flex flex-col gap-2 text-center sm:text-left`,e),...t})}function of({className:e,showCloseButton:t=!1,children:n,...r}){return(0,B.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,B.jsx)(Pr,{asChild:!0,children:(0,B.jsx)($,{variant:`outline`,children:`Close`})})]})}function sf({className:e,...t}){return(0,B.jsx)(Mr,{"data-slot":`dialog-title`,className:L(`text-lg leading-none font-semibold`,e),...t})}function cf({className:e,...t}){return(0,B.jsx)(Nr,{"data-slot":`dialog-description`,className:L(`text-sm text-muted-foreground`,e),...t})}function lf({action:e,node:t,projectName:n,onClose:r,onRefresh:i}){let[a,o]=(0,z.useState)(``),[s,c]=(0,z.useState)(!1),[l,u]=(0,z.useState)(null),d=(0,z.useRef)(null);(0,z.useEffect)(()=>{o(e===`rename`?t.name:``)},[e,t.name]),(0,z.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 R.post(`${ke(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 R.post(`${ke(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 R.del(`${ke(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,B.jsx)(ef,{open:!0,onOpenChange:e=>!e&&r(),children:(0,B.jsxs)(rf,{children:[(0,B.jsxs)(af,{children:[(0,B.jsxs)(sf,{children:[`Delete `,t.type===`directory`?`Folder`:`File`]}),(0,B.jsxs)(cf,{children:[`Are you sure you want to delete`,` `,(0,B.jsx)(`span`,{className:`font-mono font-semibold`,children:t.name}),`?`,t.type===`directory`&&` This will delete all contents.`]})]}),l&&(0,B.jsx)(`p`,{className:`text-sm text-error`,children:l}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{variant:`outline`,onClick:r,disabled:s,children:`Cancel`}),(0,B.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,B.jsx)(ef,{open:!0,onOpenChange:e=>!e&&r(),children:(0,B.jsxs)(rf,{children:[(0,B.jsxs)(af,{children:[(0,B.jsx)(sf,{children:g}),(0,B.jsx)(cf,{children:e===`rename`?`Rename "${t.name}" to:`:`Create in ${t.type===`directory`?t.path||`/`:t.path.split(`/`).slice(0,-1).join(`/`)||`/`}`})]}),(0,B.jsx)(A,{ref:d,value:a,onChange:e=>o(e.target.value),onKeyDown:h,placeholder:_,disabled:s}),l&&(0,B.jsx)(`p`,{className:`text-sm text-error`,children:l}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{variant:`outline`,onClick:r,disabled:s,children:`Cancel`}),(0,B.jsx)($,{onClick:()=>{e===`new-file`?f(`file`):e===`new-folder`?f(`directory`):p()},disabled:s||!a.trim(),children:s?`Saving...`:e===`rename`?`Rename`:`Create`})]})]})})}var uf={ts:mt,tsx:mt,js:mt,jsx:mt,py:mt,rs:mt,go:mt,json:pt,md:gt,txt:gt,yaml:_t,yml:_t,html:mt,css:mt,scss:mt};function df(e){return uf[e.split(`.`).pop()?.toLowerCase()??``]??vt}function ff({node:e,depth:t,projectName:n,onAction:r,onFileOpen:i}){let{expandedPaths:a,toggleExpand:o,selectedFiles:c,toggleFileSelect:l}=Hd(),u=Se(e=>e.openTab),d=a.has(e.path),f=e.type===`directory`,p=c.includes(e.path),m=e.ignored===!0;function h(t){if(f){o(e.path);return}if(t.metaKey||t.ctrlKey){l(e.path);return}let r=e.name.split(`.`).pop()?.toLowerCase()??``;u({type:r===`db`||r===`sqlite`||r===`sqlite3`?`sqlite`:`editor`,title:e.name,metadata:{filePath:e.path,projectName:n},projectId:n,closable:!0}),i?.()}let g=f?d?yt:xt:df(e.name),_=e.children?[...e.children].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1):[];return(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(Gd,{children:[(0,B.jsx)(Kd,{asChild:!0,children:(0,B.jsxs)(`button`,{onClick:h,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`,m&&`opacity-40`,p&&`bg-primary/15 ring-1 ring-primary/40`),style:{paddingLeft:`${t*16+8}px`},children:[f?d?(0,B.jsx)(s,{className:`size-3.5 shrink-0 text-text-subtle`}):(0,B.jsx)(tt,{className:`size-3.5 shrink-0 text-text-subtle`}):(0,B.jsx)(`span`,{className:`w-3.5 shrink-0`}),(0,B.jsx)(g,{className:L(`size-4 shrink-0`,f?`text-primary`:`text-text-secondary`)}),(0,B.jsx)(`span`,{className:`truncate`,children:e.name})]})}),(0,B.jsxs)(qd,{children:[f&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Jd,{onClick:()=>r(`new-file`,e),children:`New File`}),(0,B.jsx)(Jd,{onClick:()=>r(`new-folder`,e),children:`New Folder`}),(0,B.jsx)(Yd,{})]}),(0,B.jsx)(Jd,{onClick:()=>r(`rename`,e),children:`Rename`}),(0,B.jsx)(Jd,{variant:`destructive`,onClick:()=>r(`delete`,e),children:`Delete`}),(0,B.jsx)(Yd,{}),(0,B.jsx)(Jd,{onClick:()=>r(`copy-path`,e),children:`Copy Path`}),!f&&c.length===2&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Yd,{}),(0,B.jsx)(Jd,{onClick:()=>r(`compare-selected`,e),children:`Compare Selected`})]})]})]}),f&&d&&_.map(e=>(0,B.jsx)(ff,{node:e,depth:t+1,projectName:n,onAction:r,onFileOpen:i},e.path))]})}function pf({onFileOpen:e}={}){let{tree:t,loading:n,error:r,fetchTree:i,reset:a,selectedFiles:o,clearSelection:s}=Hd(),c=td(e=>e.activeProject),l=Se(e=>e.openTab),[u,d]=(0,z.useState)(null),f=(0,z.useCallback)(()=>{c&&i(c.name)},[c,i]);(0,z.useEffect)(()=>{c&&(a(),f())},[c?.name]),(0,z.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===`compare-selected`&&o.length===2){let e=o[0],t=o[1];l({type:`git-diff`,title:`Compare ${De(e)} vs ${De(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,B.jsx)(`div`,{className:`p-3 text-xs text-text-subtle`,children:`Select a project to browse files.`});if(n&&t.length===0)return(0,B.jsxs)(`div`,{className:`flex items-center gap-2 p-3 text-xs text-text-secondary`,children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin`}),`Loading files...`]});if(r)return(0,B.jsxs)(`div`,{className:`p-3 text-xs text-error`,children:[r,(0,B.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,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Ud,{className:`flex-1`,children:(0,B.jsxs)(`div`,{className:`py-1`,children:[m.map(t=>(0,B.jsx)(ff,{node:t,depth:0,projectName:c.name,onAction:p,onFileOpen:e},t.path)),m.length===0&&(0,B.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:`Empty project.`})]})}),u&&(0,B.jsx)(lf,{action:u.action,node:u.node,projectName:c.name,onClose:()=>d(null),onRefresh:f})]})}function mf({...e}){return(0,B.jsx)(os,{"data-slot":`dropdown-menu`,...e})}function hf({...e}){return(0,B.jsx)(ss,{"data-slot":`dropdown-menu-trigger`,...e})}function gf({className:e,sideOffset:t=4,...n}){return(0,B.jsx)(cs,{children:(0,B.jsx)(ls,{"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 _f({className:e,inset:t,variant:n=`default`,...r}){return(0,B.jsx)(us,{"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})}var vf={M:`text-yellow-500`,A:`text-green-500`,D:`text-red-500`,R:`text-blue-500`,C:`text-purple-500`,"?":`text-gray-400`};function yf(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 bf(e){let t=[];e.file&&t.push(e.file);for(let n of e.children)t.push(...bf(n));return t}function xf({metadata:e,tabId:t,onNavigate:n}){let r=e?.projectName,[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!0),[c,l]=(0,z.useState)(null),[u,d]=(0,z.useState)(``),[f,p]=(0,z.useState)(!1),[m,h]=(0,z.useState)(null),{openTab:g}=Se(),_=I(e=>e.gitStatusViewMode),v=I(e=>e.setGitStatusViewMode),y=(0,z.useCallback)(async()=>{if(r)try{s(!0),a(await R.get(`${ke(r)}/git/status`)),l(null)}catch(e){l(e instanceof Error?e.message:`Failed to fetch status`)}finally{s(!1)}},[r]);(0,z.useEffect)(()=>{y();let e=setInterval(y,5e3);return()=>clearInterval(e)},[y]);let b=async e=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/stage`,{files:e}),await y()}catch(e){l(e instanceof Error?e.message:`Stage failed`)}finally{p(!1)}}},x=async e=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/unstage`,{files:e}),await y()}catch(e){l(e instanceof Error?e.message:`Unstage failed`)}finally{p(!1)}}},S=async e=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/discard`,{files:e}),await y()}catch(e){l(e instanceof Error?e.message:`Discard failed`)}finally{p(!1)}}},C=async()=>{m&&(await S(m.files),h(null))},w=async()=>{if(!(!r||!u.trim()||!i?.staged.length)){p(!0);try{await R.post(`${ke(r)}/git/commit`,{message:u.trim()}),d(``),await y()}catch(e){l(e instanceof Error?e.message:`Commit failed`)}finally{p(!1)}}},T=async()=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/push`,{}),await y()}catch(e){l(e instanceof Error?e.message:`Push failed`)}finally{p(!1)}}},E=async()=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/pull`,{}),await y()}catch(e){l(e instanceof Error?e.message:`Pull failed`)}finally{p(!1)}}},D=e=>{g({type:`git-diff`,title:De(e.path),closable:!0,metadata:{projectName:r,filePath:e.path},projectId:r??null}),n?.()},O=e=>{g({type:`editor`,title:De(e.path),closable:!0,metadata:{projectName:r,filePath:e.path},projectId:r??null}),n?.()},k=(0,z.useMemo)(()=>[...i?.unstaged??[],...i?.untracked.map(e=>({path:e,status:`?`}))??[]],[i]);return r?o&&!i?(0,B.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,B.jsx)(Mt,{className:`size-5 animate-spin`}),(0,B.jsx)(`span`,{className:`text-sm`,children:`Loading git status...`})]}):c&&!i?(0,B.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-destructive text-sm`,children:[(0,B.jsx)(`p`,{children:c}),(0,B.jsx)($,{variant:`outline`,size:`sm`,onClick:y,children:`Retry`})]}):(0,B.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b shrink-0`,children:[(0,B.jsx)(`span`,{className:`text-sm font-medium`,children:i?.current?`On: ${i.current}`:`Git Status`}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,B.jsx)($,{variant:_===`flat`?`secondary`:`ghost`,size:`icon-xs`,onClick:()=>v(`flat`),title:`Flat view`,children:(0,B.jsx)(jt,{className:`size-3.5`})}),(0,B.jsx)($,{variant:_===`tree`?`secondary`:`ghost`,size:`icon-xs`,onClick:()=>v(`tree`),title:`Tree view`,children:(0,B.jsx)(bt,{className:`size-3.5`})}),(0,B.jsx)($,{variant:`ghost`,size:`icon-xs`,onClick:y,disabled:f,children:(0,B.jsx)(qt,{className:o?`animate-spin`:``})})]})]}),c&&(0,B.jsx)(`div`,{className:`px-3 py-1.5 text-xs text-destructive bg-destructive/10 shrink-0`,children:c}),(0,B.jsx)(Ud,{className:`flex-1 overflow-hidden`,children:(0,B.jsxs)(`div`,{className:`p-1.5 space-y-2 overflow-hidden`,children:[(0,B.jsx)(Cf,{title:`Staged Changes`,count:i?.staged.length??0,files:i?.staged??[],viewMode:_,actionIcon:(0,B.jsx)(Lt,{className:`size-3`}),actionAllIcon:(0,B.jsx)(Lt,{className:`size-3`}),actionTitle:`Unstage`,onAction:e=>x([e.path]),onActionAll:i?.staged.length?()=>x(i.staged.map(e=>e.path)):void 0,actionAllLabel:`Unstage All`,onFolderAction:e=>x(e.map(e=>e.path)),onClickFile:D,onOpenFile:O,disabled:f}),(0,B.jsx)(Cf,{title:`Changes`,count:k.length,files:k,viewMode:_,actionIcon:(0,B.jsx)(Kt,{className:`size-3`}),actionAllIcon:(0,B.jsx)(Kt,{className:`size-3`}),actionTitle:`Stage`,onAction:e=>b([e.path]),onActionAll:k.length?()=>b(k.map(e=>e.path)):void 0,actionAllLabel:`Stage All`,onFolderAction:e=>b(e.map(e=>e.path)),onClickFile:D,onOpenFile:O,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,B.jsxs)(`div`,{className:`border-t p-2 space-y-2 shrink-0`,children:[(0,B.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)&&w()}}),(0,B.jsx)($,{size:`sm`,className:`w-full`,disabled:f||!u.trim()||!i?.staged.length,onClick:w,children:f?(0,B.jsx)(Mt,{className:`size-3 animate-spin`}):`Commit (${i?.staged.length??0})`}),(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsxs)($,{variant:`outline`,size:`sm`,className:`flex-1`,disabled:f,onClick:T,children:[(0,B.jsx)(Ye,{className:`size-3`}),`Push`]}),(0,B.jsxs)($,{variant:`outline`,size:`sm`,className:`flex-1`,disabled:f,onClick:E,children:[(0,B.jsx)(Ke,{className:`size-3`}),`Pull`]})]})]}),(0,B.jsx)(ef,{open:!!m,onOpenChange:e=>!e&&h(null),children:(0,B.jsxs)(rf,{showCloseButton:!1,children:[(0,B.jsxs)(af,{children:[(0,B.jsx)(sf,{children:`Discard Changes`}),(0,B.jsxs)(cf,{children:[`Are you sure you want to discard all changes to`,` `,(0,B.jsx)(`code`,{className:`px-1 py-0.5 rounded bg-muted text-sm font-mono`,children:m?.label}),`? This action cannot be undone.`]})]}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{variant:`outline`,onClick:()=>h(null),children:`Cancel`}),(0,B.jsx)($,{variant:`destructive`,onClick:C,disabled:f,children:f?(0,B.jsx)(Mt,{className:`size-3 animate-spin`}):`Discard`})]})]})})]}):(0,B.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`})}function Sf({showRevert:e,onRevert:t,onAction:n,onOpenFile:r,actionIcon:i,actionTitle:a,disabled:o}){return(0,B.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 opacity-0 group-hover:opacity-100 transition-opacity`,children:[r&&(0,B.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,B.jsx)(gt,{className:`size-3`})}),e&&t&&(0,B.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,B.jsx)(on,{className:`size-3`})}),(0,B.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 Cf({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,B.jsxs)(`div`,{children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between mb-0.5`,children:[(0,B.jsxs)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase`,children:[e,` (`,t,`)`]}),c&&t>0&&(0,B.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,B.jsx)(`p`,{className:`text-xs text-muted-foreground px-1`,children:`No changes`}):r===`flat`?(0,B.jsx)(`div`,{className:`w-full overflow-hidden`,children:n.map(e=>(0,B.jsx)(Tf,{file:e,actionIcon:i,actionTitle:o,onAction:s,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h},e.path))}):(0,B.jsx)(Ef,{files:n,actionIcon:i,actionTitle:o,onAction:s,onFolderAction:u,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h,onFolderRevert:g})]})}function wf(e,t,n=400){let r=(0,z.useRef)(null),i=(0,z.useRef)(!1),a=(0,z.useRef)(!1),o=(0,z.useCallback)(()=>{r.current&&=(clearTimeout(r.current),null)},[]);return{onTouchStart:(0,z.useCallback)(t=>{i.current=!1,a.current=!1,r.current=setTimeout(()=>{a.current=!0,e()},n)},[e,n]),onTouchMove:(0,z.useCallback)(()=>{i.current=!0,o()},[o]),onTouchEnd:(0,z.useCallback)(e=>{o(),!i.current&&!a.current&&(e.preventDefault(),t())},[o,t])}}function Tf({file:e,actionIcon:t,actionTitle:n,onAction:r,onClickFile:i,onOpenFile:a,disabled:o,showRevert:s,onRevert:c,displayName:l}){let[u,d]=(0,z.useState)(!1),f=wf((0,z.useCallback)(()=>d(!0),[]),(0,z.useCallback)(()=>i(e),[i,e])),p=(0,B.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,B.jsx)(`span`,{className:`text-xs font-mono w-4 text-center shrink-0 ${vf[e.status]??``}`,children:e.status}),(0,B.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,B.jsx)(`span`,{className:`md:hidden flex-1 text-left text-xs font-mono truncate min-w-0 select-none`,children:l??e.path}),(0,B.jsx)(Sf,{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,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`hidden md:block`,children:p}),(0,B.jsx)(`div`,{className:`md:hidden select-none`,...f,children:(0,B.jsxs)(mf,{open:u,onOpenChange:d,children:[(0,B.jsx)(hf,{asChild:!0,children:p}),(0,B.jsxs)(gf,{align:`start`,className:`min-w-40`,children:[(0,B.jsx)(_f,{onClick:()=>i(e),children:`View Diff`}),a&&(0,B.jsx)(_f,{onClick:()=>a(e),children:`Open File`}),(0,B.jsx)(_f,{onClick:()=>r(e),disabled:o,children:n}),s&&c&&(0,B.jsx)(_f,{className:`text-destructive focus:text-destructive`,onClick:()=>c(e),disabled:o,children:`Discard Changes`})]})]})})]})}function Ef({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,z.useMemo)(()=>yf(e),[e]);return(0,B.jsx)(`div`,{children:d.map((e,f)=>(0,B.jsx)(Df,{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 Df({node:e,depth:t,isLast:n,actionIcon:r,actionTitle:i,onAction:a,onFolderAction:o,onClickFile:c,onOpenFile:l,disabled:u,showRevert:d,onRevert:f,onFolderRevert:p}){let[m,h]=(0,z.useState)(!0),g=e.children.length>0&&!e.file,_=t*12-6,v=`absolute border-dashed border-border`;if(e.file)return(0,B.jsxs)(`div`,{className:`relative`,style:{paddingLeft:t*12},children:[t>0&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`${v} border-l`,style:{left:_,top:0,bottom:n?`50%`:0}}),(0,B.jsx)(`div`,{className:`${v} border-t`,style:{left:_,top:`50%`,width:6}})]}),(0,B.jsx)(Tf,{file:e.file,displayName:e.name,actionIcon:r,actionTitle:i,onAction:a,onClickFile:c,onOpenFile:l,disabled:u,showRevert:d,onRevert:f})]});if(g){let g=bf(e);return(0,B.jsxs)(`div`,{className:`relative`,children:[t>0&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`${v} border-l`,style:{left:_,top:0,...n?{height:13}:{bottom:0}}}),(0,B.jsx)(`div`,{className:`${v} border-t`,style:{left:_,top:13,width:8}})]}),(()=>{let n=(0,B.jsxs)(`div`,{className:`group relative flex items-center hover:bg-muted/50 rounded py-0.5`,style:{paddingLeft:t*12+2},children:[(0,B.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 flex-1 min-w-0 text-xs font-mono text-muted-foreground`,onClick:()=>h(!m),children:[m?(0,B.jsx)(s,{className:`size-3.5 shrink-0`}):(0,B.jsx)(tt,{className:`size-3.5 shrink-0`}),(0,B.jsx)(`span`,{className:`truncate font-semibold`,children:e.name}),(0,B.jsxs)(`span`,{className:`text-[10px] opacity-60 shrink-0`,children:[`(`,g.length,`)`]})]}),(0,B.jsx)(Sf,{showRevert:d,onRevert:p?()=>p(g,e.fullPath):void 0,onAction:()=>o?.(g),actionIcon:r,actionTitle:`${i} ${e.name}/`,disabled:u})]});return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`hidden md:block`,children:n}),(0,B.jsx)(`div`,{className:`md:hidden`,children:(0,B.jsxs)(mf,{children:[(0,B.jsx)(hf,{asChild:!0,children:n}),(0,B.jsxs)(gf,{align:`start`,className:`min-w-40`,children:[(0,B.jsxs)(_f,{onClick:()=>o?.(g),disabled:u,children:[i,` `,e.name,`/`]}),p&&(0,B.jsx)(_f,{className:`text-destructive focus:text-destructive`,onClick:()=>p(g,e.fullPath),disabled:u,children:`Discard Changes`})]})]})})]})})(),m&&(0,B.jsx)(`div`,{children:e.children.map((n,s)=>(0,B.jsx)(Df,{node:n,depth:t+1,isLast:s===e.children.length-1,actionIcon:r,actionTitle:i,onAction:a,onFolderAction:o,onClickFile:c,onOpenFile:l,disabled:u,showRevert:d,onRevert:f,onFolderRevert:p},n.fullPath))})]})}return null}function Of({className:e,orientation:t=`horizontal`,...n}){return(0,B.jsx)(_c,{"data-slot":`tabs`,"data-orientation":t,orientation:t,className:L(`group/tabs flex gap-2 data-[orientation=horizontal]:flex-col`,e),...n})}var kf=Qd(`group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none`,{variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`}},defaultVariants:{variant:`default`}});function Af({className:e,variant:t=`default`,...n}){return(0,B.jsx)(vc,{"data-slot":`tabs-list`,"data-variant":t,className:L(kf({variant:t}),e),...n})}function jf({className:e,...t}){return(0,B.jsx)(yc,{"data-slot":`tabs-trigger`,className:L(`relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent`,`data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground`,`after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100`,e),...t})}function Mf({className:e,...t}){return(0,B.jsx)(bc,{"data-slot":`tabs-content`,className:L(`flex-1 outline-none`,e),...t})}function Nf({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,B.jsx)(tc,{"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})}var Pf=[{key:`general`,label:`General`},{key:`tabs`,label:`Tabs`},{key:`projects`,label:`Projects`}],Ff=[`Ctrl+T`,`Ctrl+W`,`Ctrl+N`,`Ctrl+Tab`,`Ctrl+L`,`Ctrl+H`,`Ctrl+J`,`F5`,`Ctrl+R`,`Ctrl+Shift+I`,`Ctrl+Shift+J`];function If({actionId:e,combo:t,locked:n}){let[r,i]=(0,z.useState)(!1),a=gd(e=>e.setBinding),o=(0,z.useRef)(null),s=(0,z.useCallback)(t=>{if(t.preventDefault(),t.stopPropagation(),t.key===`Escape`){i(!1);return}let n=hd(t);n&&(a(e,n),i(!1))},[e,a]);return(0,z.useEffect)(()=>{if(r)return document.addEventListener(`keydown`,s,!0),()=>document.removeEventListener(`keydown`,s,!0)},[r,s]),(0,z.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,B.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,B.jsx)(Nt,{className:`size-2.5`}),md(t)]}):r?(0,B.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,B.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:md(t)})}function Lf(){let{getBinding:e,resetBinding:t,resetAll:n,overrides:r}=gd();return(0,B.jsxs)(`div`,{className:`space-y-3`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-text-secondary`,children:`Keyboard Shortcuts`}),Object.keys(r).length>0&&(0,B.jsxs)($,{variant:`ghost`,size:`sm`,className:`h-6 text-[10px] text-muted-foreground`,onClick:n,children:[(0,B.jsx)(S,{className:`size-3 mr-1`}),`Reset all`]})]}),(0,B.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,B.jsx)(an,{className:`size-3.5 text-amber-500 shrink-0 mt-0.5`}),(0,B.jsxs)(`p`,{className:`text-[10px] text-muted-foreground leading-relaxed`,children:[`Some shortcuts (`,Ff.slice(0,4).join(`, `),`...) are reserved by the browser and cannot be overridden.`]})]}),Pf.map(n=>{let i=ud.filter(e=>e.category===n.key);return i.length===0?null:(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:n.label}),(0,B.jsx)(`div`,{className:`space-y-0.5`,children:i.map(n=>{let i=e(n.id),a=n.id in r;return(0,B.jsxs)(`div`,{className:`flex items-center justify-between py-1 px-1 rounded hover:bg-surface-elevated/50 transition-colors`,children:[(0,B.jsxs)(`div`,{className:`flex flex-col min-w-0`,children:[(0,B.jsx)(`span`,{className:`text-xs text-foreground`,children:n.label}),n.note&&(0,B.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:n.note})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0 ml-2`,children:[(0,B.jsx)(If,{actionId:n.id,combo:i,locked:n.locked}),a&&!n.locked&&(0,B.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,B.jsx)(S,{className:`size-3`})})]})]},n.id)})})]},n.key)})]})}function Rf(){let[e,t]=(0,z.useState)({bot_token:``,chat_id:``}),[n,r]=(0,z.useState)(``),[i,a]=(0,z.useState)(``),[o,s]=(0,z.useState)(!1),[c,l]=(0,z.useState)(!1),[u,d]=(0,z.useState)(null);(0,z.useEffect)(()=>{R.get(`/api/settings/telegram`).then(e=>{t(e),a(e.chat_id)}).catch(()=>{})},[]);let f=async()=>{s(!0),d(null);try{let e={chat_id:i};n&&(e.bot_token=n),t(await R.put(`/api/settings/telegram`,e)),r(``),d({type:`ok`,msg:`Saved`})}catch(e){d({type:`err`,msg:e.message})}finally{s(!1)}},p=async()=>{l(!0),d(null);try{await R.post(`/api/settings/telegram/test`,{...n?{bot_token:n}:{},...i?{chat_id:i}:{}}),d({type:`ok`,msg:`Test message sent!`})}catch(e){d({type:`err`,msg:e.message})}finally{l(!1)}},m=!!e.bot_token;return(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(`label`,{className:`text-[11px] text-text-subtle`,children:`Bot Token`}),(0,B.jsx)(A,{type:`password`,placeholder:m?`•••••• (saved)`:`123456:ABC-DEF...`,value:n,onChange:e=>r(e.target.value),className:`h-7 text-xs`})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(`label`,{className:`text-[11px] text-text-subtle`,children:`Chat ID`}),(0,B.jsx)(A,{placeholder:`-1001234567890`,value:i,onChange:e=>a(e.target.value),className:`h-7 text-xs`}),(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle`,children:`Personal or group chat ID`})]}),(0,B.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,B.jsx)($,{variant:`default`,size:`sm`,className:`h-7 text-xs flex-1`,disabled:o||!n&&!i,onClick:f,children:o?`...`:`Save`}),(0,B.jsxs)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs gap-1`,disabled:c||!m,onClick:p,children:[(0,B.jsx)(Zt,{className:`size-3`}),c?`...`:`Test`]})]}),u&&(0,B.jsx)(`p`,{className:`text-[11px] ${u.type===`ok`?`text-green-600 dark:text-green-400`:`text-destructive`}`,children:u.msg})]})}var zf=Qd(`inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2`,{variants:{variant:{default:`border-transparent bg-primary text-primary-foreground shadow`,secondary:`border-transparent bg-secondary text-secondary-foreground`,destructive:`border-transparent bg-destructive text-destructive-foreground shadow`,outline:`text-foreground`}},defaultVariants:{variant:`default`}});function Bf({className:e,variant:t,...n}){return(0,B.jsx)(`div`,{className:L(zf({variant:t}),e),...n})}function Vf(e){return e.startsWith(`sk-ant-oat`)?`OAuth token (Claude Max/Pro)`:e.startsWith(`sk-ant-api`)?`API key`:`Unknown format`}function Hf(e){return e>=90?`text-red-500`:e>=70?`text-amber-500`:`text-green-500`}function Uf({profile:e,open:t,onClose:n}){let r=e.account,i=e.organization;return(0,B.jsx)(ef,{open:t,onOpenChange:e=>!e&&n(),children:(0,B.jsxs)(rf,{className:`sm:max-w-md`,children:[(0,B.jsx)(af,{children:(0,B.jsx)(sf,{className:`text-sm`,children:`Account Profile`})}),(0,B.jsxs)(`div`,{className:`space-y-3 text-xs`,children:[r&&(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium text-muted-foreground`,children:`User`}),(0,B.jsxs)(`div`,{className:`grid grid-cols-[80px_1fr] gap-1 text-xs`,children:[r.display_name&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Name`}),(0,B.jsx)(`span`,{children:r.display_name})]}),r.email&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Email`}),(0,B.jsx)(`span`,{children:r.email})]}),r.uuid&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`UUID`}),(0,B.jsx)(`span`,{className:`font-mono text-[10px] break-all`,children:r.uuid})]})]})]}),i&&(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Organization`}),(0,B.jsxs)(`div`,{className:`grid grid-cols-[80px_1fr] gap-1 text-xs`,children:[i.name&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Name`}),(0,B.jsx)(`span`,{children:i.name})]}),i.organization_type&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Type`}),(0,B.jsx)(`span`,{children:i.organization_type})]}),i.rate_limit_tier&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Tier`}),(0,B.jsx)(`span`,{children:i.rate_limit_tier})]}),i.subscription_status&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Status`}),(0,B.jsx)(`span`,{children:i.subscription_status})]}),i.has_extra_usage_enabled!==void 0&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Extra usage`}),(0,B.jsx)(`span`,{children:i.has_extra_usage_enabled?`Enabled`:`Disabled`})]})]})]}),!r&&!i&&(0,B.jsx)(`p`,{className:`text-muted-foreground`,children:`No profile data available.`})]}),(0,B.jsx)(of,{children:(0,B.jsx)($,{size:`sm`,variant:`outline`,className:`text-xs h-7`,onClick:n,children:`Close`})})]})})}function Wf(){let[e,t]=(0,z.useState)([]),[n,i]=(0,z.useState)(null),[a,o]=(0,z.useState)(null),[s,c]=(0,z.useState)(new Map),[l,u]=(0,z.useState)(!0),[d,f]=(0,z.useState)(null),p=(0,z.useRef)(null);function m(e){p.current&&clearTimeout(p.current),f(e),p.current=setTimeout(()=>f(null),4e3)}let[h,g]=(0,z.useState)(!1),[_,v]=(0,z.useState)(``),[y,b]=(0,z.useState)(``),[x,S]=(0,z.useState)(!1),[C,w]=(0,z.useState)(null),[T,E]=(0,z.useState)(null),[D,O]=(0,z.useState)(null),[k,ee]=(0,z.useState)(``),[te,ne]=(0,z.useState)(!1),[re,j]=(0,z.useState)(`idle`),[M,ie]=(0,z.useState)(!1),[N,P]=(0,z.useState)(``),[ce,ue]=(0,z.useState)(``),[de,fe]=(0,z.useState)(new Set),[ve,ye]=(0,z.useState)(!1),[be,F]=(0,z.useState)(!1),[xe,Se]=(0,z.useState)(``),[Ce,I]=(0,z.useState)(``),[we,Te]=(0,z.useState)(!1),[Ee,L]=(0,z.useState)(null);(0,z.useEffect)(()=>{De()},[]);async function De(){u(!0);let[e,n,r,a]=await Promise.allSettled([ze(),Le(),je(),Fe()]);e.status===`fulfilled`&&t(e.value),n.status===`fulfilled`&&o(n.value),r.status===`fulfilled`&&i(r.value?.id??null),a.status===`fulfilled`&&c(new Map(a.value.map(e=>[e.accountId,e.usage]))),u(!1)}async function Oe(){if(_.trim()){S(!0),w(null);try{await Be({apiKey:_.trim(),label:y.trim()||void 0}),m({type:`success`,text:`Account added successfully!`}),g(!1),v(``),b(``),w(null),De()}catch(e){w(e.message)}S(!1)}}async function ke(){ne(!0),w(null);try{let{url:e,state:t}=await Ve();O(t),j(`waiting`),window.open(e,`_blank`)}catch(e){w(e.message)}ne(!1)}async function R(){if(!(!k.trim()||!D)){ne(!0),w(null);try{let e=k.trim();e.includes(`#`)&&(e=e.split(`#`)[0]??e),await Pe(e,D),m({type:`success`,text:`Account connected via OAuth!`}),g(!1),He(),De()}catch(e){w(e.message)}ne(!1)}}function He(){O(null),ee(``),j(`idle`),w(null)}async function Ue(e,t){await Ne(e,{status:t===`disabled`?`active`:`disabled`}),De()}async function We(e,t){confirm(`Remove account ${t??e}?`)&&(await Re(e),De())}function Ge(e){if(!e)return`Never`;let t=Math.floor(Date.now()/1e3-e);return t<60?`Just now`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function Ke(e){if(!e)return``;let t=e-Math.floor(Date.now()/1e3);return t<=0?``:t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}function qe(e){if(e.status===`active`||e.status===`disabled`)return null;let t=Ke(e.cooldownUntil);return(0,B.jsxs)(Bf,{variant:`destructive`,className:`text-[10px] px-1.5 py-0`,children:[`Cooldown`,t?` (${t})`:``]})}function Je(){P(``),ue(``),fe(new Set(e.map(e=>e.id))),ie(!0)}function Ye(e){Se(``),I(e??``),L(null),F(!0)}async function Xe(e){if(!(N.length<4)&&N===ce){ye(!0);try{let t={"Content-Type":`application/json`},n=Ae();n&&(t.Authorization=`Bearer ${n}`);let r=await fetch(`/api/accounts/export`,{method:`POST`,headers:t,body:JSON.stringify({password:N,accountIds:[...de]})});if(!r.ok){let e=await r.json();throw Error(e.error??`Export failed: ${r.status}`)}let i=await r.text();if(e)try{await navigator.clipboard.writeText(i),m({type:`success`,text:`Backup copied to clipboard!`})}catch{let e=new Blob([i],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`ppm-accounts-backup.json`,t.click(),URL.revokeObjectURL(t.href),m({type:`success`,text:`Clipboard unavailable — downloaded as file.`})}else{let e=new Blob([i],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`ppm-accounts-backup.json`,t.click(),URL.revokeObjectURL(t.href),m({type:`success`,text:`Backup downloaded.`})}ie(!1)}catch(e){m({type:`error`,text:e.message})}ye(!1)}}async function Ze(){if(!(!Ce.trim()||!xe)){Te(!0),L(null);try{m({type:`success`,text:`Imported ${(await Me({data:Ce.trim(),password:xe})).imported} account(s).`}),F(!1),De()}catch(e){L(e.message||`Import failed`)}Te(!1)}}let Qe=_.trim()?Vf(_.trim()):``;return(0,B.jsxs)(`div`,{className:`space-y-4`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground mb-3`,children:`Connect multiple Claude accounts. PPM rotates between them automatically to avoid rate limits.`}),d&&(0,B.jsx)(`div`,{className:`text-[11px] mb-3 p-2 rounded ${d.type===`success`?`bg-green-500/10 text-green-600`:`bg-red-500/10 text-red-600`}`,children:d.text}),(0,B.jsxs)(`div`,{className:`space-y-1.5 mb-3`,children:[l&&(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Loading...`}),!l&&e.length===0&&(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`No accounts connected.`}),e.map(e=>{let t=s.get(e.id);return(0,B.jsxs)(`div`,{className:`p-2.5 rounded-lg border bg-card space-y-1.5`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-1`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0 flex-1`,children:[(0,B.jsx)(`span`,{className:`text-xs font-medium truncate`,children:e.label??e.email??e.id.slice(0,8)}),qe(e)]}),(0,B.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[e.profileData&&(0,B.jsx)($,{size:`icon`,variant:`ghost`,className:`size-7 cursor-pointer text-muted-foreground hover:text-foreground`,onClick:()=>E(e.profileData),title:`View profile`,children:(0,B.jsx)(me,{className:`size-3`})}),(0,B.jsx)(_e,{checked:e.status!==`disabled`,onCheckedChange:()=>Ue(e.id,e.status),disabled:e.status===`cooldown`,className:`scale-[0.65] cursor-pointer`}),(0,B.jsx)($,{size:`icon`,variant:`ghost`,className:`size-7 cursor-pointer text-muted-foreground hover:text-destructive`,onClick:()=>We(e.id,e.email),title:`Remove`,children:(0,B.jsx)(r,{className:`size-3`})})]})]}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-[10px] text-muted-foreground`,children:[(0,B.jsxs)(`div`,{className:`flex gap-1.5 items-center min-w-0 truncate`,children:[e.email&&e.label&&(0,B.jsx)(`span`,{className:`truncate`,children:e.email}),(0,B.jsxs)(`span`,{children:[e.totalRequests,` req`,e.totalRequests===1?``:`s`]}),(0,B.jsxs)(`span`,{children:[`· `,Ge(e.lastUsedAt)]})]}),t&&(t.session||t.weekly)&&(0,B.jsxs)(`div`,{className:`flex gap-2 shrink-0 tabular-nums`,children:[t.session&&(0,B.jsxs)(`span`,{className:Hf(Math.round(t.session.utilization*100)),children:[`5h `,Math.round(t.session.utilization*100),`%`]}),t.weekly&&(0,B.jsxs)(`span`,{className:Hf(Math.round(t.weekly.utilization*100)),children:[`Wk `,Math.round(t.weekly.utilization*100),`%`]})]})]})]},e.id)})]}),(0,B.jsxs)(`div`,{className:`grid grid-cols-3 gap-1.5`,children:[(0,B.jsx)($,{size:`sm`,className:`h-8 text-xs cursor-pointer`,onClick:()=>g(!0),children:`+ Add`}),(0,B.jsxs)($,{size:`sm`,variant:`outline`,className:`h-8 text-xs cursor-pointer`,onClick:()=>Je(),children:[(0,B.jsx)(ut,{className:`size-3.5 mr-1`}),` Export`]}),(0,B.jsxs)($,{size:`sm`,variant:`outline`,className:`h-8 text-xs cursor-pointer`,onClick:()=>Ye(),children:[(0,B.jsx)(se,{className:`size-3.5 mr-1`}),` Import`]})]})]}),a&&(0,B.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Rotation Settings`}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`label`,{className:`text-[11px] text-muted-foreground w-20 shrink-0`,children:`Strategy`}),(0,B.jsxs)(he,{value:a.strategy,onValueChange:async e=>{o(await Ie({strategy:e}))},children:[(0,B.jsx)(pe,{className:`w-32 h-7 text-xs`,children:(0,B.jsx)(ge,{})}),(0,B.jsxs)(le,{children:[(0,B.jsx)(ae,{value:`round-robin`,children:`Round-robin`}),(0,B.jsx)(ae,{value:`fill-first`,children:`Fill-first`}),(0,B.jsx)(ae,{value:`lowest-usage`,children:`Lowest usage`})]})]})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`label`,{className:`text-[11px] text-muted-foreground w-20 shrink-0`,children:`Max retry`}),(0,B.jsx)(`input`,{type:`number`,min:0,value:a.maxRetry,className:`w-14 h-7 text-xs border rounded px-2 bg-background`,onChange:async e=>{let t=parseInt(e.target.value,10);!isNaN(t)&&t>=0&&o(await Ie({maxRetry:t}))}}),(0,B.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`(0 = try all)`})]}),(0,B.jsxs)(`p`,{className:`text-[11px] text-muted-foreground`,children:[`Active accounts: `,a.activeCount]})]}),T&&(0,B.jsx)(Uf,{profile:T,open:!!T,onClose:()=>E(null)}),(0,B.jsx)(ef,{open:h,onOpenChange:e=>{g(e),e||He()},children:(0,B.jsxs)(rf,{className:`sm:max-w-md`,children:[(0,B.jsxs)(af,{children:[(0,B.jsx)(sf,{className:`text-sm`,children:`Add Claude Account`}),(0,B.jsx)(cf,{className:`text-xs leading-relaxed`,children:`Connect your Claude account via OAuth (recommended) or paste a token manually.`})]}),(0,B.jsxs)(`div`,{className:`space-y-3`,children:[(0,B.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium`,children:`Recommended: Login with Claude`}),(0,B.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Fetches your profile, enables auto-refresh, and uses the correct permissions.`}),re===`idle`?(0,B.jsx)($,{size:`sm`,className:`w-full h-8 text-xs`,onClick:ke,disabled:te,children:te?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin mr-1`}),` Opening...`]}):`Login with Claude`}):(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Authorize in the opened tab, then paste the code shown on the page:`}),(0,B.jsx)(A,{placeholder:`Paste code here...`,value:k,onChange:e=>ee(e.target.value),className:`text-xs h-8 font-mono`,autoFocus:!0}),(0,B.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,B.jsx)($,{size:`sm`,className:`flex-1 h-7 text-xs`,onClick:R,disabled:!k.trim()||te,children:te?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin mr-1`}),` Connecting...`]}):`Connect Account`}),(0,B.jsx)($,{size:`sm`,variant:`ghost`,className:`h-7 text-xs`,onClick:He,children:`Cancel`})]})]})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`div`,{className:`flex-1 border-t`}),(0,B.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`or paste token manually`}),(0,B.jsx)(`div`,{className:`flex-1 border-t`})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{htmlFor:`token`,className:`text-xs`,children:`Token`}),(0,B.jsx)(A,{id:`token`,type:`password`,placeholder:`sk-ant-...`,value:_,onChange:e=>v(e.target.value),className:`text-xs h-8 font-mono`}),Qe&&(0,B.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[`Detected: `,Qe]})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{htmlFor:`label`,className:`text-xs`,children:`Label (optional)`}),(0,B.jsx)(A,{id:`label`,placeholder:`e.g. Personal, Work`,value:y,onChange:e=>b(e.target.value),className:`text-xs h-8`})]}),(0,B.jsxs)(`div`,{className:`rounded-md bg-muted/50 p-2.5 space-y-1.5`,children:[(0,B.jsx)(`p`,{className:`text-[10px] font-medium text-muted-foreground`,children:`How to get a token manually:`}),(0,B.jsxs)(`div`,{className:`text-[10px] text-muted-foreground space-y-1`,children:[(0,B.jsxs)(`p`,{children:[(0,B.jsx)(`span`,{className:`font-medium`,children:`Claude Max/Pro:`}),` Run `,(0,B.jsx)(`code`,{className:`bg-background rounded px-1 font-mono`,children:`claude setup-token`})]}),(0,B.jsx)(`p`,{className:`text-[9px]`,children:`Valid 1 year but no auto-refresh, may lack profile data.`}),(0,B.jsxs)(`p`,{children:[(0,B.jsx)(`span`,{className:`font-medium`,children:`API key:`}),` `,(0,B.jsx)(`a`,{href:`https://console.anthropic.com/settings/keys`,target:`_blank`,rel:`noopener noreferrer`,className:`text-primary underline hover:no-underline`,children:`console.anthropic.com/settings/keys`})]})]})]})]}),C&&(0,B.jsx)(`div`,{className:`text-[11px] p-2 rounded bg-red-500/10 text-red-600`,children:C}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{size:`sm`,variant:`outline`,className:`text-xs h-7`,onClick:()=>{g(!1),He()},children:`Cancel`}),(0,B.jsx)($,{size:`sm`,className:`text-xs h-7`,onClick:Oe,disabled:!_.trim()||x,children:x?`Adding...`:`Add Token`})]})]})}),(0,B.jsx)(ef,{open:M,onOpenChange:e=>{e||ie(!1)},children:(0,B.jsxs)(rf,{className:`sm:max-w-md`,children:[(0,B.jsxs)(af,{children:[(0,B.jsxs)(sf,{className:`text-sm flex items-center gap-1.5`,children:[(0,B.jsx)(Nt,{className:`size-3.5`}),` Export Accounts`]}),(0,B.jsx)(cf,{className:`text-xs`,children:`Select accounts and set a password to protect the backup.`})]}),(0,B.jsxs)(`div`,{className:`space-y-3`,children:[(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between mb-1`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Accounts to export`}),(0,B.jsx)(`button`,{className:`text-[10px] text-primary hover:underline cursor-pointer`,onClick:()=>fe(de.size===e.length?new Set:new Set(e.map(e=>e.id))),children:de.size===e.length?`Deselect all`:`Select all`})]}),(0,B.jsx)(`div`,{className:`max-h-36 overflow-y-auto space-y-1 border rounded p-2`,children:e.map(e=>(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`input`,{type:`checkbox`,id:`exp-${e.id}`,checked:de.has(e.id),onChange:t=>{let n=new Set(de);t.target.checked?n.add(e.id):n.delete(e.id),fe(n)},className:`size-3.5 accent-primary cursor-pointer`}),(0,B.jsxs)(`label`,{htmlFor:`exp-${e.id}`,className:`text-xs cursor-pointer truncate`,children:[e.label??e.email??e.id.slice(0,8),e.email&&e.label&&(0,B.jsxs)(`span`,{className:`text-muted-foreground ml-1 text-[10px]`,children:[`(`,e.email,`)`]})]})]},e.id))})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{className:`text-xs`,children:`Password`}),(0,B.jsx)(A,{type:`password`,placeholder:`Min 4 characters`,value:N,onChange:e=>P(e.target.value),className:`text-xs h-8`,autoComplete:`new-password`})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{className:`text-xs`,children:`Confirm password`}),(0,B.jsx)(A,{type:`password`,placeholder:`Re-enter password`,value:ce,onChange:e=>ue(e.target.value),className:`text-xs h-8`,autoComplete:`new-password`}),ce&&N!==ce&&(0,B.jsx)(`p`,{className:`text-[10px] text-red-500`,children:`Passwords do not match`})]}),(0,B.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Encrypted with AES-256-GCM + scrypt. Keep the password safe — it cannot be recovered.`})]}),(0,B.jsxs)(of,{className:`gap-1.5 flex-col sm:flex-row`,children:[(0,B.jsx)($,{size:`sm`,variant:`outline`,className:`text-xs h-7 cursor-pointer`,onClick:()=>ie(!1),children:`Cancel`}),(0,B.jsxs)($,{size:`sm`,variant:`outline`,className:`text-xs h-7 cursor-pointer`,disabled:N.length<4||N!==ce||de.size===0||ve,onClick:()=>Xe(!0),children:[(0,B.jsx)(ct,{className:`size-3 mr-1`}),` Copy to clipboard`]}),(0,B.jsx)($,{size:`sm`,className:`text-xs h-7 cursor-pointer`,disabled:N.length<4||N!==ce||de.size===0||ve,onClick:()=>Xe(!1),children:ve?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin mr-1`}),` Exporting...`]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(ut,{className:`size-3 mr-1`}),` Download`]})})]})]})}),(0,B.jsx)(ef,{open:be,onOpenChange:e=>{e||F(!1)},children:(0,B.jsxs)(rf,{className:`sm:max-w-md`,children:[(0,B.jsxs)(af,{children:[(0,B.jsxs)(sf,{className:`text-sm flex items-center gap-1.5`,children:[(0,B.jsx)(Nt,{className:`size-3.5`}),` Import Accounts`]}),(0,B.jsx)(cf,{className:`text-xs`,children:`Paste or load the backup data, then enter the password used during export.`})]}),(0,B.jsxs)(`div`,{className:`space-y-3`,children:[(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{className:`text-xs`,children:`Backup data`}),(0,B.jsx)(`textarea`,{value:Ce,onChange:e=>I(e.target.value),placeholder:`Paste backup JSON here...`,rows:4,className:`w-full text-xs p-2 rounded border border-border bg-background font-mono resize-none focus:outline-none focus:ring-1 focus:ring-primary`})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{className:`text-xs`,children:`Password`}),(0,B.jsx)(A,{type:`password`,placeholder:`Password used during export`,value:xe,onChange:e=>Se(e.target.value),className:`text-xs h-8`,autoComplete:`current-password`})]})]}),Ee&&(0,B.jsx)(`div`,{className:`text-[11px] p-2 rounded bg-red-500/10 text-red-600`,children:Ee}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{size:`sm`,variant:`outline`,className:`text-xs h-7 cursor-pointer`,onClick:()=>F(!1),children:`Cancel`}),(0,B.jsx)($,{size:`sm`,className:`text-xs h-7 cursor-pointer`,disabled:!Ce.trim()||!xe||we,onClick:Ze,children:we?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin mr-1`}),` Importing...`]}):`Import`})]})]})})]})}function Gf(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 Kf(){let[e,t]=(0,z.useState)(`default`),[n,r]=(0,z.useState)(!1),[i,a]=(0,z.useState)(!1),[o,s]=(0,z.useState)(null);return(0,z.useEffect)(()=>{`Notification`in window&&t(Notification.permission),r(localStorage.getItem(`ppm-push-subscribed`)===`true`)},[]),{permission:e,isSubscribed:n,loading:i,error:o,subscribe:(0,z.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=Ae();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:Gf(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,z.useCallback)(async()=>{a(!0);try{let e=await(await navigator.serviceWorker.ready).pushManager.getSubscription();if(e){let t={"Content-Type":`application/json`},n=Ae();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 qf=[{value:`light`,label:`Light`,icon:tn},{value:`dark`,label:`Dark`,icon:zt},{value:`system`,label:`System`,icon:Rt}],Jf=`PushManager`in window&&`serviceWorker`in navigator,Yf=/iPhone|iPad/.test(navigator.userAgent)&&!window.matchMedia(`(display-mode: standalone)`).matches,Xf=[{value:`general`,label:`General`,icon:N},{value:`ai`,label:`AI`,icon:ce},{value:`notifications`,label:`Notifs`,icon:Xe},{value:`accounts`,label:`Accounts`,icon:cn},{value:`shortcuts`,label:`Keys`,icon:Ot}];function Zf(){let{theme:e,setTheme:t,deviceName:n,setDeviceName:r,version:i}=I(),{permission:a,isSubscribed:o,loading:s,error:l,subscribe:u,unsubscribe:d}=Kf(),[f,p]=(0,z.useState)(n??``),[m,h]=(0,z.useState)(!1),[g,_]=(0,z.useState)(!1),v=(0,z.useRef)(void 0),y=f.trim()!==(n??``),b=(0,z.useCallback)(async()=>{if(y){h(!0);try{await r(f),_(!0),clearTimeout(v.current),v.current=setTimeout(()=>_(!1),2e3)}finally{h(!1)}}},[f,y,r]);return(0,B.jsx)(`div`,{className:`h-full w-full flex flex-col`,children:(0,B.jsxs)(Of,{defaultValue:`general`,className:`flex-1 flex flex-col min-h-0`,children:[(0,B.jsxs)(`div`,{className:`shrink-0 px-3 pt-3 pb-1`,children:[(0,B.jsx)(`h2`,{className:`text-sm font-semibold mb-2`,children:`Settings`}),(0,B.jsx)(Af,{className:`w-full h-8 p-0.5 bg-muted rounded-md`,children:Xf.map(e=>{let t=e.icon;return(0,B.jsxs)(jf,{value:e.value,className:`flex-1 gap-1 text-[11px] h-7 px-1.5 cursor-pointer data-[state=active]:text-foreground`,children:[(0,B.jsx)(t,{className:`size-3.5 shrink-0`}),(0,B.jsx)(`span`,{className:`hidden sm:inline`,children:e.label})]},e.value)})})]}),(0,B.jsxs)(`div`,{className:`flex-1 min-h-0`,children:[(0,B.jsx)(Mf,{value:`general`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsxs)(`div`,{className:`p-3 space-y-4`,children:[(0,B.jsxs)(`section`,{className:`space-y-2`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Device Name`}),(0,B.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,B.jsx)(A,{value:f,onChange:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&b()},placeholder:`My Device`,className:`h-8 text-xs flex-1`,maxLength:100}),(0,B.jsx)($,{variant:g?`default`:`outline`,size:`sm`,className:`h-8 text-xs px-3 cursor-pointer`,disabled:!y||m,onClick:b,children:m?`...`:g?(0,B.jsx)(c,{className:`size-3.5`}):`Save`})]}),(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Shown in page title and synced to PPM Cloud.`})]}),(0,B.jsx)(Nf,{}),(0,B.jsxs)(`section`,{className:`space-y-2`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Theme`}),(0,B.jsx)(`div`,{className:`flex gap-1.5`,children:qf.map(n=>{let r=n.icon;return(0,B.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,B.jsx)(r,{className:`size-3.5`}),n.label]},n.value)})})]}),(0,B.jsx)(Nf,{}),(0,B.jsxs)(`section`,{className:`space-y-1.5`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,B.jsx)(Dt,{className:`size-3.5 text-muted-foreground`}),(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`About`})]}),(0,B.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`PPM — Personal Project Manager`}),(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`A mobile-first web IDE for managing your projects.`}),i&&(0,B.jsxs)(`p`,{className:`text-[11px] text-muted-foreground tabular-nums`,children:[`Version `,i]})]})]})})}),(0,B.jsx)(Mf,{value:`ai`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsx)(`div`,{className:`p-3`,children:(0,B.jsx)(fe,{compact:!0})})})}),(0,B.jsx)(Mf,{value:`notifications`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsxs)(`div`,{className:`p-3 space-y-4`,children:[(0,B.jsxs)(`section`,{className:`space-y-2`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Push Notifications`}),Jf?(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[o?(0,B.jsx)(Ze,{className:`size-3.5`}):(0,B.jsx)(P,{className:`size-3.5`}),(0,B.jsx)(`span`,{className:`text-xs`,children:`Push notifications`})]}),(0,B.jsx)($,{variant:o?`default`:`outline`,size:`sm`,className:`h-7 text-xs cursor-pointer`,disabled:s||a===`denied`,onClick:()=>o?d():u(),children:s?`...`:o?`On`:`Off`})]}),o&&(0,B.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`}),l&&(0,B.jsx)(`p`,{className:`text-[11px] text-destructive`,children:l}),a===`denied`&&(0,B.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Notifications blocked. Enable in browser settings.`}),Yf&&(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`On iOS, install PPM to Home Screen for push notifications.`})]}):(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Push notifications not supported in this browser.`})]}),(0,B.jsx)(Nf,{}),(0,B.jsxs)(`section`,{className:`space-y-2`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Telegram`}),(0,B.jsx)(Rf,{})]})]})})}),(0,B.jsx)(Mf,{value:`accounts`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsx)(`div`,{className:`p-3`,children:(0,B.jsx)(Wf,{})})})}),(0,B.jsx)(Mf,{value:`shortcuts`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsx)(`div`,{className:`p-3`,children:(0,B.jsx)(Lf,{})})})})]})]})})}function Qf({connections:e,cachedTables:t,onOpenTable:n,onRefreshTables:r,onEdit:i,onDelete:a}){let[o,c]=(0,z.useState)(new Set),[l,u]=(0,z.useState)(new Set([`__ungrouped__`])),[d,f]=(0,z.useState)(new Set),[p,m]=(0,z.useState)(new Map),h=e=>{c(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},g=e=>{u(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},_=async e=>{f(t=>new Set(t).add(e));try{await r(e)}finally{f(t=>{let n=new Set(t);return n.delete(e),n})}},v={};for(let t of e){let e=t.group_name??`__ungrouped__`;(v[e]??=[]).push(t)}let y=Object.keys(v).sort((e,t)=>e===`__ungrouped__`?1:t===`__ungrouped__`?-1:e.localeCompare(t));return e.length===0?(0,B.jsxs)(`p`,{className:`px-4 py-6 text-xs text-text-subtle text-center`,children:[`No connections yet.`,(0,B.jsx)(`br`,{}),`Click + to add one.`]}):(0,B.jsx)(`div`,{className:`py-1`,children:y.map(e=>{let r=l.has(e),c=e===`__ungrouped__`?`Ungrouped`:e,u=v[e],f=y.length>1||e!==`__ungrouped__`;return(0,B.jsxs)(`div`,{children:[f&&(0,B.jsxs)(`button`,{onClick:()=>g(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,B.jsx)(s,{className:`size-3`}):(0,B.jsx)(tt,{className:`size-3`}),c]}),r&&(0,B.jsx)(`div`,{className:f?`ml-[11px] border-l border-dashed border-border`:``,children:u.map(e=>{let r=o.has(e.id),c=t.get(e.id)??[],l=d.has(e.id);return(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`div`,{className:L(`group flex items-center gap-1 py-1 hover:bg-surface-elevated transition-colors`,f?`pl-3 pr-2`:`px-2`),children:[(0,B.jsx)(`button`,{onClick:()=>{h(e.id),!o.has(e.id)&&c.length===0&&_(e.id)},className:`shrink-0 text-text-subtle hover:text-foreground transition-colors`,children:r?(0,B.jsx)(s,{className:`size-3`}):(0,B.jsx)(tt,{className:`size-3`})}),(0,B.jsx)(`span`,{className:`shrink-0 size-2 rounded-full border border-border`,style:{backgroundColor:e.color??`transparent`}}),(0,B.jsx)(`button`,{className:`flex-1 text-left text-xs truncate hover:text-primary transition-colors`,onClick:()=>{h(e.id),!o.has(e.id)&&c.length===0&&_(e.id)},children:e.name}),(0,B.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,B.jsx)(`span`,{title:`Readonly`,children:(0,B.jsx)(Nt,{className:`shrink-0 size-2.5 text-text-subtle`,"aria-label":`Readonly`})}),(0,B.jsxs)(`div`,{className:`hidden group-hover:flex items-center gap-0.5 shrink-0`,children:[(0,B.jsx)(`button`,{onClick:()=>_(e.id),disabled:l,className:`p-0.5 text-text-subtle hover:text-foreground transition-colors`,title:`Refresh tables`,children:(0,B.jsx)(qt,{className:L(`size-3`,l&&`animate-spin`)})}),(0,B.jsx)(`button`,{onClick:()=>i(e),className:`p-0.5 text-text-subtle hover:text-foreground transition-colors`,title:`Edit`,children:(0,B.jsx)(Gt,{className:`size-3`})}),(0,B.jsx)(`button`,{onClick:()=>a(e.id),className:`p-0.5 text-text-subtle hover:text-red-500 transition-colors`,title:`Delete`,children:(0,B.jsx)(rn,{className:`size-3`})})]})]}),r&&(0,B.jsxs)(`div`,{className:`ml-[11px] border-l border-dashed border-border pl-3`,children:[l&&c.length===0&&(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`Loading…`}),!l&&c.length===0&&(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`No tables cached`}),c.length>0&&(0,B.jsx)(ep,{connId:e.id,tables:c,filter:p.get(e.id)??``,onFilterChange:t=>m(n=>new Map(n).set(e.id,t)),onOpenTable:(t,r)=>n(e,t,r)})]})]},e.id)})})]},e)})})}var $f=200;function ep({connId:e,tables:t,filter:n,onFilterChange:r,onOpenTable:i}){let a=(0,z.useMemo)(()=>{if(!n)return t;let e=n.toLowerCase();return t.filter(t=>t.tableName.toLowerCase().includes(e))},[t,n]);return(0,B.jsxs)(`div`,{children:[t.length>5&&(0,B.jsxs)(`div`,{className:`flex items-center gap-1 px-1 py-0.5`,children:[(0,B.jsx)(Xt,{className:`size-2.5 text-text-subtle shrink-0`}),(0,B.jsx)(`input`,{type:`text`,value:n,onChange:e=>r(e.target.value),placeholder:`Filter tables…`,className:`w-full text-[10px] bg-transparent border-none outline-none text-foreground placeholder:text-text-subtle`})]}),(0,B.jsxs)(`div`,{className:`overflow-y-auto`,style:{maxHeight:$f},children:[a.map(t=>(0,B.jsxs)(`button`,{onClick:()=>i(t.tableName,t.schemaName),className:`w-full flex items-center gap-1.5 px-2 py-0.5 text-[11px] text-text-secondary hover:text-foreground hover:bg-surface-elevated transition-colors text-left truncate`,children:[(0,B.jsx)(lt,{className:`size-2.5 shrink-0 text-text-subtle`}),(0,B.jsx)(`span`,{className:`truncate`,children:t.tableName})]},`${e}-${t.schemaName}.${t.tableName}`)),n&&a.length===0&&(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`No match`})]})]})}var tp=`ppm-recent-paths`,np=5,rp=[{name:`Home`,path:`~`,icon:Et},{name:`Desktop`,path:`~/Desktop`,icon:Rt},{name:`Documents`,path:`~/Documents`,icon:gt},{name:`Downloads`,path:`~/Downloads`,icon:ut}];function ip(){try{return JSON.parse(localStorage.getItem(tp)??`[]`)}catch{return[]}}function ap(e){let t=[e,...ip().filter(t=>t!==e)].slice(0,np);localStorage.setItem(tp,JSON.stringify(t))}function op(e){return e==null?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function sp(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 cp(e){if(e.type===`directory`)return(0,B.jsx)(xt,{className:`size-4 text-blue-500`});let t=e.name.split(`.`).pop()?.toLowerCase();return t&&[`db`,`sqlite`,`sqlite3`].includes(t)?(0,B.jsx)(lt,{className:`size-4 text-amber-500`}):(0,B.jsx)(vt,{className:`size-4 text-text-subtle`})}function lp(e,t){if(!t?.length)return!0;let n=`.`+e.split(`.`).pop()?.toLowerCase();return t.includes(n)}function up({open:e,mode:t,accept:n,root:r,title:i,onSelect:a,onCancel:o}){let[s,c]=(0,z.useState)([]),[l,u]=(0,z.useState)(``),[d,f]=(0,z.useState)(null),[p,m]=(0,z.useState)([]),[h,g]=(0,z.useState)(null),[_,v]=(0,z.useState)(!1),[y,b]=(0,z.useState)(null),[x,S]=(0,z.useState)(``),[C,w]=(0,z.useState)(``),[T,E]=(0,z.useState)(!1),[D,O]=(0,z.useState)([]),k=(0,z.useRef)(null),ee=typeof window<`u`&&window.innerWidth<768,te=t===`folder`?`Select Folder`:t===`file`?`Select File`:`Select File or Folder`,ne=(0,z.useCallback)(async(e,t)=>{v(!0),b(null),g(null),S(``);try{let n=new URLSearchParams;e&&n.set(`path`,e),t&&n.set(`showHidden`,`true`);let r=await R.get(`/api/fs/browse?${n}`);c(r.entries),u(r.current),f(r.parent),m(r.breadcrumbs),w(r.current)}catch(e){b(e.message||`Failed to browse directory`)}finally{v(!1)}},[]);(0,z.useEffect)(()=>{e&&(ne(r??`~`,T),O(ip()))},[e,r,ne,T]);let re=e=>ne(e,T),j=()=>{let e=!T;E(e),ne(l||(r??`~`),e)},M=e=>{e.key===`Enter`&&C.trim()&&ne(C.trim())},ie=e=>{e.type===`directory`?t===`file`?re(e.path):g(e.path):t!==`folder`&&g(e.path)},ae=e=>{e.type===`directory`&&re(e.path)},oe=()=>{h&&(ap(l),a(h))},se=s.filter(e=>!(x&&!e.name.toLowerCase().includes(x.toLowerCase())||e.type===`file`&&n?.length&&!lp(e.name,n))),N=e=>e.type===`directory`?t!==`file`:t!==`folder`,P=(0,B.jsxs)(`div`,{className:`flex flex-col flex-1 min-h-0`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5 px-3 py-2 border-b border-border`,children:[d&&(0,B.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0`,onClick:()=>re(d),children:(0,B.jsx)(qe,{className:`size-4`})}),(0,B.jsx)(A,{value:C,onChange:e=>w(e.target.value),onKeyDown:M,placeholder:`Type path and press Enter`,className:`h-7 text-xs font-mono flex-1`})]}),(0,B.jsx)(`div`,{className:`flex items-center gap-0.5 px-3 py-1.5 border-b border-border overflow-x-auto text-xs`,children:p.map((e,t)=>(0,B.jsxs)(`span`,{className:`flex items-center shrink-0`,children:[t>0&&(0,B.jsx)(tt,{className:`size-3 text-text-subtle mx-0.5`}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>re(e.path),className:`hover:text-primary hover:underline text-text-secondary`,children:e.name})]},e.path))}),(0,B.jsxs)(`div`,{className:`flex flex-1 min-h-0 overflow-hidden`,children:[!ee&&(0,B.jsxs)(`div`,{className:`w-36 border-r border-border py-2 px-1 shrink-0 overflow-y-auto`,children:[rp.map(e=>(0,B.jsxs)(`button`,{type:`button`,onClick:()=>re(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`,l.endsWith(e.name)&&`bg-primary/10 text-primary`),children:[(0,B.jsx)(e.icon,{className:`size-3.5`}),e.name]},e.path)),D.length>0&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`text-[10px] text-text-subtle px-2 mt-3 mb-1 font-medium`,children:`Recent`}),D.map(e=>(0,B.jsxs)(`button`,{type:`button`,onClick:()=>re(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,B.jsx)(ot,{className:`size-3 shrink-0`}),(0,B.jsx)(`span`,{className:`truncate`,children:e.split(`/`).pop()})]},e))]})]}),(0,B.jsx)(Ud,{className:`flex-1 min-h-0`,children:_?(0,B.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,B.jsx)(Mt,{className:`size-5 animate-spin text-text-subtle`})}):y?(0,B.jsx)(`div`,{className:`text-center py-8 text-xs text-red-500`,children:y}):se.length===0?(0,B.jsx)(`div`,{className:`text-center py-8 text-xs text-text-subtle`,children:x?`No matching entries`:`Empty directory`}):(0,B.jsx)(`div`,{ref:k,className:`py-1`,children:se.map(e=>{let t=N(e);return(0,B.jsxs)(`button`,{type:`button`,onClick:()=>ie(e),onDoubleClick:()=>ae(e),className:L(`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors`,h===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:[cp(e),(0,B.jsx)(`span`,{className:L(`flex-1 truncate`,e.type===`directory`&&`font-medium`),children:e.name}),(0,B.jsx)(`span`,{className:`text-text-subtle text-[10px] shrink-0 w-14 text-right`,children:op(e.size)}),(0,B.jsx)(`span`,{className:`text-text-subtle text-[10px] shrink-0 w-14 text-right`,children:sp(e.modified)})]},e.path)})})})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-t border-border shrink-0`,children:[(0,B.jsx)($,{variant:`ghost`,size:`icon`,className:L(`size-7 shrink-0`,T&&`text-primary`),onClick:j,title:T?`Hide hidden files`:`Show hidden files`,children:T?(0,B.jsx)(me,{className:`size-3.5`}):(0,B.jsx)(ft,{className:`size-3.5`})}),n?.length?(0,B.jsx)(`span`,{className:`text-[10px] text-text-subtle bg-surface-hover px-1.5 py-0.5 rounded`,children:n.join(`, `)}):null,(0,B.jsx)(`div`,{className:`flex-1 max-w-48`,children:(0,B.jsxs)(`div`,{className:`relative`,children:[(0,B.jsx)(Xt,{className:`absolute left-2 top-1/2 -translate-y-1/2 size-3 text-text-subtle`}),(0,B.jsx)(A,{value:x,onChange:e=>S(e.target.value),placeholder:`Filter...`,className:`h-6 text-[11px] pl-6`})]})}),(0,B.jsx)(`div`,{className:`flex-1`}),(0,B.jsx)($,{variant:`outline`,size:`sm`,onClick:o,className:`h-7 text-xs`,children:`Cancel`}),(0,B.jsx)($,{size:`sm`,onClick:oe,disabled:!h,className:`h-7 text-xs`,children:`Select`})]})]});return(0,B.jsx)(ef,{open:e,onOpenChange:e=>{e||o()},children:(0,B.jsxs)(rf,{className:L(`p-0 gap-0 overflow-hidden flex flex-col`,ee?`max-w-[95vw] h-[85vh]`:`max-w-2xl h-[70vh]`),children:[(0,B.jsx)(af,{className:`px-3 py-2 border-b border-border`,children:(0,B.jsx)(sf,{className:`text-sm`,children:i??te})}),P]})})}function dp({mode:e,accept:t,root:n,title:r,onSelect:i,className:a}){let[o,s]=(0,z.useState)(!1);return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)($,{type:`button`,variant:`ghost`,size:`icon`,className:L(`size-8 shrink-0`,a),onClick:()=>s(!0),title:r??`Browse...`,children:(0,B.jsx)(yt,{className:`size-4`})}),(0,B.jsx)(up,{open:o,mode:e,accept:t,root:n,title:r,onSelect:e=>{i(e),s(!1)},onCancel:()=>s(!1)})]})}var fp=[`#ef4444`,`#f97316`,`#eab308`,`#22c55e`,`#06b6d4`,`#3b82f6`,`#8b5cf6`,`#ec4899`,`#6b7280`,`#000000`];function pp({value:e,onChange:t}){return(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,B.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,B.jsx)(`span`,{className:`absolute inset-0 flex items-center justify-center text-[8px] text-text-subtle`,children:`×`})}),fp.map(n=>(0,B.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,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`div`,{className:`size-6 rounded-full border border-border shrink-0`,style:{backgroundColor:e??`transparent`}}),(0,B.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 mp({open:e,onClose:t,connection:n,onSave:r,onUpdate:i,onTest:a}){let o=!!n,[s,c]=(0,z.useState)({name:``,type:`postgres`,path:``,connectionString:``,groupName:``,color:null,readonly:!0}),[l,u]=(0,z.useState)(!1),[d,f]=(0,z.useState)(null),[p,m]=(0,z.useState)(!1),[h,g]=(0,z.useState)(null);(0,z.useEffect)(()=>{if(!e){f(null),g(null);return}c(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 _=(e,t)=>{c(n=>({...n,[e]:t})),f(null)};return(0,B.jsx)(ef,{open:e,onOpenChange:e=>{e||t()},children:(0,B.jsxs)(rf,{className:`max-w-md`,children:[(0,B.jsx)(af,{children:(0,B.jsx)(sf,{children:o?`Edit Connection`:`Add Connection`})}),(0,B.jsxs)(`div`,{className:`space-y-3 py-1`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Name *`}),(0,B.jsx)(`input`,{value:s.name,onChange:e=>_(`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,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Type`}),(0,B.jsxs)(`select`,{value:s.type,onChange:e=>_(`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,B.jsx)(`option`,{value:`postgres`,children:`PostgreSQL`}),(0,B.jsx)(`option`,{value:`sqlite`,children:`SQLite`})]})]}),s.type===`postgres`?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Connection String *`}),(0,B.jsx)(`input`,{type:`password`,value:s.connectionString,onChange:e=>_(`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,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`File Path *`}),(0,B.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,B.jsx)(`input`,{value:s.path,onChange:e=>_(`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,B.jsx)(dp,{mode:`file`,accept:[`.db`,`.sqlite`,`.sqlite3`],title:`Browse for SQLite database`,onSelect:e=>_(`path`,e)})]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Group`}),(0,B.jsx)(`input`,{value:s.groupName,onChange:e=>_(`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,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Tab Color`}),(0,B.jsx)(pp,{value:s.color,onChange:e=>_(`color`,e)})]}),o&&(0,B.jsxs)(`div`,{className:`flex items-center justify-between py-1`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`text-xs font-medium`,children:`Readonly`}),(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle`,children:`Block non-SELECT queries (AI protection)`})]}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>_(`readonly`,!s.readonly),className:`relative w-9 h-5 rounded-full transition-colors ${s.readonly?`bg-primary`:`bg-border`}`,children:(0,B.jsx)(`span`,{className:`absolute top-0.5 left-0.5 size-4 rounded-full bg-white transition-transform ${s.readonly?`translate-x-4`:``}`})})]}),d&&(0,B.jsx)(`p`,{className:`text-xs ${d.ok?`text-green-500`:`text-red-500`}`,children:d.ok?`✓ Connection successful`:`✗ ${d.error}`}),h&&(0,B.jsx)(`p`,{className:`text-xs text-red-500`,children:h})]}),(0,B.jsxs)(of,{children:[o&&(0,B.jsx)($,{variant:`outline`,size:`sm`,onClick:async()=>{if(o){u(!0),f(null);try{f(await a(n.id))}finally{u(!1)}}},disabled:l,className:`mr-auto`,children:l?`Testing…`:`Test Connection`}),(0,B.jsx)($,{variant:`outline`,size:`sm`,onClick:t,children:`Cancel`}),(0,B.jsx)($,{size:`sm`,onClick:async()=>{if(g(null),!s.name.trim()){g(`Name is required`);return}m(!0);try{if(o&&i){let e=(s.type===`postgres`?s.connectionString.trim():s.path.trim())?s.type===`postgres`?{type:`postgres`,connectionString:s.connectionString}:{type:`sqlite`,path:s.path}:void 0;await i(n.id,{name:s.name.trim(),...e!==void 0&&{connectionConfig:e},groupName:s.groupName.trim()||null,color:s.color,readonly:s.readonly?1:0})}else if(r){let e=s.type===`postgres`?{type:`postgres`,connectionString:s.connectionString}:{type:`sqlite`,path:s.path};await r({type:s.type,name:s.name.trim(),connectionConfig:e,groupName:s.groupName.trim()||void 0,color:s.color??void 0})}t()}catch(e){g(e.message)}finally{m(!1)}},disabled:p,children:p?`Saving…`:o?`Save`:`Add`})]})]})})}function hp({onExport:e,onImport:t}){let[n,r]=(0,z.useState)(!1),i=(0,z.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(`
|
|
19
|
+
`,children:(0,B.jsx)(`div`,{className:`absolute opacity-0 group-hover/handle:opacity-70 transition-opacity text-foreground/50`,children:t?(0,B.jsx)(Tt,{className:`size-3`}):(0,B.jsx)(wt,{className:`size-3`})})})}var Hd=Ce((e,t)=>({tree:[],loading:!1,error:null,expandedPaths:new Set,selectedFiles:[],fetchTree:async t=>{e({loading:!0,error:null});try{e({tree:await R.get(`${ke(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 Ud({className:e,children:t,...n}){return(0,B.jsxs)(qs,{"data-slot":`scroll-area`,className:L(`relative`,e),...n,children:[(0,B.jsx)(Js,{"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,B.jsx)(Wd,{}),(0,B.jsx)(Ys,{})]})}function Wd({className:e,orientation:t=`vertical`,...n}){return(0,B.jsx)(xs,{"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,B.jsx)(Ms,{"data-slot":`scroll-area-thumb`,className:`relative flex-1 rounded-full bg-border`})})}function Gd({...e}){return(0,B.jsx)(bo,{"data-slot":`context-menu`,...e})}function Kd({...e}){return(0,B.jsx)(xo,{"data-slot":`context-menu-trigger`,...e})}function qd({className:e,...t}){return(0,B.jsx)(So,{children:(0,B.jsx)(Co,{"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 Jd({className:e,inset:t,variant:n=`default`,...r}){return(0,B.jsx)(wo,{"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 Yd({className:e,...t}){return(0,B.jsx)(To,{"data-slot":`context-menu-separator`,className:L(`-mx-1 my-1 h-px bg-border`,e),...t})}var Xd=e=>typeof e==`boolean`?`${e}`:e===0?`0`:e,Zd=Ee,Qd=(e,t)=>n=>{if(t?.variants==null)return Zd(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=Xd(t)||Xd(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 Zd(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)},$d=Qd(`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,B.jsx)(r?f:`button`,{"data-slot":`button`,"data-variant":t,"data-size":n,className:L($d({variant:t,size:n,className:e})),...i})}function ef({...e}){return(0,B.jsx)(Or,{"data-slot":`dialog`,...e})}function tf({...e}){return(0,B.jsx)(kr,{"data-slot":`dialog-portal`,...e})}function nf({className:e,...t}){return(0,B.jsx)(Ar,{"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 rf({className:e,children:t,showCloseButton:n=!0,...i}){return(0,B.jsxs)(tf,{"data-slot":`dialog-portal`,children:[(0,B.jsx)(nf,{}),(0,B.jsxs)(jr,{"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),...i,children:[t,n&&(0,B.jsxs)(Pr,{"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,B.jsx)(r,{}),(0,B.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function af({className:e,...t}){return(0,B.jsx)(`div`,{"data-slot":`dialog-header`,className:L(`flex flex-col gap-2 text-center sm:text-left`,e),...t})}function of({className:e,showCloseButton:t=!1,children:n,...r}){return(0,B.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,B.jsx)(Pr,{asChild:!0,children:(0,B.jsx)($,{variant:`outline`,children:`Close`})})]})}function sf({className:e,...t}){return(0,B.jsx)(Mr,{"data-slot":`dialog-title`,className:L(`text-lg leading-none font-semibold`,e),...t})}function cf({className:e,...t}){return(0,B.jsx)(Nr,{"data-slot":`dialog-description`,className:L(`text-sm text-muted-foreground`,e),...t})}function lf({action:e,node:t,projectName:n,onClose:r,onRefresh:i}){let[a,o]=(0,z.useState)(``),[s,c]=(0,z.useState)(!1),[l,u]=(0,z.useState)(null),d=(0,z.useRef)(null);(0,z.useEffect)(()=>{o(e===`rename`?t.name:``)},[e,t.name]),(0,z.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 R.post(`${ke(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 R.post(`${ke(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 R.del(`${ke(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,B.jsx)(ef,{open:!0,onOpenChange:e=>!e&&r(),children:(0,B.jsxs)(rf,{children:[(0,B.jsxs)(af,{children:[(0,B.jsxs)(sf,{children:[`Delete `,t.type===`directory`?`Folder`:`File`]}),(0,B.jsxs)(cf,{children:[`Are you sure you want to delete`,` `,(0,B.jsx)(`span`,{className:`font-mono font-semibold`,children:t.name}),`?`,t.type===`directory`&&` This will delete all contents.`]})]}),l&&(0,B.jsx)(`p`,{className:`text-sm text-error`,children:l}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{variant:`outline`,onClick:r,disabled:s,children:`Cancel`}),(0,B.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,B.jsx)(ef,{open:!0,onOpenChange:e=>!e&&r(),children:(0,B.jsxs)(rf,{children:[(0,B.jsxs)(af,{children:[(0,B.jsx)(sf,{children:g}),(0,B.jsx)(cf,{children:e===`rename`?`Rename "${t.name}" to:`:`Create in ${t.type===`directory`?t.path||`/`:t.path.split(`/`).slice(0,-1).join(`/`)||`/`}`})]}),(0,B.jsx)(A,{ref:d,value:a,onChange:e=>o(e.target.value),onKeyDown:h,placeholder:_,disabled:s}),l&&(0,B.jsx)(`p`,{className:`text-sm text-error`,children:l}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{variant:`outline`,onClick:r,disabled:s,children:`Cancel`}),(0,B.jsx)($,{onClick:()=>{e===`new-file`?f(`file`):e===`new-folder`?f(`directory`):p()},disabled:s||!a.trim(),children:s?`Saving...`:e===`rename`?`Rename`:`Create`})]})]})})}var uf={ts:mt,tsx:mt,js:mt,jsx:mt,py:mt,rs:mt,go:mt,json:pt,md:gt,txt:gt,yaml:_t,yml:_t,html:mt,css:mt,scss:mt};function df(e){return uf[e.split(`.`).pop()?.toLowerCase()??``]??vt}function ff({node:e,depth:t,projectName:n,onAction:r,onFileOpen:i}){let{expandedPaths:a,toggleExpand:o,selectedFiles:c,toggleFileSelect:l}=Hd(),u=Se(e=>e.openTab),d=a.has(e.path),f=e.type===`directory`,p=c.includes(e.path),m=e.ignored===!0;function h(t){if(f){o(e.path);return}if(t.metaKey||t.ctrlKey){l(e.path);return}let r=e.name.split(`.`).pop()?.toLowerCase()??``;u({type:r===`db`||r===`sqlite`||r===`sqlite3`?`sqlite`:`editor`,title:e.name,metadata:{filePath:e.path,projectName:n},projectId:n,closable:!0}),i?.()}let g=f?d?yt:xt:df(e.name),_=e.children?[...e.children].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1):[];return(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(Gd,{children:[(0,B.jsx)(Kd,{asChild:!0,children:(0,B.jsxs)(`button`,{onClick:h,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`,m&&`opacity-40`,p&&`bg-primary/15 ring-1 ring-primary/40`),style:{paddingLeft:`${t*16+8}px`},children:[f?d?(0,B.jsx)(s,{className:`size-3.5 shrink-0 text-text-subtle`}):(0,B.jsx)(tt,{className:`size-3.5 shrink-0 text-text-subtle`}):(0,B.jsx)(`span`,{className:`w-3.5 shrink-0`}),(0,B.jsx)(g,{className:L(`size-4 shrink-0`,f?`text-primary`:`text-text-secondary`)}),(0,B.jsx)(`span`,{className:`truncate`,children:e.name})]})}),(0,B.jsxs)(qd,{children:[f&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Jd,{onClick:()=>r(`new-file`,e),children:`New File`}),(0,B.jsx)(Jd,{onClick:()=>r(`new-folder`,e),children:`New Folder`}),(0,B.jsx)(Yd,{})]}),(0,B.jsx)(Jd,{onClick:()=>r(`rename`,e),children:`Rename`}),(0,B.jsx)(Jd,{variant:`destructive`,onClick:()=>r(`delete`,e),children:`Delete`}),(0,B.jsx)(Yd,{}),(0,B.jsx)(Jd,{onClick:()=>r(`copy-path`,e),children:`Copy Path`}),!f&&c.length===2&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Yd,{}),(0,B.jsx)(Jd,{onClick:()=>r(`compare-selected`,e),children:`Compare Selected`})]})]})]}),f&&d&&_.map(e=>(0,B.jsx)(ff,{node:e,depth:t+1,projectName:n,onAction:r,onFileOpen:i},e.path))]})}function pf({onFileOpen:e}={}){let{tree:t,loading:n,error:r,fetchTree:i,reset:a,selectedFiles:o,clearSelection:s}=Hd(),c=td(e=>e.activeProject),l=Se(e=>e.openTab),[u,d]=(0,z.useState)(null),f=(0,z.useCallback)(()=>{c&&i(c.name)},[c,i]);(0,z.useEffect)(()=>{c&&(a(),f())},[c?.name]),(0,z.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===`compare-selected`&&o.length===2){let e=o[0],t=o[1];l({type:`git-diff`,title:`Compare ${De(e)} vs ${De(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,B.jsx)(`div`,{className:`p-3 text-xs text-text-subtle`,children:`Select a project to browse files.`});if(n&&t.length===0)return(0,B.jsxs)(`div`,{className:`flex items-center gap-2 p-3 text-xs text-text-secondary`,children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin`}),`Loading files...`]});if(r)return(0,B.jsxs)(`div`,{className:`p-3 text-xs text-error`,children:[r,(0,B.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,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Ud,{className:`flex-1`,children:(0,B.jsxs)(`div`,{className:`py-1`,children:[m.map(t=>(0,B.jsx)(ff,{node:t,depth:0,projectName:c.name,onAction:p,onFileOpen:e},t.path)),m.length===0&&(0,B.jsx)(`p`,{className:`p-3 text-xs text-text-subtle`,children:`Empty project.`})]})}),u&&(0,B.jsx)(lf,{action:u.action,node:u.node,projectName:c.name,onClose:()=>d(null),onRefresh:f})]})}function mf({...e}){return(0,B.jsx)(os,{"data-slot":`dropdown-menu`,...e})}function hf({...e}){return(0,B.jsx)(ss,{"data-slot":`dropdown-menu-trigger`,...e})}function gf({className:e,sideOffset:t=4,...n}){return(0,B.jsx)(cs,{children:(0,B.jsx)(ls,{"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 _f({className:e,inset:t,variant:n=`default`,...r}){return(0,B.jsx)(us,{"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})}var vf={M:`text-yellow-500`,A:`text-green-500`,D:`text-red-500`,R:`text-blue-500`,C:`text-purple-500`,"?":`text-gray-400`};function yf(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 bf(e){let t=[];e.file&&t.push(e.file);for(let n of e.children)t.push(...bf(n));return t}function xf({metadata:e,tabId:t,onNavigate:n}){let r=e?.projectName,[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!0),[c,l]=(0,z.useState)(null),[u,d]=(0,z.useState)(``),[f,p]=(0,z.useState)(!1),[m,h]=(0,z.useState)(null),{openTab:g}=Se(),_=I(e=>e.gitStatusViewMode),v=I(e=>e.setGitStatusViewMode),y=(0,z.useCallback)(async()=>{if(r)try{s(!0),a(await R.get(`${ke(r)}/git/status`)),l(null)}catch(e){l(e instanceof Error?e.message:`Failed to fetch status`)}finally{s(!1)}},[r]);(0,z.useEffect)(()=>{y();let e=setInterval(y,5e3);return()=>clearInterval(e)},[y]);let b=async e=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/stage`,{files:e}),await y()}catch(e){l(e instanceof Error?e.message:`Stage failed`)}finally{p(!1)}}},x=async e=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/unstage`,{files:e}),await y()}catch(e){l(e instanceof Error?e.message:`Unstage failed`)}finally{p(!1)}}},S=async e=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/discard`,{files:e}),await y()}catch(e){l(e instanceof Error?e.message:`Discard failed`)}finally{p(!1)}}},C=async()=>{m&&(await S(m.files),h(null))},w=async()=>{if(!(!r||!u.trim()||!i?.staged.length)){p(!0);try{await R.post(`${ke(r)}/git/commit`,{message:u.trim()}),d(``),await y()}catch(e){l(e instanceof Error?e.message:`Commit failed`)}finally{p(!1)}}},T=async()=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/push`,{}),await y()}catch(e){l(e instanceof Error?e.message:`Push failed`)}finally{p(!1)}}},E=async()=>{if(r){p(!0);try{await R.post(`${ke(r)}/git/pull`,{}),await y()}catch(e){l(e instanceof Error?e.message:`Pull failed`)}finally{p(!1)}}},D=e=>{g({type:`git-diff`,title:De(e.path),closable:!0,metadata:{projectName:r,filePath:e.path},projectId:r??null}),n?.()},O=e=>{g({type:`editor`,title:De(e.path),closable:!0,metadata:{projectName:r,filePath:e.path},projectId:r??null}),n?.()},k=(0,z.useMemo)(()=>[...i?.unstaged??[],...i?.untracked.map(e=>({path:e,status:`?`}))??[]],[i]);return r?o&&!i?(0,B.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,B.jsx)(Mt,{className:`size-5 animate-spin`}),(0,B.jsx)(`span`,{className:`text-sm`,children:`Loading git status...`})]}):c&&!i?(0,B.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-destructive text-sm`,children:[(0,B.jsx)(`p`,{children:c}),(0,B.jsx)($,{variant:`outline`,size:`sm`,onClick:y,children:`Retry`})]}):(0,B.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b shrink-0`,children:[(0,B.jsx)(`span`,{className:`text-sm font-medium`,children:i?.current?`On: ${i.current}`:`Git Status`}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,B.jsx)($,{variant:_===`flat`?`secondary`:`ghost`,size:`icon-xs`,onClick:()=>v(`flat`),title:`Flat view`,children:(0,B.jsx)(jt,{className:`size-3.5`})}),(0,B.jsx)($,{variant:_===`tree`?`secondary`:`ghost`,size:`icon-xs`,onClick:()=>v(`tree`),title:`Tree view`,children:(0,B.jsx)(bt,{className:`size-3.5`})}),(0,B.jsx)($,{variant:`ghost`,size:`icon-xs`,onClick:y,disabled:f,children:(0,B.jsx)(qt,{className:o?`animate-spin`:``})})]})]}),c&&(0,B.jsx)(`div`,{className:`px-3 py-1.5 text-xs text-destructive bg-destructive/10 shrink-0`,children:c}),(0,B.jsx)(Ud,{className:`flex-1 overflow-hidden`,children:(0,B.jsxs)(`div`,{className:`p-1.5 space-y-2 overflow-hidden`,children:[(0,B.jsx)(Cf,{title:`Staged Changes`,count:i?.staged.length??0,files:i?.staged??[],viewMode:_,actionIcon:(0,B.jsx)(Lt,{className:`size-3`}),actionAllIcon:(0,B.jsx)(Lt,{className:`size-3`}),actionTitle:`Unstage`,onAction:e=>x([e.path]),onActionAll:i?.staged.length?()=>x(i.staged.map(e=>e.path)):void 0,actionAllLabel:`Unstage All`,onFolderAction:e=>x(e.map(e=>e.path)),onClickFile:D,onOpenFile:O,disabled:f}),(0,B.jsx)(Cf,{title:`Changes`,count:k.length,files:k,viewMode:_,actionIcon:(0,B.jsx)(Kt,{className:`size-3`}),actionAllIcon:(0,B.jsx)(Kt,{className:`size-3`}),actionTitle:`Stage`,onAction:e=>b([e.path]),onActionAll:k.length?()=>b(k.map(e=>e.path)):void 0,actionAllLabel:`Stage All`,onFolderAction:e=>b(e.map(e=>e.path)),onClickFile:D,onOpenFile:O,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,B.jsxs)(`div`,{className:`border-t p-2 space-y-2 shrink-0`,children:[(0,B.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)&&w()}}),(0,B.jsx)($,{size:`sm`,className:`w-full`,disabled:f||!u.trim()||!i?.staged.length,onClick:w,children:f?(0,B.jsx)(Mt,{className:`size-3 animate-spin`}):`Commit (${i?.staged.length??0})`}),(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsxs)($,{variant:`outline`,size:`sm`,className:`flex-1`,disabled:f,onClick:T,children:[(0,B.jsx)(Ye,{className:`size-3`}),`Push`]}),(0,B.jsxs)($,{variant:`outline`,size:`sm`,className:`flex-1`,disabled:f,onClick:E,children:[(0,B.jsx)(Ke,{className:`size-3`}),`Pull`]})]})]}),(0,B.jsx)(ef,{open:!!m,onOpenChange:e=>!e&&h(null),children:(0,B.jsxs)(rf,{showCloseButton:!1,children:[(0,B.jsxs)(af,{children:[(0,B.jsx)(sf,{children:`Discard Changes`}),(0,B.jsxs)(cf,{children:[`Are you sure you want to discard all changes to`,` `,(0,B.jsx)(`code`,{className:`px-1 py-0.5 rounded bg-muted text-sm font-mono`,children:m?.label}),`? This action cannot be undone.`]})]}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{variant:`outline`,onClick:()=>h(null),children:`Cancel`}),(0,B.jsx)($,{variant:`destructive`,onClick:C,disabled:f,children:f?(0,B.jsx)(Mt,{className:`size-3 animate-spin`}):`Discard`})]})]})})]}):(0,B.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`})}function Sf({showRevert:e,onRevert:t,onAction:n,onOpenFile:r,actionIcon:i,actionTitle:a,disabled:o}){return(0,B.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 opacity-0 group-hover:opacity-100 transition-opacity`,children:[r&&(0,B.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,B.jsx)(gt,{className:`size-3`})}),e&&t&&(0,B.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,B.jsx)(on,{className:`size-3`})}),(0,B.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 Cf({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,B.jsxs)(`div`,{children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between mb-0.5`,children:[(0,B.jsxs)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase`,children:[e,` (`,t,`)`]}),c&&t>0&&(0,B.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,B.jsx)(`p`,{className:`text-xs text-muted-foreground px-1`,children:`No changes`}):r===`flat`?(0,B.jsx)(`div`,{className:`w-full overflow-hidden`,children:n.map(e=>(0,B.jsx)(Tf,{file:e,actionIcon:i,actionTitle:o,onAction:s,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h},e.path))}):(0,B.jsx)(Ef,{files:n,actionIcon:i,actionTitle:o,onAction:s,onFolderAction:u,onClickFile:d,onOpenFile:f,disabled:p,showRevert:m,onRevert:h,onFolderRevert:g})]})}function wf(e,t,n=400){let r=(0,z.useRef)(null),i=(0,z.useRef)(!1),a=(0,z.useRef)(!1),o=(0,z.useCallback)(()=>{r.current&&=(clearTimeout(r.current),null)},[]);return{onTouchStart:(0,z.useCallback)(t=>{i.current=!1,a.current=!1,r.current=setTimeout(()=>{a.current=!0,e()},n)},[e,n]),onTouchMove:(0,z.useCallback)(()=>{i.current=!0,o()},[o]),onTouchEnd:(0,z.useCallback)(e=>{o(),!i.current&&!a.current&&(e.preventDefault(),t())},[o,t])}}function Tf({file:e,actionIcon:t,actionTitle:n,onAction:r,onClickFile:i,onOpenFile:a,disabled:o,showRevert:s,onRevert:c,displayName:l}){let[u,d]=(0,z.useState)(!1),f=wf((0,z.useCallback)(()=>d(!0),[]),(0,z.useCallback)(()=>i(e),[i,e])),p=(0,B.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,B.jsx)(`span`,{className:`text-xs font-mono w-4 text-center shrink-0 ${vf[e.status]??``}`,children:e.status}),(0,B.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,B.jsx)(`span`,{className:`md:hidden flex-1 text-left text-xs font-mono truncate min-w-0 select-none`,children:l??e.path}),(0,B.jsx)(Sf,{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,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`hidden md:block`,children:p}),(0,B.jsx)(`div`,{className:`md:hidden select-none`,...f,children:(0,B.jsxs)(mf,{open:u,onOpenChange:d,children:[(0,B.jsx)(hf,{asChild:!0,children:p}),(0,B.jsxs)(gf,{align:`start`,className:`min-w-40`,children:[(0,B.jsx)(_f,{onClick:()=>i(e),children:`View Diff`}),a&&(0,B.jsx)(_f,{onClick:()=>a(e),children:`Open File`}),(0,B.jsx)(_f,{onClick:()=>r(e),disabled:o,children:n}),s&&c&&(0,B.jsx)(_f,{className:`text-destructive focus:text-destructive`,onClick:()=>c(e),disabled:o,children:`Discard Changes`})]})]})})]})}function Ef({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,z.useMemo)(()=>yf(e),[e]);return(0,B.jsx)(`div`,{children:d.map((e,f)=>(0,B.jsx)(Df,{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 Df({node:e,depth:t,isLast:n,actionIcon:r,actionTitle:i,onAction:a,onFolderAction:o,onClickFile:c,onOpenFile:l,disabled:u,showRevert:d,onRevert:f,onFolderRevert:p}){let[m,h]=(0,z.useState)(!0),g=e.children.length>0&&!e.file,_=t*12-6,v=`absolute border-dashed border-border`;if(e.file)return(0,B.jsxs)(`div`,{className:`relative`,style:{paddingLeft:t*12},children:[t>0&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`${v} border-l`,style:{left:_,top:0,bottom:n?`50%`:0}}),(0,B.jsx)(`div`,{className:`${v} border-t`,style:{left:_,top:`50%`,width:6}})]}),(0,B.jsx)(Tf,{file:e.file,displayName:e.name,actionIcon:r,actionTitle:i,onAction:a,onClickFile:c,onOpenFile:l,disabled:u,showRevert:d,onRevert:f})]});if(g){let g=bf(e);return(0,B.jsxs)(`div`,{className:`relative`,children:[t>0&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`${v} border-l`,style:{left:_,top:0,...n?{height:13}:{bottom:0}}}),(0,B.jsx)(`div`,{className:`${v} border-t`,style:{left:_,top:13,width:8}})]}),(()=>{let n=(0,B.jsxs)(`div`,{className:`group relative flex items-center hover:bg-muted/50 rounded py-0.5`,style:{paddingLeft:t*12+2},children:[(0,B.jsxs)(`button`,{type:`button`,className:`flex items-center gap-1 flex-1 min-w-0 text-xs font-mono text-muted-foreground`,onClick:()=>h(!m),children:[m?(0,B.jsx)(s,{className:`size-3.5 shrink-0`}):(0,B.jsx)(tt,{className:`size-3.5 shrink-0`}),(0,B.jsx)(`span`,{className:`truncate font-semibold`,children:e.name}),(0,B.jsxs)(`span`,{className:`text-[10px] opacity-60 shrink-0`,children:[`(`,g.length,`)`]})]}),(0,B.jsx)(Sf,{showRevert:d,onRevert:p?()=>p(g,e.fullPath):void 0,onAction:()=>o?.(g),actionIcon:r,actionTitle:`${i} ${e.name}/`,disabled:u})]});return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`hidden md:block`,children:n}),(0,B.jsx)(`div`,{className:`md:hidden`,children:(0,B.jsxs)(mf,{children:[(0,B.jsx)(hf,{asChild:!0,children:n}),(0,B.jsxs)(gf,{align:`start`,className:`min-w-40`,children:[(0,B.jsxs)(_f,{onClick:()=>o?.(g),disabled:u,children:[i,` `,e.name,`/`]}),p&&(0,B.jsx)(_f,{className:`text-destructive focus:text-destructive`,onClick:()=>p(g,e.fullPath),disabled:u,children:`Discard Changes`})]})]})})]})})(),m&&(0,B.jsx)(`div`,{children:e.children.map((n,s)=>(0,B.jsx)(Df,{node:n,depth:t+1,isLast:s===e.children.length-1,actionIcon:r,actionTitle:i,onAction:a,onFolderAction:o,onClickFile:c,onOpenFile:l,disabled:u,showRevert:d,onRevert:f,onFolderRevert:p},n.fullPath))})]})}return null}function Of({className:e,orientation:t=`horizontal`,...n}){return(0,B.jsx)(_c,{"data-slot":`tabs`,"data-orientation":t,orientation:t,className:L(`group/tabs flex gap-2 data-[orientation=horizontal]:flex-col`,e),...n})}var kf=Qd(`group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none`,{variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`}},defaultVariants:{variant:`default`}});function Af({className:e,variant:t=`default`,...n}){return(0,B.jsx)(vc,{"data-slot":`tabs-list`,"data-variant":t,className:L(kf({variant:t}),e),...n})}function jf({className:e,...t}){return(0,B.jsx)(yc,{"data-slot":`tabs-trigger`,className:L(`relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent`,`data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground`,`after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100`,e),...t})}function Mf({className:e,...t}){return(0,B.jsx)(bc,{"data-slot":`tabs-content`,className:L(`flex-1 outline-none`,e),...t})}function Nf({className:e,orientation:t=`horizontal`,decorative:n=!0,...r}){return(0,B.jsx)(tc,{"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})}var Pf=[{key:`general`,label:`General`},{key:`tabs`,label:`Tabs`},{key:`projects`,label:`Projects`}],Ff=[`Ctrl+T`,`Ctrl+W`,`Ctrl+N`,`Ctrl+Tab`,`Ctrl+L`,`Ctrl+H`,`Ctrl+J`,`F5`,`Ctrl+R`,`Ctrl+Shift+I`,`Ctrl+Shift+J`];function If({actionId:e,combo:t,locked:n}){let[r,i]=(0,z.useState)(!1),a=gd(e=>e.setBinding),o=(0,z.useRef)(null),s=(0,z.useCallback)(t=>{if(t.preventDefault(),t.stopPropagation(),t.key===`Escape`){i(!1);return}let n=hd(t);n&&(a(e,n),i(!1))},[e,a]);return(0,z.useEffect)(()=>{if(r)return document.addEventListener(`keydown`,s,!0),()=>document.removeEventListener(`keydown`,s,!0)},[r,s]),(0,z.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,B.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,B.jsx)(Nt,{className:`size-2.5`}),md(t)]}):r?(0,B.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,B.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:md(t)})}function Lf(){let{getBinding:e,resetBinding:t,resetAll:n,overrides:r}=gd();return(0,B.jsxs)(`div`,{className:`space-y-3`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-text-secondary`,children:`Keyboard Shortcuts`}),Object.keys(r).length>0&&(0,B.jsxs)($,{variant:`ghost`,size:`sm`,className:`h-6 text-[10px] text-muted-foreground`,onClick:n,children:[(0,B.jsx)(S,{className:`size-3 mr-1`}),`Reset all`]})]}),(0,B.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,B.jsx)(an,{className:`size-3.5 text-amber-500 shrink-0 mt-0.5`}),(0,B.jsxs)(`p`,{className:`text-[10px] text-muted-foreground leading-relaxed`,children:[`Some shortcuts (`,Ff.slice(0,4).join(`, `),`...) are reserved by the browser and cannot be overridden.`]})]}),Pf.map(n=>{let i=ud.filter(e=>e.category===n.key);return i.length===0?null:(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:n.label}),(0,B.jsx)(`div`,{className:`space-y-0.5`,children:i.map(n=>{let i=e(n.id),a=n.id in r;return(0,B.jsxs)(`div`,{className:`flex items-center justify-between py-1 px-1 rounded hover:bg-surface-elevated/50 transition-colors`,children:[(0,B.jsxs)(`div`,{className:`flex flex-col min-w-0`,children:[(0,B.jsx)(`span`,{className:`text-xs text-foreground`,children:n.label}),n.note&&(0,B.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:n.note})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0 ml-2`,children:[(0,B.jsx)(If,{actionId:n.id,combo:i,locked:n.locked}),a&&!n.locked&&(0,B.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,B.jsx)(S,{className:`size-3`})})]})]},n.id)})})]},n.key)})]})}function Rf(){let[e,t]=(0,z.useState)({bot_token:``,chat_id:``}),[n,r]=(0,z.useState)(``),[i,a]=(0,z.useState)(``),[o,s]=(0,z.useState)(!1),[c,l]=(0,z.useState)(!1),[u,d]=(0,z.useState)(null);(0,z.useEffect)(()=>{R.get(`/api/settings/telegram`).then(e=>{t(e),a(e.chat_id)}).catch(()=>{})},[]);let f=async()=>{s(!0),d(null);try{let e={chat_id:i};n&&(e.bot_token=n),t(await R.put(`/api/settings/telegram`,e)),r(``),d({type:`ok`,msg:`Saved`})}catch(e){d({type:`err`,msg:e.message})}finally{s(!1)}},p=async()=>{l(!0),d(null);try{await R.post(`/api/settings/telegram/test`,{...n?{bot_token:n}:{},...i?{chat_id:i}:{}}),d({type:`ok`,msg:`Test message sent!`})}catch(e){d({type:`err`,msg:e.message})}finally{l(!1)}},m=!!e.bot_token;return(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(`label`,{className:`text-[11px] text-text-subtle`,children:`Bot Token`}),(0,B.jsx)(A,{type:`password`,placeholder:m?`•••••• (saved)`:`123456:ABC-DEF...`,value:n,onChange:e=>r(e.target.value),className:`h-7 text-xs`})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(`label`,{className:`text-[11px] text-text-subtle`,children:`Chat ID`}),(0,B.jsx)(A,{placeholder:`-1001234567890`,value:i,onChange:e=>a(e.target.value),className:`h-7 text-xs`}),(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle`,children:`Personal or group chat ID`})]}),(0,B.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,B.jsx)($,{variant:`default`,size:`sm`,className:`h-7 text-xs flex-1`,disabled:o||!n&&!i,onClick:f,children:o?`...`:`Save`}),(0,B.jsxs)($,{variant:`outline`,size:`sm`,className:`h-7 text-xs gap-1`,disabled:c||!m,onClick:p,children:[(0,B.jsx)(Zt,{className:`size-3`}),c?`...`:`Test`]})]}),u&&(0,B.jsx)(`p`,{className:`text-[11px] ${u.type===`ok`?`text-green-600 dark:text-green-400`:`text-destructive`}`,children:u.msg})]})}var zf=Qd(`inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2`,{variants:{variant:{default:`border-transparent bg-primary text-primary-foreground shadow`,secondary:`border-transparent bg-secondary text-secondary-foreground`,destructive:`border-transparent bg-destructive text-destructive-foreground shadow`,outline:`text-foreground`}},defaultVariants:{variant:`default`}});function Bf({className:e,variant:t,...n}){return(0,B.jsx)(`div`,{className:L(zf({variant:t}),e),...n})}function Vf(e){return e.startsWith(`sk-ant-oat`)?`OAuth token (Claude Max/Pro)`:e.startsWith(`sk-ant-api`)?`API key`:`Unknown format`}function Hf(e){return e>=90?`text-red-500`:e>=70?`text-amber-500`:`text-green-500`}function Uf({profile:e,open:t,onClose:n}){let r=e.account,i=e.organization;return(0,B.jsx)(ef,{open:t,onOpenChange:e=>!e&&n(),children:(0,B.jsxs)(rf,{className:`sm:max-w-md`,children:[(0,B.jsx)(af,{children:(0,B.jsx)(sf,{className:`text-sm`,children:`Account Profile`})}),(0,B.jsxs)(`div`,{className:`space-y-3 text-xs`,children:[r&&(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium text-muted-foreground`,children:`User`}),(0,B.jsxs)(`div`,{className:`grid grid-cols-[80px_1fr] gap-1 text-xs`,children:[r.display_name&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Name`}),(0,B.jsx)(`span`,{children:r.display_name})]}),r.email&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Email`}),(0,B.jsx)(`span`,{children:r.email})]}),r.uuid&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`UUID`}),(0,B.jsx)(`span`,{className:`font-mono text-[10px] break-all`,children:r.uuid})]})]})]}),i&&(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Organization`}),(0,B.jsxs)(`div`,{className:`grid grid-cols-[80px_1fr] gap-1 text-xs`,children:[i.name&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Name`}),(0,B.jsx)(`span`,{children:i.name})]}),i.organization_type&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Type`}),(0,B.jsx)(`span`,{children:i.organization_type})]}),i.rate_limit_tier&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Tier`}),(0,B.jsx)(`span`,{children:i.rate_limit_tier})]}),i.subscription_status&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Status`}),(0,B.jsx)(`span`,{children:i.subscription_status})]}),i.has_extra_usage_enabled!==void 0&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`Extra usage`}),(0,B.jsx)(`span`,{children:i.has_extra_usage_enabled?`Enabled`:`Disabled`})]})]})]}),!r&&!i&&(0,B.jsx)(`p`,{className:`text-muted-foreground`,children:`No profile data available.`})]}),(0,B.jsx)(of,{children:(0,B.jsx)($,{size:`sm`,variant:`outline`,className:`text-xs h-7`,onClick:n,children:`Close`})})]})})}function Wf(){let[e,t]=(0,z.useState)([]),[n,i]=(0,z.useState)(null),[a,o]=(0,z.useState)(null),[s,c]=(0,z.useState)(new Map),[l,u]=(0,z.useState)(!0),[d,f]=(0,z.useState)(null),p=(0,z.useRef)(null);function m(e){p.current&&clearTimeout(p.current),f(e),p.current=setTimeout(()=>f(null),4e3)}let[h,g]=(0,z.useState)(!1),[_,v]=(0,z.useState)(``),[y,b]=(0,z.useState)(``),[x,S]=(0,z.useState)(!1),[C,w]=(0,z.useState)(null),[T,E]=(0,z.useState)(null),[D,O]=(0,z.useState)(null),[k,ee]=(0,z.useState)(``),[te,ne]=(0,z.useState)(!1),[re,j]=(0,z.useState)(`idle`),[M,ie]=(0,z.useState)(!1),[N,P]=(0,z.useState)(``),[ce,ue]=(0,z.useState)(``),[de,fe]=(0,z.useState)(new Set),[ve,ye]=(0,z.useState)(!1),[be,F]=(0,z.useState)(!1),[xe,Se]=(0,z.useState)(``),[Ce,I]=(0,z.useState)(``),[we,Te]=(0,z.useState)(!1),[Ee,L]=(0,z.useState)(null);(0,z.useEffect)(()=>{De()},[]);async function De(){u(!0);let[e,n,r,a]=await Promise.allSettled([ze(),Le(),je(),Fe()]);e.status===`fulfilled`&&t(e.value),n.status===`fulfilled`&&o(n.value),r.status===`fulfilled`&&i(r.value?.id??null),a.status===`fulfilled`&&c(new Map(a.value.map(e=>[e.accountId,e.usage]))),u(!1)}async function Oe(){if(_.trim()){S(!0),w(null);try{await Be({apiKey:_.trim(),label:y.trim()||void 0}),m({type:`success`,text:`Account added successfully!`}),g(!1),v(``),b(``),w(null),De()}catch(e){w(e.message)}S(!1)}}async function ke(){ne(!0),w(null);try{let{url:e,state:t}=await Ve();O(t),j(`waiting`),window.open(e,`_blank`)}catch(e){w(e.message)}ne(!1)}async function R(){if(!(!k.trim()||!D)){ne(!0),w(null);try{let e=k.trim();e.includes(`#`)&&(e=e.split(`#`)[0]??e),await Pe(e,D),m({type:`success`,text:`Account connected via OAuth!`}),g(!1),He(),De()}catch(e){w(e.message)}ne(!1)}}function He(){O(null),ee(``),j(`idle`),w(null)}async function Ue(e,t){await Ne(e,{status:t===`disabled`?`active`:`disabled`}),De()}async function We(e,t){confirm(`Remove account ${t??e}?`)&&(await Re(e),De())}function Ge(e){if(!e)return`Never`;let t=Math.floor(Date.now()/1e3-e);return t<60?`Just now`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`}function Ke(e){if(!e)return``;let t=e-Math.floor(Date.now()/1e3);return t<=0?``:t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}function qe(e){if(e.status===`active`||e.status===`disabled`)return null;let t=Ke(e.cooldownUntil);return(0,B.jsxs)(Bf,{variant:`destructive`,className:`text-[10px] px-1.5 py-0`,children:[`Cooldown`,t?` (${t})`:``]})}function Je(){P(``),ue(``),fe(new Set(e.map(e=>e.id))),ie(!0)}function Ye(e){Se(``),I(e??``),L(null),F(!0)}async function Xe(e){if(!(N.length<4)&&N===ce){ye(!0);try{let t={"Content-Type":`application/json`},n=Ae();n&&(t.Authorization=`Bearer ${n}`);let r=await fetch(`/api/accounts/export`,{method:`POST`,headers:t,body:JSON.stringify({password:N,accountIds:[...de]})});if(!r.ok){let e=await r.json();throw Error(e.error??`Export failed: ${r.status}`)}let i=await r.text();if(e)try{await navigator.clipboard.writeText(i),m({type:`success`,text:`Backup copied to clipboard!`})}catch{let e=new Blob([i],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`ppm-accounts-backup.json`,t.click(),URL.revokeObjectURL(t.href),m({type:`success`,text:`Clipboard unavailable — downloaded as file.`})}else{let e=new Blob([i],{type:`application/json`}),t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`ppm-accounts-backup.json`,t.click(),URL.revokeObjectURL(t.href),m({type:`success`,text:`Backup downloaded.`})}ie(!1)}catch(e){m({type:`error`,text:e.message})}ye(!1)}}async function Ze(){if(!(!Ce.trim()||!xe)){Te(!0),L(null);try{let e=await Me({data:Ce.trim(),password:xe}),t=e.refreshed>0?` (${e.refreshed} tokens refreshed — source machine will need re-login)`:``;m({type:`success`,text:`Imported ${e.imported} account(s).${t}`}),F(!1),De()}catch(e){L(e.message||`Import failed`)}Te(!1)}}let Qe=_.trim()?Vf(_.trim()):``;return(0,B.jsxs)(`div`,{className:`space-y-4`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground mb-3`,children:`Connect multiple Claude accounts. PPM rotates between them automatically to avoid rate limits.`}),d&&(0,B.jsx)(`div`,{className:`text-[11px] mb-3 p-2 rounded ${d.type===`success`?`bg-green-500/10 text-green-600`:`bg-red-500/10 text-red-600`}`,children:d.text}),(0,B.jsxs)(`div`,{className:`space-y-1.5 mb-3`,children:[l&&(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Loading...`}),!l&&e.length===0&&(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`No accounts connected.`}),e.map(e=>{let t=s.get(e.id);return(0,B.jsxs)(`div`,{className:`p-2.5 rounded-lg border bg-card space-y-1.5`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-1`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0 flex-1`,children:[(0,B.jsx)(`span`,{className:`text-xs font-medium truncate`,children:e.label??e.email??e.id.slice(0,8)}),qe(e)]}),(0,B.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[e.profileData&&(0,B.jsx)($,{size:`icon`,variant:`ghost`,className:`size-7 cursor-pointer text-muted-foreground hover:text-foreground`,onClick:()=>E(e.profileData),title:`View profile`,children:(0,B.jsx)(me,{className:`size-3`})}),(0,B.jsx)(_e,{checked:e.status!==`disabled`,onCheckedChange:()=>Ue(e.id,e.status),disabled:e.status===`cooldown`,className:`scale-[0.65] cursor-pointer`}),(0,B.jsx)($,{size:`icon`,variant:`ghost`,className:`size-7 cursor-pointer text-muted-foreground hover:text-destructive`,onClick:()=>We(e.id,e.email),title:`Remove`,children:(0,B.jsx)(r,{className:`size-3`})})]})]}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-[10px] text-muted-foreground`,children:[(0,B.jsxs)(`div`,{className:`flex gap-1.5 items-center min-w-0 truncate`,children:[e.email&&e.label&&(0,B.jsx)(`span`,{className:`truncate`,children:e.email}),(0,B.jsxs)(`span`,{children:[e.totalRequests,` req`,e.totalRequests===1?``:`s`]}),(0,B.jsxs)(`span`,{children:[`· `,Ge(e.lastUsedAt)]})]}),t&&(t.session||t.weekly)&&(0,B.jsxs)(`div`,{className:`flex gap-2 shrink-0 tabular-nums`,children:[t.session&&(0,B.jsxs)(`span`,{className:Hf(Math.round(t.session.utilization*100)),children:[`5h `,Math.round(t.session.utilization*100),`%`]}),t.weekly&&(0,B.jsxs)(`span`,{className:Hf(Math.round(t.weekly.utilization*100)),children:[`Wk `,Math.round(t.weekly.utilization*100),`%`]})]})]})]},e.id)})]}),(0,B.jsxs)(`div`,{className:`grid grid-cols-3 gap-1.5`,children:[(0,B.jsx)($,{size:`sm`,className:`h-8 text-xs cursor-pointer`,onClick:()=>g(!0),children:`+ Add`}),(0,B.jsxs)($,{size:`sm`,variant:`outline`,className:`h-8 text-xs cursor-pointer`,onClick:()=>Je(),children:[(0,B.jsx)(ut,{className:`size-3.5 mr-1`}),` Export`]}),(0,B.jsxs)($,{size:`sm`,variant:`outline`,className:`h-8 text-xs cursor-pointer`,onClick:()=>Ye(),children:[(0,B.jsx)(se,{className:`size-3.5 mr-1`}),` Import`]})]})]}),a&&(0,B.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Rotation Settings`}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`label`,{className:`text-[11px] text-muted-foreground w-20 shrink-0`,children:`Strategy`}),(0,B.jsxs)(he,{value:a.strategy,onValueChange:async e=>{o(await Ie({strategy:e}))},children:[(0,B.jsx)(pe,{className:`w-32 h-7 text-xs`,children:(0,B.jsx)(ge,{})}),(0,B.jsxs)(le,{children:[(0,B.jsx)(ae,{value:`round-robin`,children:`Round-robin`}),(0,B.jsx)(ae,{value:`fill-first`,children:`Fill-first`}),(0,B.jsx)(ae,{value:`lowest-usage`,children:`Lowest usage`})]})]})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`label`,{className:`text-[11px] text-muted-foreground w-20 shrink-0`,children:`Max retry`}),(0,B.jsx)(`input`,{type:`number`,min:0,value:a.maxRetry,className:`w-14 h-7 text-xs border rounded px-2 bg-background`,onChange:async e=>{let t=parseInt(e.target.value,10);!isNaN(t)&&t>=0&&o(await Ie({maxRetry:t}))}}),(0,B.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:`(0 = try all)`})]}),(0,B.jsxs)(`p`,{className:`text-[11px] text-muted-foreground`,children:[`Active accounts: `,a.activeCount]})]}),T&&(0,B.jsx)(Uf,{profile:T,open:!!T,onClose:()=>E(null)}),(0,B.jsx)(ef,{open:h,onOpenChange:e=>{g(e),e||He()},children:(0,B.jsxs)(rf,{className:`sm:max-w-md`,children:[(0,B.jsxs)(af,{children:[(0,B.jsx)(sf,{className:`text-sm`,children:`Add Claude Account`}),(0,B.jsx)(cf,{className:`text-xs leading-relaxed`,children:`Connect your Claude account via OAuth (recommended) or paste a token manually.`})]}),(0,B.jsxs)(`div`,{className:`space-y-3`,children:[(0,B.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium`,children:`Recommended: Login with Claude`}),(0,B.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Fetches your profile, enables auto-refresh, and uses the correct permissions.`}),re===`idle`?(0,B.jsx)($,{size:`sm`,className:`w-full h-8 text-xs`,onClick:ke,disabled:te,children:te?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin mr-1`}),` Opening...`]}):`Login with Claude`}):(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Authorize in the opened tab, then paste the code shown on the page:`}),(0,B.jsx)(A,{placeholder:`Paste code here...`,value:k,onChange:e=>ee(e.target.value),className:`text-xs h-8 font-mono`,autoFocus:!0}),(0,B.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,B.jsx)($,{size:`sm`,className:`flex-1 h-7 text-xs`,onClick:R,disabled:!k.trim()||te,children:te?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin mr-1`}),` Connecting...`]}):`Connect Account`}),(0,B.jsx)($,{size:`sm`,variant:`ghost`,className:`h-7 text-xs`,onClick:He,children:`Cancel`})]})]})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`div`,{className:`flex-1 border-t`}),(0,B.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`or paste token manually`}),(0,B.jsx)(`div`,{className:`flex-1 border-t`})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{htmlFor:`token`,className:`text-xs`,children:`Token`}),(0,B.jsx)(A,{id:`token`,type:`password`,placeholder:`sk-ant-...`,value:_,onChange:e=>v(e.target.value),className:`text-xs h-8 font-mono`}),Qe&&(0,B.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[`Detected: `,Qe]})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{htmlFor:`label`,className:`text-xs`,children:`Label (optional)`}),(0,B.jsx)(A,{id:`label`,placeholder:`e.g. Personal, Work`,value:y,onChange:e=>b(e.target.value),className:`text-xs h-8`})]}),(0,B.jsxs)(`div`,{className:`rounded-md bg-muted/50 p-2.5 space-y-1.5`,children:[(0,B.jsx)(`p`,{className:`text-[10px] font-medium text-muted-foreground`,children:`How to get a token manually:`}),(0,B.jsxs)(`div`,{className:`text-[10px] text-muted-foreground space-y-1`,children:[(0,B.jsxs)(`p`,{children:[(0,B.jsx)(`span`,{className:`font-medium`,children:`Claude Max/Pro:`}),` Run `,(0,B.jsx)(`code`,{className:`bg-background rounded px-1 font-mono`,children:`claude setup-token`})]}),(0,B.jsx)(`p`,{className:`text-[9px]`,children:`Valid 1 year but no auto-refresh, may lack profile data.`}),(0,B.jsxs)(`p`,{children:[(0,B.jsx)(`span`,{className:`font-medium`,children:`API key:`}),` `,(0,B.jsx)(`a`,{href:`https://console.anthropic.com/settings/keys`,target:`_blank`,rel:`noopener noreferrer`,className:`text-primary underline hover:no-underline`,children:`console.anthropic.com/settings/keys`})]})]})]})]}),C&&(0,B.jsx)(`div`,{className:`text-[11px] p-2 rounded bg-red-500/10 text-red-600`,children:C}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{size:`sm`,variant:`outline`,className:`text-xs h-7`,onClick:()=>{g(!1),He()},children:`Cancel`}),(0,B.jsx)($,{size:`sm`,className:`text-xs h-7`,onClick:Oe,disabled:!_.trim()||x,children:x?`Adding...`:`Add Token`})]})]})}),(0,B.jsx)(ef,{open:M,onOpenChange:e=>{e||ie(!1)},children:(0,B.jsxs)(rf,{className:`sm:max-w-md`,children:[(0,B.jsxs)(af,{children:[(0,B.jsxs)(sf,{className:`text-sm flex items-center gap-1.5`,children:[(0,B.jsx)(Nt,{className:`size-3.5`}),` Export Accounts`]}),(0,B.jsx)(cf,{className:`text-xs`,children:`Select accounts and set a password to protect the backup.`})]}),(0,B.jsxs)(`div`,{className:`space-y-3`,children:[(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between mb-1`,children:[(0,B.jsx)(`p`,{className:`text-[11px] font-medium text-muted-foreground`,children:`Accounts to export`}),(0,B.jsx)(`button`,{className:`text-[10px] text-primary hover:underline cursor-pointer`,onClick:()=>fe(de.size===e.length?new Set:new Set(e.map(e=>e.id))),children:de.size===e.length?`Deselect all`:`Select all`})]}),(0,B.jsx)(`div`,{className:`max-h-36 overflow-y-auto space-y-1 border rounded p-2`,children:e.map(e=>(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`input`,{type:`checkbox`,id:`exp-${e.id}`,checked:de.has(e.id),onChange:t=>{let n=new Set(de);t.target.checked?n.add(e.id):n.delete(e.id),fe(n)},className:`size-3.5 accent-primary cursor-pointer`}),(0,B.jsxs)(`label`,{htmlFor:`exp-${e.id}`,className:`text-xs cursor-pointer truncate`,children:[e.label??e.email??e.id.slice(0,8),e.email&&e.label&&(0,B.jsxs)(`span`,{className:`text-muted-foreground ml-1 text-[10px]`,children:[`(`,e.email,`)`]})]})]},e.id))})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{className:`text-xs`,children:`Password`}),(0,B.jsx)(A,{type:`password`,placeholder:`Min 4 characters`,value:N,onChange:e=>P(e.target.value),className:`text-xs h-8`,autoComplete:`new-password`})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{className:`text-xs`,children:`Confirm password`}),(0,B.jsx)(A,{type:`password`,placeholder:`Re-enter password`,value:ce,onChange:e=>ue(e.target.value),className:`text-xs h-8`,autoComplete:`new-password`}),ce&&N!==ce&&(0,B.jsx)(`p`,{className:`text-[10px] text-red-500`,children:`Passwords do not match`})]}),(0,B.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Encrypted with AES-256-GCM + scrypt. Keep the password safe — it cannot be recovered.`})]}),(0,B.jsxs)(of,{className:`gap-1.5 flex-col sm:flex-row`,children:[(0,B.jsx)($,{size:`sm`,variant:`outline`,className:`text-xs h-7 cursor-pointer`,onClick:()=>ie(!1),children:`Cancel`}),(0,B.jsxs)($,{size:`sm`,variant:`outline`,className:`text-xs h-7 cursor-pointer`,disabled:N.length<4||N!==ce||de.size===0||ve,onClick:()=>Xe(!0),children:[(0,B.jsx)(ct,{className:`size-3 mr-1`}),` Copy to clipboard`]}),(0,B.jsx)($,{size:`sm`,className:`text-xs h-7 cursor-pointer`,disabled:N.length<4||N!==ce||de.size===0||ve,onClick:()=>Xe(!1),children:ve?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin mr-1`}),` Exporting...`]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(ut,{className:`size-3 mr-1`}),` Download`]})})]})]})}),(0,B.jsx)(ef,{open:be,onOpenChange:e=>{e||F(!1)},children:(0,B.jsxs)(rf,{className:`sm:max-w-md`,children:[(0,B.jsxs)(af,{children:[(0,B.jsxs)(sf,{className:`text-sm flex items-center gap-1.5`,children:[(0,B.jsx)(Nt,{className:`size-3.5`}),` Import Accounts`]}),(0,B.jsx)(cf,{className:`text-xs`,children:`Paste or load the backup data, then enter the password used during export.`})]}),(0,B.jsxs)(`div`,{className:`space-y-3`,children:[(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{className:`text-xs`,children:`Backup data`}),(0,B.jsx)(`textarea`,{value:Ce,onChange:e=>I(e.target.value),placeholder:`Paste backup JSON here...`,rows:4,className:`w-full text-xs p-2 rounded border border-border bg-background font-mono resize-none focus:outline-none focus:ring-1 focus:ring-primary`})]}),(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(oe,{className:`text-xs`,children:`Password`}),(0,B.jsx)(A,{type:`password`,placeholder:`Password used during export`,value:xe,onChange:e=>Se(e.target.value),className:`text-xs h-8`,autoComplete:`current-password`})]})]}),Ee&&(0,B.jsx)(`div`,{className:`text-[11px] p-2 rounded bg-red-500/10 text-red-600`,children:Ee}),(0,B.jsxs)(of,{children:[(0,B.jsx)($,{size:`sm`,variant:`outline`,className:`text-xs h-7 cursor-pointer`,onClick:()=>F(!1),children:`Cancel`}),(0,B.jsx)($,{size:`sm`,className:`text-xs h-7 cursor-pointer`,disabled:!Ce.trim()||!xe||we,onClick:Ze,children:we?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin mr-1`}),` Importing...`]}):`Import`})]})]})})]})}function Gf(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 Kf(){let[e,t]=(0,z.useState)(`default`),[n,r]=(0,z.useState)(!1),[i,a]=(0,z.useState)(!1),[o,s]=(0,z.useState)(null);return(0,z.useEffect)(()=>{`Notification`in window&&t(Notification.permission),r(localStorage.getItem(`ppm-push-subscribed`)===`true`)},[]),{permission:e,isSubscribed:n,loading:i,error:o,subscribe:(0,z.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=Ae();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:Gf(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,z.useCallback)(async()=>{a(!0);try{let e=await(await navigator.serviceWorker.ready).pushManager.getSubscription();if(e){let t={"Content-Type":`application/json`},n=Ae();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 qf=[{value:`light`,label:`Light`,icon:tn},{value:`dark`,label:`Dark`,icon:zt},{value:`system`,label:`System`,icon:Rt}],Jf=`PushManager`in window&&`serviceWorker`in navigator,Yf=/iPhone|iPad/.test(navigator.userAgent)&&!window.matchMedia(`(display-mode: standalone)`).matches,Xf=[{value:`general`,label:`General`,icon:N},{value:`ai`,label:`AI`,icon:ce},{value:`notifications`,label:`Notifs`,icon:Xe},{value:`accounts`,label:`Accounts`,icon:cn},{value:`shortcuts`,label:`Keys`,icon:Ot}];function Zf(){let{theme:e,setTheme:t,deviceName:n,setDeviceName:r,version:i}=I(),{permission:a,isSubscribed:o,loading:s,error:l,subscribe:u,unsubscribe:d}=Kf(),[f,p]=(0,z.useState)(n??``),[m,h]=(0,z.useState)(!1),[g,_]=(0,z.useState)(!1),v=(0,z.useRef)(void 0),y=f.trim()!==(n??``),b=(0,z.useCallback)(async()=>{if(y){h(!0);try{await r(f),_(!0),clearTimeout(v.current),v.current=setTimeout(()=>_(!1),2e3)}finally{h(!1)}}},[f,y,r]);return(0,B.jsx)(`div`,{className:`h-full w-full flex flex-col`,children:(0,B.jsxs)(Of,{defaultValue:`general`,className:`flex-1 flex flex-col min-h-0`,children:[(0,B.jsxs)(`div`,{className:`shrink-0 px-3 pt-3 pb-1`,children:[(0,B.jsx)(`h2`,{className:`text-sm font-semibold mb-2`,children:`Settings`}),(0,B.jsx)(Af,{className:`w-full h-8 p-0.5 bg-muted rounded-md`,children:Xf.map(e=>{let t=e.icon;return(0,B.jsxs)(jf,{value:e.value,className:`flex-1 gap-1 text-[11px] h-7 px-1.5 cursor-pointer data-[state=active]:text-foreground`,children:[(0,B.jsx)(t,{className:`size-3.5 shrink-0`}),(0,B.jsx)(`span`,{className:`hidden sm:inline`,children:e.label})]},e.value)})})]}),(0,B.jsxs)(`div`,{className:`flex-1 min-h-0`,children:[(0,B.jsx)(Mf,{value:`general`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsxs)(`div`,{className:`p-3 space-y-4`,children:[(0,B.jsxs)(`section`,{className:`space-y-2`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Device Name`}),(0,B.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,B.jsx)(A,{value:f,onChange:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&b()},placeholder:`My Device`,className:`h-8 text-xs flex-1`,maxLength:100}),(0,B.jsx)($,{variant:g?`default`:`outline`,size:`sm`,className:`h-8 text-xs px-3 cursor-pointer`,disabled:!y||m,onClick:b,children:m?`...`:g?(0,B.jsx)(c,{className:`size-3.5`}):`Save`})]}),(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Shown in page title and synced to PPM Cloud.`})]}),(0,B.jsx)(Nf,{}),(0,B.jsxs)(`section`,{className:`space-y-2`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Theme`}),(0,B.jsx)(`div`,{className:`flex gap-1.5`,children:qf.map(n=>{let r=n.icon;return(0,B.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,B.jsx)(r,{className:`size-3.5`}),n.label]},n.value)})})]}),(0,B.jsx)(Nf,{}),(0,B.jsxs)(`section`,{className:`space-y-1.5`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,B.jsx)(Dt,{className:`size-3.5 text-muted-foreground`}),(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`About`})]}),(0,B.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`PPM — Personal Project Manager`}),(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`A mobile-first web IDE for managing your projects.`}),i&&(0,B.jsxs)(`p`,{className:`text-[11px] text-muted-foreground tabular-nums`,children:[`Version `,i]})]})]})})}),(0,B.jsx)(Mf,{value:`ai`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsx)(`div`,{className:`p-3`,children:(0,B.jsx)(fe,{compact:!0})})})}),(0,B.jsx)(Mf,{value:`notifications`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsxs)(`div`,{className:`p-3 space-y-4`,children:[(0,B.jsxs)(`section`,{className:`space-y-2`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Push Notifications`}),Jf?(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[o?(0,B.jsx)(Ze,{className:`size-3.5`}):(0,B.jsx)(P,{className:`size-3.5`}),(0,B.jsx)(`span`,{className:`text-xs`,children:`Push notifications`})]}),(0,B.jsx)($,{variant:o?`default`:`outline`,size:`sm`,className:`h-7 text-xs cursor-pointer`,disabled:s||a===`denied`,onClick:()=>o?d():u(),children:s?`...`:o?`On`:`Off`})]}),o&&(0,B.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`}),l&&(0,B.jsx)(`p`,{className:`text-[11px] text-destructive`,children:l}),a===`denied`&&(0,B.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Notifications blocked. Enable in browser settings.`}),Yf&&(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`On iOS, install PPM to Home Screen for push notifications.`})]}):(0,B.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Push notifications not supported in this browser.`})]}),(0,B.jsx)(Nf,{}),(0,B.jsxs)(`section`,{className:`space-y-2`,children:[(0,B.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Telegram`}),(0,B.jsx)(Rf,{})]})]})})}),(0,B.jsx)(Mf,{value:`accounts`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsx)(`div`,{className:`p-3`,children:(0,B.jsx)(Wf,{})})})}),(0,B.jsx)(Mf,{value:`shortcuts`,className:`h-full m-0`,children:(0,B.jsx)(Ud,{className:`h-full`,children:(0,B.jsx)(`div`,{className:`p-3`,children:(0,B.jsx)(Lf,{})})})})]})]})})}function Qf({connections:e,cachedTables:t,onOpenTable:n,onRefreshTables:r,onEdit:i,onDelete:a}){let[o,c]=(0,z.useState)(new Set),[l,u]=(0,z.useState)(new Set([`__ungrouped__`])),[d,f]=(0,z.useState)(new Set),[p,m]=(0,z.useState)(new Map),h=e=>{c(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},g=e=>{u(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},_=async e=>{f(t=>new Set(t).add(e));try{await r(e)}finally{f(t=>{let n=new Set(t);return n.delete(e),n})}},v={};for(let t of e){let e=t.group_name??`__ungrouped__`;(v[e]??=[]).push(t)}let y=Object.keys(v).sort((e,t)=>e===`__ungrouped__`?1:t===`__ungrouped__`?-1:e.localeCompare(t));return e.length===0?(0,B.jsxs)(`p`,{className:`px-4 py-6 text-xs text-text-subtle text-center`,children:[`No connections yet.`,(0,B.jsx)(`br`,{}),`Click + to add one.`]}):(0,B.jsx)(`div`,{className:`py-1`,children:y.map(e=>{let r=l.has(e),c=e===`__ungrouped__`?`Ungrouped`:e,u=v[e],f=y.length>1||e!==`__ungrouped__`;return(0,B.jsxs)(`div`,{children:[f&&(0,B.jsxs)(`button`,{onClick:()=>g(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,B.jsx)(s,{className:`size-3`}):(0,B.jsx)(tt,{className:`size-3`}),c]}),r&&(0,B.jsx)(`div`,{className:f?`ml-[11px] border-l border-dashed border-border`:``,children:u.map(e=>{let r=o.has(e.id),c=t.get(e.id)??[],l=d.has(e.id);return(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`div`,{className:L(`group flex items-center gap-1 py-1 hover:bg-surface-elevated transition-colors`,f?`pl-3 pr-2`:`px-2`),children:[(0,B.jsx)(`button`,{onClick:()=>{h(e.id),!o.has(e.id)&&c.length===0&&_(e.id)},className:`shrink-0 text-text-subtle hover:text-foreground transition-colors`,children:r?(0,B.jsx)(s,{className:`size-3`}):(0,B.jsx)(tt,{className:`size-3`})}),(0,B.jsx)(`span`,{className:`shrink-0 size-2 rounded-full border border-border`,style:{backgroundColor:e.color??`transparent`}}),(0,B.jsx)(`button`,{className:`flex-1 text-left text-xs truncate hover:text-primary transition-colors`,onClick:()=>{h(e.id),!o.has(e.id)&&c.length===0&&_(e.id)},children:e.name}),(0,B.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,B.jsx)(`span`,{title:`Readonly`,children:(0,B.jsx)(Nt,{className:`shrink-0 size-2.5 text-text-subtle`,"aria-label":`Readonly`})}),(0,B.jsxs)(`div`,{className:`hidden group-hover:flex items-center gap-0.5 shrink-0`,children:[(0,B.jsx)(`button`,{onClick:()=>_(e.id),disabled:l,className:`p-0.5 text-text-subtle hover:text-foreground transition-colors`,title:`Refresh tables`,children:(0,B.jsx)(qt,{className:L(`size-3`,l&&`animate-spin`)})}),(0,B.jsx)(`button`,{onClick:()=>i(e),className:`p-0.5 text-text-subtle hover:text-foreground transition-colors`,title:`Edit`,children:(0,B.jsx)(Gt,{className:`size-3`})}),(0,B.jsx)(`button`,{onClick:()=>a(e.id),className:`p-0.5 text-text-subtle hover:text-red-500 transition-colors`,title:`Delete`,children:(0,B.jsx)(rn,{className:`size-3`})})]})]}),r&&(0,B.jsxs)(`div`,{className:`ml-[11px] border-l border-dashed border-border pl-3`,children:[l&&c.length===0&&(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`Loading…`}),!l&&c.length===0&&(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`No tables cached`}),c.length>0&&(0,B.jsx)(ep,{connId:e.id,tables:c,filter:p.get(e.id)??``,onFilterChange:t=>m(n=>new Map(n).set(e.id,t)),onOpenTable:(t,r)=>n(e,t,r)})]})]},e.id)})})]},e)})})}var $f=200;function ep({connId:e,tables:t,filter:n,onFilterChange:r,onOpenTable:i}){let a=(0,z.useMemo)(()=>{if(!n)return t;let e=n.toLowerCase();return t.filter(t=>t.tableName.toLowerCase().includes(e))},[t,n]);return(0,B.jsxs)(`div`,{children:[t.length>5&&(0,B.jsxs)(`div`,{className:`flex items-center gap-1 px-1 py-0.5`,children:[(0,B.jsx)(Xt,{className:`size-2.5 text-text-subtle shrink-0`}),(0,B.jsx)(`input`,{type:`text`,value:n,onChange:e=>r(e.target.value),placeholder:`Filter tables…`,className:`w-full text-[10px] bg-transparent border-none outline-none text-foreground placeholder:text-text-subtle`})]}),(0,B.jsxs)(`div`,{className:`overflow-y-auto`,style:{maxHeight:$f},children:[a.map(t=>(0,B.jsxs)(`button`,{onClick:()=>i(t.tableName,t.schemaName),className:`w-full flex items-center gap-1.5 px-2 py-0.5 text-[11px] text-text-secondary hover:text-foreground hover:bg-surface-elevated transition-colors text-left truncate`,children:[(0,B.jsx)(lt,{className:`size-2.5 shrink-0 text-text-subtle`}),(0,B.jsx)(`span`,{className:`truncate`,children:t.tableName})]},`${e}-${t.schemaName}.${t.tableName}`)),n&&a.length===0&&(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle px-2 py-1`,children:`No match`})]})]})}var tp=`ppm-recent-paths`,np=5,rp=[{name:`Home`,path:`~`,icon:Et},{name:`Desktop`,path:`~/Desktop`,icon:Rt},{name:`Documents`,path:`~/Documents`,icon:gt},{name:`Downloads`,path:`~/Downloads`,icon:ut}];function ip(){try{return JSON.parse(localStorage.getItem(tp)??`[]`)}catch{return[]}}function ap(e){let t=[e,...ip().filter(t=>t!==e)].slice(0,np);localStorage.setItem(tp,JSON.stringify(t))}function op(e){return e==null?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function sp(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 cp(e){if(e.type===`directory`)return(0,B.jsx)(xt,{className:`size-4 text-blue-500`});let t=e.name.split(`.`).pop()?.toLowerCase();return t&&[`db`,`sqlite`,`sqlite3`].includes(t)?(0,B.jsx)(lt,{className:`size-4 text-amber-500`}):(0,B.jsx)(vt,{className:`size-4 text-text-subtle`})}function lp(e,t){if(!t?.length)return!0;let n=`.`+e.split(`.`).pop()?.toLowerCase();return t.includes(n)}function up({open:e,mode:t,accept:n,root:r,title:i,onSelect:a,onCancel:o}){let[s,c]=(0,z.useState)([]),[l,u]=(0,z.useState)(``),[d,f]=(0,z.useState)(null),[p,m]=(0,z.useState)([]),[h,g]=(0,z.useState)(null),[_,v]=(0,z.useState)(!1),[y,b]=(0,z.useState)(null),[x,S]=(0,z.useState)(``),[C,w]=(0,z.useState)(``),[T,E]=(0,z.useState)(!1),[D,O]=(0,z.useState)([]),k=(0,z.useRef)(null),ee=typeof window<`u`&&window.innerWidth<768,te=t===`folder`?`Select Folder`:t===`file`?`Select File`:`Select File or Folder`,ne=(0,z.useCallback)(async(e,t)=>{v(!0),b(null),g(null),S(``);try{let n=new URLSearchParams;e&&n.set(`path`,e),t&&n.set(`showHidden`,`true`);let r=await R.get(`/api/fs/browse?${n}`);c(r.entries),u(r.current),f(r.parent),m(r.breadcrumbs),w(r.current)}catch(e){b(e.message||`Failed to browse directory`)}finally{v(!1)}},[]);(0,z.useEffect)(()=>{e&&(ne(r??`~`,T),O(ip()))},[e,r,ne,T]);let re=e=>ne(e,T),j=()=>{let e=!T;E(e),ne(l||(r??`~`),e)},M=e=>{e.key===`Enter`&&C.trim()&&ne(C.trim())},ie=e=>{e.type===`directory`?t===`file`?re(e.path):g(e.path):t!==`folder`&&g(e.path)},ae=e=>{e.type===`directory`&&re(e.path)},oe=()=>{h&&(ap(l),a(h))},se=s.filter(e=>!(x&&!e.name.toLowerCase().includes(x.toLowerCase())||e.type===`file`&&n?.length&&!lp(e.name,n))),N=e=>e.type===`directory`?t!==`file`:t!==`folder`,P=(0,B.jsxs)(`div`,{className:`flex flex-col flex-1 min-h-0`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5 px-3 py-2 border-b border-border`,children:[d&&(0,B.jsx)($,{variant:`ghost`,size:`icon`,className:`size-7 shrink-0`,onClick:()=>re(d),children:(0,B.jsx)(qe,{className:`size-4`})}),(0,B.jsx)(A,{value:C,onChange:e=>w(e.target.value),onKeyDown:M,placeholder:`Type path and press Enter`,className:`h-7 text-xs font-mono flex-1`})]}),(0,B.jsx)(`div`,{className:`flex items-center gap-0.5 px-3 py-1.5 border-b border-border overflow-x-auto text-xs`,children:p.map((e,t)=>(0,B.jsxs)(`span`,{className:`flex items-center shrink-0`,children:[t>0&&(0,B.jsx)(tt,{className:`size-3 text-text-subtle mx-0.5`}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>re(e.path),className:`hover:text-primary hover:underline text-text-secondary`,children:e.name})]},e.path))}),(0,B.jsxs)(`div`,{className:`flex flex-1 min-h-0 overflow-hidden`,children:[!ee&&(0,B.jsxs)(`div`,{className:`w-36 border-r border-border py-2 px-1 shrink-0 overflow-y-auto`,children:[rp.map(e=>(0,B.jsxs)(`button`,{type:`button`,onClick:()=>re(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`,l.endsWith(e.name)&&`bg-primary/10 text-primary`),children:[(0,B.jsx)(e.icon,{className:`size-3.5`}),e.name]},e.path)),D.length>0&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`text-[10px] text-text-subtle px-2 mt-3 mb-1 font-medium`,children:`Recent`}),D.map(e=>(0,B.jsxs)(`button`,{type:`button`,onClick:()=>re(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,B.jsx)(ot,{className:`size-3 shrink-0`}),(0,B.jsx)(`span`,{className:`truncate`,children:e.split(`/`).pop()})]},e))]})]}),(0,B.jsx)(Ud,{className:`flex-1 min-h-0`,children:_?(0,B.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,B.jsx)(Mt,{className:`size-5 animate-spin text-text-subtle`})}):y?(0,B.jsx)(`div`,{className:`text-center py-8 text-xs text-red-500`,children:y}):se.length===0?(0,B.jsx)(`div`,{className:`text-center py-8 text-xs text-text-subtle`,children:x?`No matching entries`:`Empty directory`}):(0,B.jsx)(`div`,{ref:k,className:`py-1`,children:se.map(e=>{let t=N(e);return(0,B.jsxs)(`button`,{type:`button`,onClick:()=>ie(e),onDoubleClick:()=>ae(e),className:L(`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors`,h===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:[cp(e),(0,B.jsx)(`span`,{className:L(`flex-1 truncate`,e.type===`directory`&&`font-medium`),children:e.name}),(0,B.jsx)(`span`,{className:`text-text-subtle text-[10px] shrink-0 w-14 text-right`,children:op(e.size)}),(0,B.jsx)(`span`,{className:`text-text-subtle text-[10px] shrink-0 w-14 text-right`,children:sp(e.modified)})]},e.path)})})})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-t border-border shrink-0`,children:[(0,B.jsx)($,{variant:`ghost`,size:`icon`,className:L(`size-7 shrink-0`,T&&`text-primary`),onClick:j,title:T?`Hide hidden files`:`Show hidden files`,children:T?(0,B.jsx)(me,{className:`size-3.5`}):(0,B.jsx)(ft,{className:`size-3.5`})}),n?.length?(0,B.jsx)(`span`,{className:`text-[10px] text-text-subtle bg-surface-hover px-1.5 py-0.5 rounded`,children:n.join(`, `)}):null,(0,B.jsx)(`div`,{className:`flex-1 max-w-48`,children:(0,B.jsxs)(`div`,{className:`relative`,children:[(0,B.jsx)(Xt,{className:`absolute left-2 top-1/2 -translate-y-1/2 size-3 text-text-subtle`}),(0,B.jsx)(A,{value:x,onChange:e=>S(e.target.value),placeholder:`Filter...`,className:`h-6 text-[11px] pl-6`})]})}),(0,B.jsx)(`div`,{className:`flex-1`}),(0,B.jsx)($,{variant:`outline`,size:`sm`,onClick:o,className:`h-7 text-xs`,children:`Cancel`}),(0,B.jsx)($,{size:`sm`,onClick:oe,disabled:!h,className:`h-7 text-xs`,children:`Select`})]})]});return(0,B.jsx)(ef,{open:e,onOpenChange:e=>{e||o()},children:(0,B.jsxs)(rf,{className:L(`p-0 gap-0 overflow-hidden flex flex-col`,ee?`max-w-[95vw] h-[85vh]`:`max-w-2xl h-[70vh]`),children:[(0,B.jsx)(af,{className:`px-3 py-2 border-b border-border`,children:(0,B.jsx)(sf,{className:`text-sm`,children:i??te})}),P]})})}function dp({mode:e,accept:t,root:n,title:r,onSelect:i,className:a}){let[o,s]=(0,z.useState)(!1);return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)($,{type:`button`,variant:`ghost`,size:`icon`,className:L(`size-8 shrink-0`,a),onClick:()=>s(!0),title:r??`Browse...`,children:(0,B.jsx)(yt,{className:`size-4`})}),(0,B.jsx)(up,{open:o,mode:e,accept:t,root:n,title:r,onSelect:e=>{i(e),s(!1)},onCancel:()=>s(!1)})]})}var fp=[`#ef4444`,`#f97316`,`#eab308`,`#22c55e`,`#06b6d4`,`#3b82f6`,`#8b5cf6`,`#ec4899`,`#6b7280`,`#000000`];function pp({value:e,onChange:t}){return(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[(0,B.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,B.jsx)(`span`,{className:`absolute inset-0 flex items-center justify-center text-[8px] text-text-subtle`,children:`×`})}),fp.map(n=>(0,B.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,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`div`,{className:`size-6 rounded-full border border-border shrink-0`,style:{backgroundColor:e??`transparent`}}),(0,B.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 mp({open:e,onClose:t,connection:n,onSave:r,onUpdate:i,onTest:a}){let o=!!n,[s,c]=(0,z.useState)({name:``,type:`postgres`,path:``,connectionString:``,groupName:``,color:null,readonly:!0}),[l,u]=(0,z.useState)(!1),[d,f]=(0,z.useState)(null),[p,m]=(0,z.useState)(!1),[h,g]=(0,z.useState)(null);(0,z.useEffect)(()=>{if(!e){f(null),g(null);return}c(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 _=(e,t)=>{c(n=>({...n,[e]:t})),f(null)};return(0,B.jsx)(ef,{open:e,onOpenChange:e=>{e||t()},children:(0,B.jsxs)(rf,{className:`max-w-md`,children:[(0,B.jsx)(af,{children:(0,B.jsx)(sf,{children:o?`Edit Connection`:`Add Connection`})}),(0,B.jsxs)(`div`,{className:`space-y-3 py-1`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Name *`}),(0,B.jsx)(`input`,{value:s.name,onChange:e=>_(`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,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Type`}),(0,B.jsxs)(`select`,{value:s.type,onChange:e=>_(`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,B.jsx)(`option`,{value:`postgres`,children:`PostgreSQL`}),(0,B.jsx)(`option`,{value:`sqlite`,children:`SQLite`})]})]}),s.type===`postgres`?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Connection String *`}),(0,B.jsx)(`input`,{type:`password`,value:s.connectionString,onChange:e=>_(`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,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`File Path *`}),(0,B.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,B.jsx)(`input`,{value:s.path,onChange:e=>_(`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,B.jsx)(dp,{mode:`file`,accept:[`.db`,`.sqlite`,`.sqlite3`],title:`Browse for SQLite database`,onSelect:e=>_(`path`,e)})]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Group`}),(0,B.jsx)(`input`,{value:s.groupName,onChange:e=>_(`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,B.jsxs)(`div`,{children:[(0,B.jsx)(`label`,{className:`text-xs font-medium text-text-secondary mb-1 block`,children:`Tab Color`}),(0,B.jsx)(pp,{value:s.color,onChange:e=>_(`color`,e)})]}),o&&(0,B.jsxs)(`div`,{className:`flex items-center justify-between py-1`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`text-xs font-medium`,children:`Readonly`}),(0,B.jsx)(`p`,{className:`text-[10px] text-text-subtle`,children:`Block non-SELECT queries (AI protection)`})]}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>_(`readonly`,!s.readonly),className:`relative w-9 h-5 rounded-full transition-colors ${s.readonly?`bg-primary`:`bg-border`}`,children:(0,B.jsx)(`span`,{className:`absolute top-0.5 left-0.5 size-4 rounded-full bg-white transition-transform ${s.readonly?`translate-x-4`:``}`})})]}),d&&(0,B.jsx)(`p`,{className:`text-xs ${d.ok?`text-green-500`:`text-red-500`}`,children:d.ok?`✓ Connection successful`:`✗ ${d.error}`}),h&&(0,B.jsx)(`p`,{className:`text-xs text-red-500`,children:h})]}),(0,B.jsxs)(of,{children:[o&&(0,B.jsx)($,{variant:`outline`,size:`sm`,onClick:async()=>{if(o){u(!0),f(null);try{f(await a(n.id))}finally{u(!1)}}},disabled:l,className:`mr-auto`,children:l?`Testing…`:`Test Connection`}),(0,B.jsx)($,{variant:`outline`,size:`sm`,onClick:t,children:`Cancel`}),(0,B.jsx)($,{size:`sm`,onClick:async()=>{if(g(null),!s.name.trim()){g(`Name is required`);return}m(!0);try{if(o&&i){let e=(s.type===`postgres`?s.connectionString.trim():s.path.trim())?s.type===`postgres`?{type:`postgres`,connectionString:s.connectionString}:{type:`sqlite`,path:s.path}:void 0;await i(n.id,{name:s.name.trim(),...e!==void 0&&{connectionConfig:e},groupName:s.groupName.trim()||null,color:s.color,readonly:s.readonly?1:0})}else if(r){let e=s.type===`postgres`?{type:`postgres`,connectionString:s.connectionString}:{type:`sqlite`,path:s.path};await r({type:s.type,name:s.name.trim(),connectionConfig:e,groupName:s.groupName.trim()||void 0,color:s.color??void 0})}t()}catch(e){g(e.message)}finally{m(!1)}},disabled:p,children:p?`Saving…`:o?`Save`:`Add`})]})]})})}function hp({onExport:e,onImport:t}){let[n,r]=(0,z.useState)(!1),i=(0,z.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(`
|
|
20
20
|
`)}`),alert(a)}catch(e){alert(`Import failed: ${e.message}`)}};return(0,B.jsxs)(`div`,{className:`relative`,children:[(0,B.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,B.jsx)(dt,{className:`size-3.5`})}),n&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:a}),(0,B.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,B.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,B.jsx)(ut,{className:`size-3`}),` Export to file`]}),(0,B.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,B.jsx)(at,{className:`size-3`}),` Export to clipboard`]}),(0,B.jsx)(`div`,{className:`border-t border-border my-1`}),(0,B.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,B.jsx)(se,{className:`size-3`}),` Import from file`]}),(0,B.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,B.jsx)(it,{className:`size-3`}),` Import from clipboard`]})]})]}),(0,B.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 gp(){let[e,t]=(0,z.useState)([]),[n,r]=(0,z.useState)(!0),[i,a]=(0,z.useState)(new Map),o=(0,z.useCallback)(async()=>{try{t(await R.get(`/api/db/connections`))}catch{}finally{r(!1)}},[]);return(0,z.useEffect)(()=>{o()},[o]),{connections:e,loading:n,cachedTables:i,createConnection:(0,z.useCallback)(async e=>{let n=await R.post(`/api/db/connections`,e);return t(e=>[...e,n]),n},[]),updateConnection:(0,z.useCallback)(async(e,n)=>{let r=await R.put(`/api/db/connections/${e}`,n);t(t=>t.map(t=>t.id===e?r:t))},[]),deleteConnection:(0,z.useCallback)(async e=>{await R.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})},[]),testConnection:(0,z.useCallback)(async e=>R.post(`/api/db/connections/${e}/test`),[]),refreshTables:(0,z.useCallback)(async e=>{let t=(await R.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))},[]),exportConnections:(0,z.useCallback)(async()=>R.get(`/api/db/connections/export`),[]),importConnections:(0,z.useCallback)(async e=>{let t=await R.post(`/api/db/connections/import`,e);return await o(),t},[o])}}function _p(){let{connections:e,loading:t,cachedTables:n,createConnection:r,updateConnection:i,deleteConnection:a,testConnection:o,refreshTables:s,exportConnections:c,importConnections:l}=gp(),u=Se(e=>e.openTab),[d,f]=(0,z.useState)(!1),[p,m]=(0,z.useState)(null);return(0,B.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[(0,B.jsx)(`span`,{className:`text-[10px] font-semibold text-text-subtle uppercase tracking-wider`,children:`Database`}),(0,B.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,B.jsx)(hp,{onExport:c,onImport:l}),(0,B.jsx)(`button`,{onClick:()=>f(!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,B.jsx)(Kt,{className:`size-3.5`})})]})]}),(0,B.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:t?(0,B.jsx)(`p`,{className:`px-4 py-6 text-xs text-text-subtle text-center`,children:`Loading…`}):(0,B.jsx)(Qf,{connections:e,cachedTables:n,onOpenTable:(e,t,n)=>{u({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:s,onEdit:m,onDelete:async e=>{confirm(`Delete this connection?`)&&await a(e)}})}),(0,B.jsx)(mp,{open:d,onClose:()=>f(!1),onSave:async e=>{let t=await r(e);t&&s(t.id).catch(()=>{})},onTest:()=>Promise.resolve({ok:!1,error:`Save connection first`})}),p&&(0,B.jsx)(mp,{open:!!p,onClose:()=>m(null),connection:p,onUpdate:async(e,t)=>{await i(e,t)},onTest:e=>o(e)})]})}function vp(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 yp({text:e,re:t}){if(!t)return(0,B.jsx)(`span`,{children:e});try{t.lastIndex=0;let n=e.split(t);return t.lastIndex=0,(0,B.jsx)(`span`,{children:n.map((e,n)=>(t.lastIndex=0,t.test(e)?(0,B.jsx)(`mark`,{className:`bg-yellow-300/40 text-foreground rounded-sm`,children:e},n):e))})}catch{return(0,B.jsx)(`span`,{children:e})}}function bp({active:e,onClick:t,title:n,children:r}){return(0,B.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 xp(){let{activeProject:e}=td(),t=Se(e=>e.openTab),[n,i]=(0,z.useState)(``),[a,o]=(0,z.useState)(!1),[c,l]=(0,z.useState)(!1),[u,d]=(0,z.useState)(!1),[f,p]=(0,z.useState)(!1),[m,h]=(0,z.useState)(``),[g,_]=(0,z.useState)(``),[v,y]=(0,z.useState)(!1),[b,x]=(0,z.useState)(null),[S,C]=(0,z.useState)([]),[w,T]=(0,z.useState)(0),[E,D]=(0,z.useState)(!1),[O,k]=(0,z.useState)(new Set),A=(0,z.useRef)(null),ee=(0,z.useRef)(null),te=(0,z.useCallback)(async(t,n,r,i,a)=>{if(p(!1),!e||!i&&t.length<2||i&&t.length<1){C([]),T(0);return}if(i)try{new RegExp(t)}catch{p(!0),C([]);return}D(!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 R.get(`${ke(e.name)}/files/search?${o}`);C(s.results),T(s.total)}catch{C([])}finally{D(!1)}},[e]);(0,z.useEffect)(()=>(ee.current&&clearTimeout(ee.current),ee.current=setTimeout(()=>te(n,a,c,u,m),300),()=>{ee.current&&clearTimeout(ee.current)}),[n,a,c,u,m,te]),(0,z.useEffect)(()=>{A.current?.focus()},[]);let ne=vp(n,a,c,u);function re(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 j(e){k(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function M(){if(!e||!n||S.length===0||v)return;y(!0),x(null);let t=0;try{for(let r of S){let i=await R.get(`${ke(e.name)}/files/read?path=${encodeURIComponent(r.file)}`),o=vp(n,a,c,u);if(!o)continue;o.lastIndex=0;let s=i.content.match(o)??[];if(!s.length)continue;t+=s.length,o.lastIndex=0;let l=i.content.replace(o,g);await R.put(`${ke(e.name)}/files/write`,{path:r.file,content:l})}x(t),te(n,a,c,u,m)}catch{}finally{y(!1)}}return(0,B.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,B.jsxs)(`div`,{className:`p-2 border-b border-border space-y-1.5`,children:[(0,B.jsx)(`div`,{className:`relative flex items-center gap-1`,children:(0,B.jsxs)(`div`,{className:`relative flex-1`,children:[(0,B.jsx)(Xt,{className:`absolute left-2 top-1/2 -translate-y-1/2 size-3.5 text-text-subtle pointer-events-none`}),(0,B.jsx)(`input`,{ref:A,value:n,onChange:e=>{i(e.target.value),x(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`,f?`border-destructive`:`border-border`)}),n&&(0,B.jsx)(`button`,{onClick:()=>{i(``),C([]),T(0),p(!1),x(null)},className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-text-subtle hover:text-foreground`,children:(0,B.jsx)(r,{className:`size-3`})})]})}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,B.jsx)(bp,{active:a,onClick:()=>o(e=>!e),title:`Match Case (Alt+C)`,children:(0,B.jsx)($e,{className:`size-3.5`})}),(0,B.jsx)(bp,{active:c,onClick:()=>{l(e=>!e),u&&d(!1)},title:`Match Whole Word (Alt+W)`,children:(0,B.jsx)(ln,{className:`size-3.5`})}),(0,B.jsx)(bp,{active:u,onClick:()=>{d(e=>!e),c&&l(!1)},title:`Use Regular Expression (Alt+R)`,children:(0,B.jsx)(Jt,{className:`size-3.5`})}),f&&(0,B.jsx)(`span`,{className:`text-[10px] text-destructive ml-1`,children:`Invalid regex`})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,B.jsxs)(`div`,{className:`relative flex-1`,children:[(0,B.jsx)(`input`,{value:g,onChange:e=>_(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`}),g&&(0,B.jsx)(`button`,{onClick:()=>_(``),className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-text-subtle hover:text-foreground`,children:(0,B.jsx)(r,{className:`size-3`})})]}),(0,B.jsx)(`button`,{onClick:M,disabled:!n||S.length===0||v,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:v?(0,B.jsx)(Mt,{className:`size-3.5 animate-spin`}):(0,B.jsx)(Yt,{className:`size-3.5`})})]}),(0,B.jsxs)(`div`,{className:`relative`,children:[(0,B.jsx)(`input`,{value:m,onChange:e=>h(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`}),m&&(0,B.jsx)(`button`,{onClick:()=>h(``),className:`absolute right-1.5 top-1/2 -translate-y-1/2 text-text-subtle hover:text-foreground`,children:(0,B.jsx)(r,{className:`size-3`})})]}),(0,B.jsxs)(`div`,{className:`text-[10px] text-text-subtle h-3`,children:[(E||v)&&(0,B.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,B.jsx)(Mt,{className:`size-2.5 animate-spin`}),v?`Replacing…`:`Searching…`]}),!E&&!v&&b!==null&&(0,B.jsxs)(`span`,{className:`text-green-500`,children:[b,` replacement`,b===1?``:`s`,` made`]}),!E&&!v&&b===null&&!f&&n.length>=2&&S.length===0&&(0,B.jsx)(`span`,{children:`No results`}),!E&&!v&&b===null&&w>0&&(0,B.jsxs)(`span`,{children:[w,` result`,w===1?``:`s`,` in `,S.length,` file`,S.length===1?``:`s`]})]})]}),(0,B.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:S.map(e=>{let t=O.has(e.file),n=e.file.split(`/`).pop()??e.file,r=e.file.includes(`/`)?e.file.slice(0,e.file.lastIndexOf(`/`)):``;return(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`button`,{onClick:()=>j(e.file),className:`w-full flex items-center gap-1 px-2 py-1 hover:bg-muted/50 text-left`,children:[t?(0,B.jsx)(tt,{className:`size-3 shrink-0 text-text-subtle`}):(0,B.jsx)(s,{className:`size-3 shrink-0 text-text-subtle`}),(0,B.jsx)(gt,{className:`size-3 shrink-0 text-text-subtle`}),(0,B.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate`,children:n}),(0,B.jsx)(`span`,{className:`text-[10px] text-text-subtle truncate flex-1 min-w-0 ml-1`,children:r}),(0,B.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,B.jsxs)(`button`,{onClick:()=>re(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,B.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0 w-7 text-right pt-px`,children:t.lineNum}),(0,B.jsx)(`span`,{className:`text-xs text-text-secondary truncate font-mono leading-4`,children:(0,B.jsx)(yp,{text:t.content.trimStart(),re:ne})})]},`${e.file}-${t.lineNum}`))]},e.file)})})]})}var Sp=[{id:`explorer`,label:`Explorer`,icon:yt},{id:`search`,label:`Search`,icon:Xt},{id:`git`,label:`Git`,icon:St},{id:`database`,label:`Database`,icon:lt},{id:`settings`,label:`Settings`,icon:Qt}];function Cp({onResize:e}){let t=(0,z.useRef)(!1);return(0,B.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,z.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,z.useCallback)(n=>{t.current&&e(n.clientX-48)},[e]),onPointerUp:(0,z.useCallback)(e=>{t.current=!1,e.currentTarget.releasePointerCapture(e.pointerId),document.body.style.cursor=``,document.body.style.userSelect=``},[])})}function wp(){let{activeProject:e}=td(),t=I(e=>e.sidebarCollapsed),n=I(e=>e.sidebarWidth),r=I(e=>e.toggleSidebar),i=I(e=>e.setSidebarWidth),a=I(e=>e.sidebarActiveTab),o=I(e=>e.setSidebarActiveTab);return t?(0,B.jsx)(`aside`,{className:`hidden md:flex flex-col w-10 min-w-10 bg-background border-r border-border`,children:(0,B.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,B.jsx)(Wt,{className:`size-4`})})}):(0,B.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,B.jsxs)(`div`,{className:`flex items-center h-[41px] border-b border-border shrink-0`,children:[Sp.map(e=>{let t=e.icon;return(0,B.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,B.jsx)(t,{className:`size-3.5`,title:e.label})},e.id)}),(0,B.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,B.jsx)(Ut,{className:`size-3.5`})})]}),(0,B.jsxs)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:[a===`explorer`&&(e?(0,B.jsx)(pf,{}):(0,B.jsx)(`div`,{className:`flex items-center justify-center h-24 p-4`,children:(0,B.jsx)(`p`,{className:`text-xs text-text-subtle text-center`,children:`Select a project to browse files`})})),a===`git`&&(0,B.jsx)(xf,{metadata:{projectName:e?.name}}),a===`search`&&(0,B.jsx)(xp,{}),a===`database`&&(0,B.jsx)(_p,{}),a===`settings`&&(0,B.jsx)(Zf,{})]}),(0,B.jsx)(Cp,{onResize:i})]})}var Tp=Object.defineProperty,Ep=Object.getOwnPropertySymbols,Dp=Object.prototype.hasOwnProperty,Op=Object.prototype.propertyIsEnumerable,kp=(e,t,n)=>t in e?Tp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ap=(e,t)=>{for(var n in t||={})Dp.call(t,n)&&kp(e,n,t[n]);if(Ep)for(var n of Ep(t))Op.call(t,n)&&kp(e,n,t[n]);return e},jp=(e,t)=>{var n={};for(var r in e)Dp.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&Ep)for(var r of Ep(e))t.indexOf(r)<0&&Op.call(e,r)&&(n[r]=e[r]);return n},Mp;(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})(Mp||={}),(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||={})})(Mp||={}),(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||={})})(Mp||={});var Np=Mp,Pp={L:Np.QrCode.Ecc.LOW,M:Np.QrCode.Ecc.MEDIUM,Q:Np.QrCode.Ecc.QUARTILE,H:Np.QrCode.Ecc.HIGH},Fp=128,Ip=`L`,Lp=`#FFFFFF`,Rp=`#000000`,zp=!1,Bp=1,Vp=4,Hp=0,Up=.1;function Wp(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 Gp(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 Kp(e,t,n,r){if(r==null)return null;let i=e.length+n*2,a=Math.floor(t*Up),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 qp(e,t){return t==null?e?Vp:Hp:Math.max(Math.floor(t),0)}function Jp({value:e,level:t,minVersion:n,includeMargin:r,marginSize:i,imageSettings:a,size:o,boostLevel:s}){let c=z.useMemo(()=>{let r=(Array.isArray(e)?e:[e]).reduce((e,t)=>(e.push(...Np.QrSegment.makeSegments(t)),e),[]);return Np.QrCode.encodeSegments(r,Pp[t],n,void 0,void 0,s)},[e,t,n,s]),{cells:l,margin:u,numCells:d,calculatedImageSettings:f}=z.useMemo(()=>{let e=c.getModules(),t=qp(r,i);return{cells:e,margin:t,numCells:e.length+t*2,calculatedImageSettings:Kp(e,o,t,a)}},[c,o,a,r,i]);return{qrcode:c,margin:u,cells:l,numCells:d,calculatedImageSettings:f}}var Yp=function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0}(),Xp=z.forwardRef(function(e,t){let n=e,{value:r,size:i=Fp,level:a=Ip,bgColor:o=Lp,fgColor:s=Rp,includeMargin:c=zp,minVersion:l=Bp,boostLevel:u,marginSize:d,imageSettings:f}=n,p=jp(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`marginSize`,`imageSettings`]),{style:m}=p,h=jp(p,[`style`]),g=f?.src,_=z.useRef(null),v=z.useRef(null),y=z.useCallback(e=>{_.current=e,typeof t==`function`?t(e):t&&(t.current=e)},[t]),[b,x]=z.useState(!1),{margin:S,cells:C,numCells:w,calculatedImageSettings:T}=Jp({value:r,level:a,minVersion:l,boostLevel:u,includeMargin:c,marginSize:d,imageSettings:f,size:i});z.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=Gp(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,Yp?t.fill(new Path2D(Wp(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)}}),z.useEffect(()=>{x(!1)},[g]);let E=Ap({height:i,width:i},m),D=null;return g!=null&&(D=z.createElement(`img`,{src:g,key:g,style:{display:`none`},onLoad:()=>{x(!0)},ref:v,crossOrigin:T?.crossOrigin})),z.createElement(z.Fragment,null,z.createElement(`canvas`,Ap({style:E,height:i,width:i,ref:y,role:`img`},h)),D)});Xp.displayName=`QRCodeCanvas`;var Zp=z.forwardRef(function(e,t){let n=e,{value:r,size:i=Fp,level:a=Ip,bgColor:o=Lp,fgColor:s=Rp,includeMargin:c=zp,minVersion:l=Bp,boostLevel:u,title:d,marginSize:f,imageSettings:p}=n,m=jp(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`title`,`marginSize`,`imageSettings`]),{margin:h,cells:g,numCells:_,calculatedImageSettings:v}=Jp({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=Gp(g,v.excavation)),b=z.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=Wp(y,h);return z.createElement(`svg`,Ap({height:i,width:i,viewBox:`0 0 ${_} ${_}`,ref:t,role:`img`},m),!!d&&z.createElement(`title`,null,d),z.createElement(`path`,{fill:o,d:`M0,0 h${_}v${_}H0z`,shapeRendering:`crispEdges`}),z.createElement(`path`,{fill:s,d:x,shapeRendering:`crispEdges`}),b)});Zp.displayName=`QRCodeSVG`;function Qp({onClose:e}){let[t,n]=(0,z.useState)(null),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!0),[c,l]=(0,z.useState)(!1),[u,d]=(0,z.useState)(!1),[f,p]=(0,z.useState)(!1),[m,h]=(0,z.useState)(null),[g,_]=(0,z.useState)(null),[v,y]=(0,z.useState)(null),[b,x]=(0,z.useState)(!1);(0,z.useEffect)(()=>{(async()=>{try{let[e,t]=await Promise.all([R.get(`/api/cloud/status`),R.get(`/api/tunnel`)]);n(e),a(t)}catch{}s(!1)})()},[]);let S=(0,z.useCallback)(e=>{navigator.clipboard.writeText(e),_(e),setTimeout(()=>_(null),2e3)},[]),C=(0,z.useCallback)(async()=>{l(!0),h(null);try{a({active:!0,url:(await R.post(`/api/tunnel/start`,{})).url,localUrl:i?.localUrl??null}),n(await R.get(`/api/cloud/status`))}catch(e){h(e instanceof Error?e.message:`Failed to start tunnel`)}finally{l(!1)}},[i]),w=(0,z.useCallback)(async()=>{h(null);try{let{cloud_url:e}=await R.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 R.post(`/api/cloud/login`,{access_token:i.access_token,email:i.email,cloud_url:e}),n(await R.get(`/api/cloud/status`)))}catch{}},i)}catch(e){h(e instanceof Error?e.message:`Failed to start login`),x(!1),y(null)}},[]),T=(0,z.useCallback)(async()=>{d(!0),h(null);try{i?.active||a({active:!0,url:(await R.post(`/api/tunnel/start`,{})).url,localUrl:i?.localUrl??null}),await R.post(`/api/cloud/link`,{}),n(await R.get(`/api/cloud/status`))}catch(e){h(e instanceof Error?e.message:`Failed to link device`)}finally{d(!1)}},[i]),E=(0,z.useCallback)(async()=>{if(confirm(`Unlink this device from PPM Cloud? It will no longer appear on your cloud dashboard.`)){p(!0);try{await R.post(`/api/cloud/unlink`,{}),n(await R.get(`/api/cloud/status`))}catch{}p(!1)}},[]),D=(0,z.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 R.post(`/api/cloud/unlink`,{})}catch{}await R.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=i?.url||t?.tunnel_url;return(0,B.jsxs)(`div`,{className:`w-72 bg-background border border-border rounded-lg shadow-lg p-3 space-y-3`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,B.jsx)(st,{className:`size-4 text-primary`}),(0,B.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:`PPM Cloud`})]}),(0,B.jsx)(`button`,{onClick:e,className:`text-text-subtle hover:text-foreground`,children:(0,B.jsx)(r,{className:`size-3.5`})})]}),o&&(0,B.jsxs)(`div`,{className:`flex items-center gap-2 text-muted-foreground text-xs py-2`,children:[(0,B.jsx)(Mt,{className:`size-4 animate-spin`}),(0,B.jsx)(`span`,{children:`Loading...`})]}),!o&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`space-y-1.5`,children:t?.logged_in?(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,B.jsx)(`div`,{className:`size-2 rounded-full bg-green-500 shrink-0`}),(0,B.jsx)(`span`,{className:`text-xs text-foreground truncate`,children:t.email})]}),(0,B.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,B.jsx)(Pt,{className:`size-3`})})]}):v?(0,B.jsxs)(`div`,{className:`space-y-2 text-center`,children:[(0,B.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Open the link below and enter the code:`}),(0,B.jsx)(`div`,{className:`font-mono text-2xl font-bold tracking-[0.3em] text-primary`,children:v.userCode}),(0,B.jsx)(`a`,{href:v.verifyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`text-xs text-primary hover:underline`,children:v.verifyUrl}),b&&(0,B.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 text-xs text-muted-foreground`,children:[(0,B.jsx)(Mt,{className:`size-3 animate-spin`}),(0,B.jsx)(`span`,{children:`Waiting for verification...`})]})]}):(0,B.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,B.jsx)(st,{className:`size-3.5`}),`Sign in to PPM Cloud`]})}),t?.logged_in&&(0,B.jsx)(`div`,{className:`space-y-1.5`,children:t.linked?(0,B.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,B.jsx)(At,{className:`size-3 text-primary shrink-0`}),(0,B.jsx)(`span`,{className:`text-foreground truncate`,children:t.device_name})]}),(0,B.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,B.jsx)(Mt,{className:`size-3 animate-spin`}):(0,B.jsx)(sn,{className:`size-3`})})]}):(0,B.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,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Mt,{className:`size-3.5 animate-spin`}),` Linking...`]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(At,{className:`size-3.5`}),` Link this machine`]})})}),(0,B.jsx)(`div`,{className:`border-t border-border`}),i?.localUrl&&(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`Local Network`}),(0,B.jsx)($p,{url:i.localUrl,copied:g,onCopy:S})]}),!O&&!c&&(0,B.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,B.jsx)($t,{className:`size-3.5`}),`Start Sharing`]}),c&&(0,B.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-2`,children:[(0,B.jsx)(Mt,{className:`size-5 animate-spin text-primary`}),(0,B.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Starting tunnel...`})]}),O&&(0,B.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,B.jsx)(`span`,{className:`text-[10px] font-medium text-muted-foreground uppercase tracking-wide`,children:`Public URL`}),(0,B.jsx)(`div`,{className:`flex justify-center`,children:(0,B.jsx)(`div`,{className:`p-3 rounded-lg`,style:{backgroundColor:`#ffffff`,colorScheme:`light`},children:(0,B.jsx)(Zp,{value:O,size:180,bgColor:`#ffffff`,fgColor:`#000000`,level:`L`,style:{display:`block`}})})}),(0,B.jsx)($p,{url:O,copied:g,onCopy:S})]}),t?.logged_in&&t.linked&&(0,B.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,B.jsx)(ye,{className:`size-3`}),`Open Cloud Dashboard`]}),m&&(0,B.jsx)(`p`,{className:`text-xs text-destructive`,children:m})]})]})}function $p({url:e,copied:t,onCopy:n}){return(0,B.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,B.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,B.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,B.jsx)(c,{className:`size-3.5 text-primary`}):(0,B.jsx)(ct,{className:`size-3.5`})})]})}var em=`hienlh/ppm`;async function tm(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 R.get(`${ke(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(`
|
|
21
21
|
`)}function nm(e){let t=`https://github.com/${em}/issues/new?title=bug%3A%20&body=${encodeURIComponent(e)}`;window.open(t,`_blank`)}async function rm(e){try{return await navigator.clipboard.writeText(e),!0}catch{return!1}}function im(e,t){tm(e,t).then(e=>{window.dispatchEvent(new CustomEvent(`open-bug-report`,{detail:e}))})}var am=[`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 om(e,t){return e??am[t%am.length]}function sm(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 cm({onSuccess:e,onCancel:t,footerClassName:n}){let{addProject:r}=td(),[i,a]=(0,z.useState)(``),[o,s]=(0,z.useState)(``),[c,l]=(0,z.useState)([]),[u,d]=(0,z.useState)(!1),[f,p]=(0,z.useState)(!1),[m,h]=(0,z.useState)(!1),[g,_]=(0,z.useState)(``),v=(0,z.useRef)(null),y=(0,z.useRef)(null);(0,z.useEffect)(()=>{if(v.current&&clearTimeout(v.current),!i.trim()){l([]),d(!1);return}v.current=setTimeout(async()=>{p(!0);try{l(await R.get(`/api/projects/suggest-dirs?q=${encodeURIComponent(i)}`)??[]),d(!0)}catch{l([])}finally{p(!1)}},250)},[i]),(0,z.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,B.jsxs)(`form`,{onSubmit:x,className:`flex flex-col gap-3`,children:[(0,B.jsxs)(`div`,{ref:y,className:`relative`,children:[(0,B.jsx)(`label`,{className:`block text-xs font-medium text-foreground mb-1`,children:`Project path`}),(0,B.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,B.jsxs)(`div`,{className:`relative flex items-center flex-1`,children:[(0,B.jsx)(yt,{className:`absolute left-2.5 size-3.5 text-text-subtle pointer-events-none`}),(0,B.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,B.jsx)(Mt,{className:`absolute right-2.5 size-3.5 text-text-subtle animate-spin`})]}),(0,B.jsx)(dp,{mode:`folder`,onSelect:e=>{a(e),o||s(e.split(`/`).pop()??``),_(``)}})]}),u&&c.length>0&&(0,B.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,B.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,B.jsx)(`span`,{className:`text-sm font-medium truncate w-full`,children:e.name}),(0,B.jsx)(`span`,{className:`text-xs text-text-subtle truncate w-full`,children:e.path})]},e.path))})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`label`,{className:`block text-xs font-medium text-foreground mb-1`,children:[`Display name `,(0,B.jsx)(`span`,{className:`text-muted-foreground`,children:`(optional)`})]}),(0,B.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,B.jsx)(`p`,{className:`text-xs text-destructive`,children:g}),(0,B.jsxs)(`div`,{className:L(`flex justify-end gap-2 pt-1`,n),children:[(0,B.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,B.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 lm({name:e,color:t,active:n,allNames:r}){let i=sm(e,r),a=xd((0,z.useMemo)(()=>Cd(e),[e]));return(0,B.jsxs)(`div`,{className:`relative`,children:[(0,B.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,B.jsx)(`div`,{className:L(`absolute -top-0.5 -right-0.5 size-2.5 rounded-full border-2 border-background`,bd(a))})]})}function um({current:e,onChange:t}){return(0,B.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:am.map(n=>(0,B.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 dm(){let{projects:e,activeProject:t,setActiveProject:n,setProjectColor:r,reorderProjects:i,renameProject:a,deleteProject:o,customOrder:s}=td();Se(e=>e.openTab);let c=I(e=>e.version),l=(0,z.useCallback)(()=>im(c),[c]),[u,d]=(0,z.useState)(null),[f,p]=(0,z.useState)(null),m=ed(e,s),h=m.map(e=>e.name),[g,_]=(0,z.useState)(!1),[v,y]=(0,z.useState)(``),[b,x]=(0,z.useState)(``),[S,C]=(0,z.useState)(!1),[w,T]=(0,z.useState)(``),[E,D]=(0,z.useState)(!1),[O,k]=(0,z.useState)(!1),[A,ee]=(0,z.useState)(``),[te,ne]=(0,z.useState)(``),[re,j]=(0,z.useState)(!1),M=(0,z.useCallback)(e=>{y(e),x(e),_(!0)},[]),ie=(0,z.useCallback)(e=>{T(e),C(!0)},[]),ae=(0,z.useCallback)((e,t)=>{ee(e),ne(t),k(!0)},[]);async function oe(){if(!b.trim()||b===v){_(!1);return}try{await a(v,b.trim())}catch{}_(!1)}async function se(){try{await o(w)}catch{}C(!1)}async function N(){j(!0);try{await r(A,te),k(!1)}catch(e){console.error(`Failed to save color:`,e)}finally{j(!1)}}function P(){D(!0)}let[ce,le]=(0,z.useState)(!1),ue=(0,z.useRef)(null),[de,fe]=(0,z.useState)(null);(0,z.useEffect)(()=>{if(!ce||!ue.current){fe(null);return}let e=ue.current.getBoundingClientRect();fe({left:e.right+6,bottom:window.innerHeight-e.bottom})},[ce]);function pe(){let{sidebarCollapsed:e,toggleSidebar:t,setSidebarActiveTab:n}=I.getState();e&&t(),n(`settings`)}return(0,B.jsxs)(`aside`,{className:`hidden md:flex flex-col w-[52px] min-w-[52px] bg-background border-r border-border overflow-hidden`,children:[(0,B.jsxs)(`div`,{className:`shrink-0 flex flex-col items-center justify-center h-[41px] border-b border-border gap-0.5`,children:[(0,B.jsx)(`span`,{className:`text-[11px] font-bold text-primary leading-none`,children:`PPM`}),c&&(0,B.jsxs)(`span`,{className:`text-[8px] text-text-subtle leading-none`,children:[`v`,c]})]}),(0,B.jsxs)(`div`,{className:`flex-1 overflow-y-auto py-2 flex flex-col items-center gap-2 min-h-0`,children:[m.map((e,r)=>{let a=om(e.color,r),o=t?.name===e.name;return(0,B.jsxs)(Gd,{children:[(0,B.jsxs)(G,{children:[(0,B.jsx)(cl,{asChild:!0,children:(0,B.jsx)(Kd,{asChild:!0,children:(0,B.jsx)(`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:`p-1 rounded-lg hover:bg-surface-elevated transition-all ${u===r?`opacity-40 scale-90`:``} ${f===r&&u!==r?`ring-2 ring-accent`:``}`,children:(0,B.jsx)(lm,{name:e.name,color:a,active:o,allNames:h})})})}),(0,B.jsxs)(ll,{side:`right`,className:`max-w-[200px]`,children:[(0,B.jsx)(`p`,{className:`font-medium`,children:e.name}),(0,B.jsx)(`p`,{className:`text-xs text-text-subtle truncate`,children:e.path})]})]}),(0,B.jsxs)(qd,{children:[(0,B.jsxs)(Jd,{onClick:()=>M(e.name),children:[(0,B.jsx)(Gt,{className:`size-3.5 mr-2`}),` Rename`]}),(0,B.jsxs)(Jd,{onClick:()=>ae(e.name,a),children:[(0,B.jsx)(Ht,{className:`size-3.5 mr-2`}),` Change Color`]}),(0,B.jsx)(Yd,{}),(0,B.jsxs)(Jd,{className:`text-destructive focus:text-destructive`,onClick:()=>ie(e.name),children:[(0,B.jsx)(rn,{className:`size-3.5 mr-2`}),` Delete`]})]})]},e.name)}),(0,B.jsxs)(G,{children:[(0,B.jsx)(cl,{asChild:!0,children:(0,B.jsx)(`button`,{onClick:P,className:`size-10 rounded-full border-2 border-dashed border-border flex items-center justify-center text-text-subtle hover:border-primary hover:text-primary transition-colors`,children:(0,B.jsx)(Kt,{className:`size-4`})})}),(0,B.jsx)(ll,{side:`right`,children:`Add Project`})]})]}),(0,B.jsxs)(`div`,{className:`shrink-0 flex flex-col items-center gap-1 py-2 border-t border-border`,children:[(0,B.jsxs)(G,{children:[(0,B.jsx)(cl,{asChild:!0,children:(0,B.jsx)(`button`,{ref:ue,onClick:()=>le(!ce),className:L(`flex items-center justify-center size-8 rounded-md transition-colors`,ce?`text-primary bg-primary/10`:`text-text-subtle hover:text-foreground hover:bg-surface-elevated`),children:(0,B.jsx)(st,{className:`size-4`})})}),(0,B.jsx)(ll,{side:`right`,children:`Cloud & Share`})]}),ce&&de&&(0,dn.createPortal)((0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`fixed inset-0 z-40`,onClick:()=>le(!1)}),(0,B.jsx)(`div`,{className:`fixed z-50`,style:{left:de.left,bottom:de.bottom},children:(0,B.jsx)(Qp,{onClose:()=>le(!1)})})]}),document.body),(0,B.jsxs)(G,{children:[(0,B.jsx)(cl,{asChild:!0,children:(0,B.jsx)(`button`,{onClick:l,className:`flex items-center justify-center size-8 rounded-md text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,children:(0,B.jsx)(Qe,{className:`size-4`})})}),(0,B.jsx)(ll,{side:`right`,children:`Report Bug`})]}),(0,B.jsxs)(G,{children:[(0,B.jsx)(cl,{asChild:!0,children:(0,B.jsx)(`button`,{onClick:pe,className:`flex items-center justify-center size-8 rounded-md text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,children:(0,B.jsx)(Qt,{className:`size-4`})})}),(0,B.jsx)(ll,{side:`right`,children:`Settings`})]})]}),(0,B.jsx)(ef,{open:E,onOpenChange:D,children:(0,B.jsxs)(rf,{className:`sm:max-w-sm`,children:[(0,B.jsx)(af,{children:(0,B.jsx)(sf,{children:`Add Project`})}),(0,B.jsx)(cm,{onSuccess:()=>D(!1),onCancel:()=>D(!1)})]})}),(0,B.jsx)(ef,{open:g,onOpenChange:_,children:(0,B.jsxs)(rf,{className:`sm:max-w-sm`,children:[(0,B.jsx)(af,{children:(0,B.jsx)(sf,{children:`Rename Project`})}),(0,B.jsx)(`input`,{type:`text`,value:b,onChange:e=>x(e.target.value),onKeyDown:e=>{e.key===`Enter`&&oe()},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,B.jsxs)(of,{children:[(0,B.jsx)(`button`,{onClick:()=>_(!1),className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,B.jsx)(`button`,{onClick:oe,className:`px-3 py-1.5 text-sm bg-primary text-white rounded-md hover:bg-primary/90 transition-colors`,children:`Rename`})]})]})}),(0,B.jsx)(ef,{open:S,onOpenChange:C,children:(0,B.jsxs)(rf,{className:`sm:max-w-sm`,children:[(0,B.jsx)(af,{children:(0,B.jsx)(sf,{children:`Delete Project`})}),(0,B.jsxs)(`p`,{className:`text-sm text-text-secondary`,children:[`Remove `,(0,B.jsx)(`strong`,{className:`text-foreground`,children:w}),` from PPM? The files on disk won't be deleted.`]}),(0,B.jsxs)(of,{children:[(0,B.jsx)(`button`,{onClick:()=>C(!1),className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,B.jsx)(`button`,{onClick:se,className:`px-3 py-1.5 text-sm bg-destructive text-white rounded-md hover:bg-destructive/90 transition-colors`,children:`Delete`})]})]})}),(0,B.jsx)(ef,{open:O,onOpenChange:k,children:(0,B.jsxs)(rf,{className:`sm:max-w-sm`,children:[(0,B.jsx)(af,{children:(0,B.jsx)(sf,{children:`Change Color`})}),(0,B.jsx)(um,{current:te,onChange:ne}),(0,B.jsxs)(of,{children:[(0,B.jsx)(`button`,{onClick:()=>k(!1),className:`px-3 py-1.5 text-sm text-text-secondary hover:text-foreground transition-colors`,children:`Cancel`}),(0,B.jsx)(`button`,{onClick:N,disabled:re,className:`px-3 py-1.5 text-sm bg-primary text-white rounded-md hover:bg-primary/90 transition-colors disabled:opacity-50`,children:re?`Saving…`:`Save`})]})]})})]})}var fm=[{type:`terminal`,label:`Terminal`},{type:`chat`,label:`AI Chat`},{type:`git-graph`,label:`Git Graph`},{type:`settings`,label:`Settings`}],pm=Object.fromEntries(fm.map(e=>[e.type,e.label])),mm={terminal:nn,chat:It,editor:mt,database:lt,sqlite:lt,postgres:lt,"git-graph":St,"git-diff":ht,settings:Qt};function hm({onMenuPress:e,onProjectsPress:t}){let n=F(e=>e.focusedPanelId),i=F(e=>e.panels[e.focusedPanelId]);F(e=>Object.keys(e.panels).length);let a=F(e=>e.grid),o=i?.tabs??[],s=i?.activeTabId??null,c=(0,z.useRef)(new Map),l=(0,z.useRef)(null),u=(0,z.useRef)(o.length),d=xd(e=>e.notifications),{canScrollLeft:f,canScrollRight:p,scrollLeft:m,scrollRight:h}=wd(l),g=Ed(l.current,c.current,o,d),[_,v]=(0,z.useState)(null),[y,b]=(0,z.useState)(!1),x=(0,z.useRef)(null);(0,z.useEffect)(()=>{o.length>u.current&&s&&c.current.get(s)?.scrollIntoView({behavior:`smooth`,block:`nearest`,inline:`nearest`}),u.current=o.length},[o.length,s]);let S=(0,z.useCallback)(e=>{x.current=setTimeout(()=>v(e),400)},[]),C=(0,z.useCallback)(()=>{x.current&&=(clearTimeout(x.current),null)},[]),w=xe(a,n)?a.length<3:!1,T=Object.keys(F.getState().panels).filter(e=>e!==n);function E(e){let t=o.findIndex(t=>t.id===e);t>0&&F.getState().reorderTab(e,n,t-1)}function D(e){let t=o.findIndex(t=>t.id===e);t<o.length-1&&F.getState().reorderTab(e,n,t+1)}function O(e){F.getState().splitPanel(`down`,e,n)}function k(e,t){F.getState().moveTab(e,n,t)}let A=_?o.find(e=>e.id===_):null,ee=_?o.findIndex(e=>e.id===_):-1,{activeProject:te}=td.getState();function ne(e){let t=e===`git-graph`||e===`git-diff`||e===`terminal`||e===`chat`?{projectName:te?.name}:void 0;F.getState().openTab({type:e,title:pm[e]??e,metadata:t,projectId:te?.name??null,closable:!0},n),b(!1)}let{activeProject:re,projects:j,customOrder:M}=td(),ie=ed(j,M??null),ae=ie.map(e=>e.name),oe=ie.findIndex(e=>e.name===re?.name),se=re?om(re.color,oe>=0?oe:0):`#4f86c6`,N=re?sm(re.name,ae):null;return(0,B.jsxs)(`nav`,{className:`fixed bottom-0 left-0 right-0 md:hidden bg-background border-t border-border z-40 select-none`,children:[(0,B.jsxs)(`div`,{className:`flex items-center h-12`,children:[(0,B.jsx)(`button`,{onClick:e,className:`flex items-center justify-center size-12 shrink-0 text-text-secondary border-r border-border`,children:(0,B.jsx)(Ft,{className:`size-5`})}),(0,B.jsxs)(`div`,{className:`flex-1 min-w-0 relative flex items-center h-12`,children:[f&&(0,B.jsx)(`button`,{onClick:m,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,B.jsxs)(`span`,{className:`relative`,children:[(0,B.jsx)(et,{className:`size-3.5 text-text-secondary`}),g.left&&(0,B.jsx)(`span`,{className:L(`absolute -top-1 -right-0.5 size-1.5 rounded-full`,bd(g.left))})]})}),(0,B.jsx)(`div`,{ref:l,className:`flex-1 min-w-0 flex items-center h-12 overflow-x-auto scrollbar-none`,children:o.map(e=>{let t=mm[e.type],n=e.id===s,i=e.type===`chat`?e.metadata?.sessionId:void 0,a=i?d.get(i):void 0,o=a&&a.count>0?a.type:null;return(0,B.jsxs)(`button`,{ref:t=>{t?c.current.set(e.id,t):c.current.delete(e.id)},onClick:()=>{F.getState().setActiveTab(e.id),i&&xd.getState().clearForSession(i)},onTouchStart:()=>S(e.id),onTouchEnd:C,onTouchMove:C,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,B.jsxs)(`span`,{className:`relative`,children:[(0,B.jsx)(t,{className:`size-4`}),o&&!n&&(0,B.jsx)(`span`,{className:L(`absolute -top-1 -right-1 size-2 rounded-full`,bd(o))})]}),(0,B.jsx)(`span`,{className:`max-w-[80px] truncate`,children:e.title}),e.closable&&(0,B.jsx)(`span`,{role:`button`,tabIndex:0,onClick:t=>{t.stopPropagation(),F.getState().closeTab(e.id)},className:`ml-0.5 p-0.5 rounded hover:bg-surface-elevated`,children:(0,B.jsx)(r,{className:`size-3`})})]},e.id)})}),p&&(0,B.jsx)(`button`,{onClick:h,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,B.jsxs)(`span`,{className:`relative`,children:[(0,B.jsx)(tt,{className:`size-3.5 text-text-secondary`}),g.right&&(0,B.jsx)(`span`,{className:L(`absolute -top-1 -left-0.5 size-1.5 rounded-full`,bd(g.right))})]})})]}),(0,B.jsx)(`button`,{onClick:()=>_d(),className:`flex items-center justify-center size-12 shrink-0 border-t-2 border-transparent text-text-secondary`,children:(0,B.jsx)(Kt,{className:`size-4`})}),(0,B.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-12 shrink-0 text-text-secondary border-l border-border`,title:`Switch project`,children:N?(0,B.jsx)(`div`,{className:`size-7 rounded-full flex items-center justify-center text-[10px] font-bold text-white`,style:{background:se},children:N}):(0,B.jsx)(kt,{className:`size-5`})})]}),y&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`fixed inset-0 z-50`,onClick:()=>b(!1)}),(0,B.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,B.jsx)(`div`,{className:`px-3 py-2 text-xs text-text-secondary border-b border-border`,children:`New Tab`}),fm.map(e=>{let t=mm[e.type];return(0,B.jsxs)(`button`,{onClick:()=>ne(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,B.jsx)(t,{className:`size-4`}),` `,e.label]},e.type)})]})]}),A&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`fixed inset-0 z-50`,onClick:()=>v(null)}),(0,B.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,B.jsx)(`div`,{className:`px-3 py-2 text-xs text-text-secondary border-b border-border truncate`,children:A.title}),ee>0&&(0,B.jsxs)(`button`,{onClick:()=>{E(_),v(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,B.jsx)(qe,{className:`size-4`}),` Move Left`]}),ee<o.length-1&&(0,B.jsxs)(`button`,{onClick:()=>{D(_),v(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,B.jsx)(Je,{className:`size-4`}),` Move Right`]}),w&&o.length>1&&(0,B.jsxs)(`button`,{onClick:()=>{O(_),v(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,B.jsx)(en,{className:`size-4`}),` Split to Bottom`]}),T.map((e,t)=>(0,B.jsxs)(`button`,{onClick:()=>{k(_,e),v(null)},className:`flex items-center gap-2 w-full px-3 py-2.5 text-sm text-foreground active:bg-surface-elevated`,children:[(0,B.jsx)(Bt,{className:`size-4`}),` Move to Panel `,t+1===1?`Top`:`Bottom`]},e))]})]})]})}var gm=[{id:`explorer`,label:`Explorer`,icon:yt},{id:`git`,label:`Git`,icon:St},{id:`database`,label:`Database`,icon:lt},{id:`settings`,label:`Settings`,icon:Qt}];function _m({isOpen:e,onClose:t,initialTab:n}){let{activeProject:i}=td(),a=I(e=>e.version),[o,s]=(0,z.useState)(n??`explorer`);(0,z.useEffect)(()=>{n&&s(n)},[n]);let c=(0,z.useCallback)(()=>im(a),[a]);return(0,B.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,B.jsx)(`div`,{className:`absolute inset-0 bg-black/50`,onClick:t,"aria-label":`Close drawer`}),(0,B.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,B.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-b border-border shrink-0`,children:[(0,B.jsx)(`span`,{className:`text-sm font-bold text-primary tracking-tight`,children:i?.name??`PPM`}),(0,B.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-8 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,B.jsx)(r,{className:`size-4`})})]}),(0,B.jsxs)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:[o===`explorer`&&(i?(0,B.jsx)(pf,{onFileOpen:t}):(0,B.jsx)(`p`,{className:`px-4 py-6 text-xs text-text-secondary text-center`,children:`Select a project from the bottom nav bar`})),o===`git`&&(0,B.jsx)(xf,{metadata:{projectName:i?.name},onNavigate:t}),o===`database`&&(0,B.jsx)(_p,{}),o===`settings`&&(0,B.jsx)(Zf,{})]}),(0,B.jsxs)(`div`,{className:`shrink-0 border-t border-border`,children:[(0,B.jsx)(`div`,{className:`flex items-center`,children:gm.map(e=>{let t=e.icon;return(0,B.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`,o===e.id?`text-primary`:`text-text-secondary`),children:[(0,B.jsx)(t,{className:`size-4`}),(0,B.jsx)(`span`,{children:e.label})]},e.id)})}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-t border-border`,children:[a&&(0,B.jsxs)(`span`,{className:`text-[10px] text-text-subtle`,children:[`v`,a]}),(0,B.jsxs)(`button`,{onClick:c,className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,B.jsx)(Qe,{className:`size-3`}),(0,B.jsx)(`span`,{children:`Report Bug`})]})]})]})]})]})}function vm({name:e,color:t,allNames:n}){let r=sm(e,n);return(0,B.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 ym({isOpen:e,onClose:t}){let{projects:n,activeProject:i,setActiveProject:a,setProjectColor:o,reorderProjects:l,renameProject:u,deleteProject:d,customOrder:f}=td();Se(e=>e.openTab);let p=I(e=>e.version),m=ed(n,f),h=m.map(e=>e.name),[g,_]=(0,z.useState)(`list`),[v,y]=(0,z.useState)(null),[b,x]=(0,z.useState)(``),[S,C]=(0,z.useState)(!1),w=(0,z.useRef)(null),[T,E]=(0,z.useState)(null),[D,O]=(0,z.useState)(``),k=(0,z.useCallback)(e=>{w.current=setTimeout(()=>y(e),400)},[]),A=(0,z.useCallback)(()=>{w.current&&=(clearTimeout(w.current),null)},[]);function ee(){_(`list`),t()}function te(e){let t=n.find(t=>t.name===e);t&&(a(t),ee())}function ne(){_(`add`)}function re(){if(ee(),window.innerWidth<768){window.dispatchEvent(new Event(`open-mobile-settings`));return}let{sidebarCollapsed:e,toggleSidebar:t,setSidebarActiveTab:n}=I.getState();e&&t(),n(`settings`)}async function j(){if(!T||!D.trim()||D===T){E(null);return}try{await u(T,D.trim())}catch{}E(null)}async function M(e){y(null);try{await d(e)}catch{}}async function ie(e,t){try{await o(e,t),C(!1),y(null)}catch(e){console.error(`Failed to save color:`,e)}}v&&m.find(e=>e.name===v);let ae=v?m.findIndex(e=>e.name===v):-1,oe=v?[{label:`Rename`,icon:Gt,onClick:()=>{O(v),E(v),y(null)}},{label:`Change Color`,icon:Ht,onClick:()=>{let e=m.findIndex(e=>e.name===v),t=m[e];x(om(t?.color,e)),C(!0)}},...ae>0?[{label:`Move Up`,icon:de,onClick:()=>{let e=m.map(e=>e.name),[t]=e.splice(ae,1);e.splice(ae-1,0,t),l(e),y(null)}}]:[],...ae<m.length-1?[{label:`Move Down`,icon:s,onClick:()=>{let e=m.map(e=>e.name),[t]=e.splice(ae,1);e.splice(ae+1,0,t),l(e),y(null)}}]:[],{label:`Delete`,icon:rn,destructive:!0,onClick:()=>M(v)}]:[];return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:L(`fixed inset-0 z-50 md:hidden transition-opacity duration-200`,e?`opacity-100`:`opacity-0 pointer-events-none`),onClick:ee,style:{backgroundColor:`rgba(0,0,0,0.5)`}}),(0,B.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,B.jsx)(`div`,{className:`flex justify-center pt-3 pb-1`,children:(0,B.jsx)(`div`,{className:`w-10 h-1 rounded-full bg-border`})}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[g===`add`&&(0,B.jsx)(`button`,{onClick:()=>_(`list`),className:`flex items-center justify-center size-7 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,B.jsx)(qe,{className:`size-4`})}),(0,B.jsx)(`span`,{className:`text-sm font-semibold`,children:g===`add`?`Add Project`:`Projects`})]}),(0,B.jsx)(`button`,{onClick:ee,className:`flex items-center justify-center size-7 rounded-md hover:bg-surface-elevated transition-colors`,children:(0,B.jsx)(r,{className:`size-4`})})]}),g===`add`&&(0,B.jsx)(`div`,{className:`px-4 py-4`,children:(0,B.jsx)(cm,{onSuccess:()=>{_(`list`),t()},onCancel:()=>_(`list`),footerClassName:`pt-2`})}),(0,B.jsx)(`div`,{className:g===`add`?`hidden`:`max-h-[60vh] overflow-y-auto`,children:m.map((e,t)=>{let n=om(e.color,t),r=i?.name===e.name,a=T===e.name;return(0,B.jsxs)(`div`,{className:L(`flex items-center gap-3 px-4 py-3 transition-colors active:bg-surface-elevated`,r&&`bg-accent/10`),onClick:()=>!a&&te(e.name),onTouchStart:()=>k(e.name),onTouchEnd:A,onTouchMove:A,children:[(0,B.jsx)(vm,{name:e.name,color:n,allNames:h}),(0,B.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[a?(0,B.jsx)(`input`,{type:`text`,value:D,onChange:e=>O(e.target.value),onKeyDown:e=>{e.key===`Enter`&&j(),e.key===`Escape`&&E(null)},onBlur:j,onClick:e=>e.stopPropagation(),className:`w-full bg-transparent border-b border-primary text-sm outline-none`,autoFocus:!0}):(0,B.jsx)(`p`,{className:`text-sm font-medium truncate`,children:e.name}),(0,B.jsx)(`p`,{className:`text-xs text-text-subtle truncate`,children:e.path})]}),r&&(0,B.jsx)(c,{className:`size-4 text-primary shrink-0`})]},e.name)})}),(0,B.jsx)(`div`,{className:`border-t border-border`,children:(0,B.jsxs)(`button`,{onClick:ne,className:`w-full flex items-center gap-3 px-4 py-3 text-text-secondary hover:bg-surface-elevated transition-colors`,children:[(0,B.jsx)(Kt,{className:`size-4 shrink-0`}),(0,B.jsx)(`span`,{className:`text-sm`,children:`Add Project`})]})}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-3 border-t border-border`,children:[(0,B.jsxs)(`button`,{onClick:re,className:`flex items-center gap-2 text-text-secondary hover:text-foreground transition-colors`,children:[(0,B.jsx)(Qt,{className:`size-4`}),(0,B.jsx)(`span`,{className:`text-sm`,children:`Settings`})]}),p&&(0,B.jsxs)(`span`,{className:`text-xs text-text-subtle`,children:[`v`,p]})]})]}),v&&!S&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`fixed inset-0 z-[60] md:hidden`,onClick:()=>y(null)}),(0,B.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,B.jsx)(`div`,{className:`px-4 py-2 border-b border-border`,children:(0,B.jsx)(`p`,{className:`text-xs font-medium text-text-secondary`,children:v})}),oe.map(e=>{let t=e.icon;return(0,B.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,B.jsx)(t,{className:`size-4 shrink-0`}),e.label]},e.label)})]})]}),S&&v&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`fixed inset-0 z-[60] md:hidden`,onClick:()=>{C(!1),y(null)}}),(0,B.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,B.jsx)(`p`,{className:`text-sm font-medium`,children:`Change Color`}),(0,B.jsx)(`div`,{className:`flex flex-wrap gap-3`,children:am.map(e=>(0,B.jsx)(`button`,{type:`button`,onClick:()=>x(e),className:L(`size-9 rounded-full border-2 transition-all`,b===e?`border-primary scale-110`:`border-transparent`),style:{background:e}},e))}),(0,B.jsxs)(`div`,{className:`flex gap-2 pt-2`,children:[(0,B.jsx)(`button`,{onClick:()=>{C(!1),y(null)},className:`flex-1 py-2 text-sm text-text-secondary border border-border rounded-md`,children:`Cancel`}),(0,B.jsx)(`button`,{onClick:()=>ie(v,b),className:`flex-1 py-2 text-sm bg-primary text-white rounded-md`,children:`Save`})]})]})]})]})}function bm({onSuccess:e}){let[t,n]=(0,z.useState)(``),r=I(e=>e.deviceName),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!1);async function c(n){if(n.preventDefault(),t.trim()){s(!0),a(null);try{Oe(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,B.jsx)(`div`,{className:`min-h-dvh flex items-center justify-center bg-background p-4`,children:(0,B.jsxs)(`div`,{className:`w-full max-w-sm bg-surface rounded-lg border border-border p-6 space-y-6`,children:[(0,B.jsxs)(`div`,{className:`text-center space-y-2`,children:[(0,B.jsx)(`div`,{className:`flex items-center justify-center size-12 mx-auto rounded-full bg-surface-elevated`,children:(0,B.jsx)(Nt,{className:`size-6 text-primary`})}),(0,B.jsx)(`h1`,{className:`text-xl font-semibold text-foreground`,children:`PPM`}),r&&(0,B.jsx)(`p`,{className:`text-xs text-text-subtle bg-surface-elevated inline-block px-2 py-0.5 rounded-full`,children:r}),(0,B.jsx)(`p`,{className:`text-sm text-text-secondary`,children:`Enter your access password to unlock`})]}),(0,B.jsxs)(`form`,{onSubmit:c,className:`space-y-4`,children:[(0,B.jsx)(`div`,{children:(0,B.jsx)(A,{type:`password`,placeholder:`Auth token`,value:t,onChange:e=>n(e.target.value),className:`h-11 bg-background border-border`,autoFocus:!0})}),i&&(0,B.jsxs)(`div`,{className:`flex items-center gap-2 text-error text-sm`,children:[(0,B.jsx)(nt,{className:`size-4 shrink-0`}),(0,B.jsx)(`span`,{children:i})]}),(0,B.jsx)($,{type:`submit`,disabled:o||!t.trim(),className:`w-full h-11`,children:o?`Checking...`:`Unlock`})]})]})})}function xm(){let e=window.location.pathname.match(/^\/project\/([^/]+)(?:\/tab\/([^/]+))?/),t=new URLSearchParams(window.location.search).get(`openChat`);return e?{projectName:e[1]?decodeURIComponent(e[1]):null,tabId:e[2]?decodeURIComponent(e[2]):null,openChat:t}:{projectName:null,tabId:null,openChat:t}}function Sm(e,t){if(!e||e===`__global__`)return`/`;let n=`/project/${encodeURIComponent(e)}`;return t&&(n+=`/tab/${encodeURIComponent(t)}`),n}function Cm(){let e=Se(e=>e.activeTabId),t=Se(e=>e.currentProject),n=(0,z.useRef)(!1);(0,z.useEffect)(()=>{if(n.current){n.current=!1;return}let r=Sm(t,e);window.location.pathname!==r&&window.history.pushState(null,``,r)},[e,t]),(0,z.useEffect)(()=>{function e(){let{tabId:e}=xm(),{tabs:t,setActiveTab:r}=Se.getState();e&&t.some(t=>t.id===e)&&(n.current=!0,r(e))}return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[])}var wm=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
22
22
|
<rect width="32" height="32" rx="6" fill="#3b82f6"/>
|
|
@@ -25,4 +25,4 @@ For more information, see https://radix-ui.com/primitives/docs/components/${t.do
|
|
|
25
25
|
<rect width="32" height="32" rx="6" fill="#3b82f6"/>
|
|
26
26
|
<text x="16" y="22" text-anchor="middle" font-family="system-ui,sans-serif" font-weight="700" font-size="11" fill="white">PPM</text>
|
|
27
27
|
<circle cx="26" cy="6" r="5" fill="#ef4444"/>
|
|
28
|
-
</svg>`,Em=`data:image/svg+xml,${encodeURIComponent(wm)}`,Dm=`data:image/svg+xml,${encodeURIComponent(Tm)}`;function Om(e){let t=document.getElementById(`ppm-favicon`);t&&(t.href=e?Dm:Em)}function km(e,t,n){let r=[t,n||null,`PPM`].filter(Boolean).join(` - `);return e>0?`(${e}) ${r}`:r}function Am(){let e=td(e=>e.activeProject),t=I(e=>e.deviceName);(0,z.useEffect)(()=>{let n=()=>{let n=Sd(xd.getState());document.title=km(n,e?.name,t??void 0),Om(n>0)};return n(),xd.subscribe(n)},[e?.name,t])}var jm=1e4,Mm=2e3;function Nm(){(0,z.useEffect)(()=>{let e=!1,t;async function n(){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)))}window.location.reload();return}e=!1}catch{e=!0}t=setTimeout(n,e?Mm:jm)}return t=setTimeout(n,jm),()=>clearTimeout(t)},[])}var Pm=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent);function Fm(e){return e?e.replace(/Mod\+/g,Pm?`⌘`:`Ctrl+`).replace(/Alt\+/g,Pm?`⌥`:`Alt+`).replace(/Shift\+/g,Pm?`⇧`:`Shift+`).replace(/Meta\+/g,`⌘`).replace(/Ctrl\+/g,Pm?`⌃`:`Ctrl+`):``}function Im(e){let t=[];for(let n of e)n.type===`file`&&t.push({name:n.name,path:n.path}),n.children&&t.push(...Im(n.children));return t}function Lm(e){return e?e.startsWith(`/`)||e.startsWith(`~/`)||e.startsWith(`~\\`)||/^[A-Za-z]:[/\\]/.test(e):!1}function Rm(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 zm=new Map;function Bm({open:e,onClose:t,initialQuery:n=``}){let[r,i]=(0,z.useState)(``),[a,o]=(0,z.useState)(0),[s,c]=(0,z.useState)([]),[l,u]=(0,z.useState)(!1),[d,f]=(0,z.useState)([]),p=(0,z.useRef)(null),m=(0,z.useRef)(null),h=Se(e=>e.openTab),g=td(e=>e.activeProject),_=Hd(e=>e.tree),v=I(e=>e.setSidebarActiveTab),y=I(e=>e.sidebarCollapsed),b=I(e=>e.toggleSidebar),x=gd(e=>e.getBinding),S=(0,z.useCallback)(async e=>{if(zm.has(e)){c(zm.get(e));return}u(!0);try{let t=await R.get(`/api/fs/list?dir=${encodeURIComponent(e)}`);zm.set(e,t),c(t)}catch{c([])}finally{u(!1)}},[]);(0,z.useEffect)(()=>{if(!Lm(r)){c([]);return}S(Rm(r))},[r,S]),(0,z.useEffect)(()=>{if(Lm(r)||r.trim().length<2){f([]);return}let e=setTimeout(async()=>{try{f(await R.get(`/api/db/search?q=${encodeURIComponent(r.trim())}`)??[])}catch{f([])}},300);return()=>clearTimeout(e)},[r]);let C=(0,z.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()};return[{id:`chat`,label:`New AI Chat`,icon:It,action:r(`chat`,`AI Chat`),keywords:`ai assistant claude`,group:`action`,shortcut:Fm(x(`open-chat`))},{id:`terminal`,label:`New Terminal`,icon:nn,action:r(`terminal`,`Terminal`),keywords:`bash shell console`,group:`action`,shortcut:Fm(x(`open-terminal`))},{id:`git-graph`,label:`Git Graph`,icon:St,action:r(`git-graph`,`Git Graph`),keywords:`branch history log`,group:`action`,shortcut:Fm(x(`open-git-graph`))},{id:`postgres`,label:`PostgreSQL`,icon:lt,action:r(`postgres`,`PostgreSQL`),keywords:`database pg sql query`,group:`action`},{id:`git-status`,label:`Git Status`,icon:Ct,action:()=>{v(`git`),t()},keywords:`changes diff staged`,group:`action`,shortcut:Fm(x(`open-git-status`))},{id:`settings`,label:`Settings`,icon:Qt,action:()=>{y&&b(),v(`settings`),t()},keywords:`config preferences theme`,group:`action`,shortcut:Fm(x(`open-settings`))}]},[g,h,t,v,y,b,x]),w=(0,z.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0;return Im(_).map(r=>({id:`file:${r.path}`,label:r.name,hint:r.path,icon:mt,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]),T=(0,z.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0;return s.map(r=>{let i=De(r);return{id:`fs:${r}`,label:i,hint:r,icon:yt,group:`fs`,keywords:r,action:()=>{h({type:`editor`,title:i,projectId:e,metadata:{...n,filePath:r},closable:!0}),t()}}})},[s,g,h,t]),E=(0,z.useMemo)(()=>d.map(e=>({id:`db:${e.connectionId}:${e.schemaName}.${e.tableName}`,label:e.tableName,hint:`${e.connectionName} (${e.connectionType===`postgres`?`PG`:`SQLite`})`,icon:lt,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]),D=(0,z.useMemo)(()=>[...C,...w],[C,w]),O=(0,z.useMemo)(()=>{if(Lm(r)){let e=r.lastIndexOf(`/`),t=e>=0?r.slice(e+1).toLowerCase():``;return t?T.filter(e=>{let n=e.label.toLowerCase(),r=(e.keywords??``).toLowerCase();return n.includes(t)||r.includes(t)}).slice(0,50):T.slice(0,50)}if(!r.trim())return C;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=D.filter(e=>t(e.label.toLowerCase())||e.keywords&&t(e.keywords.toLowerCase()));return r.trim().length>=2?[...E,...n]:n},[D,C,T,E,r]);(0,z.useEffect)(()=>{e&&(i(n||``),o(0),c([]),f([]),requestAnimationFrame(()=>p.current?.focus()))},[e]),(0,z.useEffect)(()=>{o(e=>Math.min(e,Math.max(O.length-1,0)))},[O.length]),(0,z.useEffect)(()=>{let e=m.current;e&&e.children[a]?.scrollIntoView({block:`nearest`})},[a]);let k=(0,z.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 A(e){let n=O.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?O[a]?.action():r.trim()&&k();break;case`Escape`:e.preventDefault(),t();break}}if(!e)return null;let ee=Lm(r);return(0,B.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:t,children:[(0,B.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,B.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:A,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,B.jsx)(Xt,{className:`size-4 text-text-subtle shrink-0`}),(0,B.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,B.jsx)(Mt,{className:`size-3.5 animate-spin text-text-subtle shrink-0`}),(0,B.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,B.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,B.jsx)(`div`,{ref:m,className:`max-h-72 overflow-y-auto py-1`,children:O.length===0?l?(0,B.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`Searching...`}):r.trim()?(0,B.jsxs)(`button`,{onClick:k,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,B.jsx)(It,{className:`size-4 shrink-0 text-accent`}),(0,B.jsxs)(`span`,{children:[`Ask AI: `,(0,B.jsx)(`span`,{className:`text-text-primary font-medium`,children:r.trim().slice(0,60)})]})]}):(0,B.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No results`}):O.map((e,t)=>{let n=e.icon;return(0,B.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,B.jsx)(n,{className:`size-4 shrink-0`}),(0,B.jsx)(`span`,{className:`truncate`,children:e.label}),e.hint&&(0,B.jsxs)(`span`,{className:`ml-auto flex items-center gap-1.5 text-xs text-text-subtle truncate max-w-[200px]`,children:[e.connectionColor&&(0,B.jsx)(`span`,{className:`shrink-0 size-2 rounded-full`,style:{backgroundColor:e.connectionColor}}),e.hint]}),e.shortcut&&(0,B.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,B.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 border-t border-border px-3 py-1.5`,children:[(0,B.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`Press`}),(0,B.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,B.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,B.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`to open this palette`})]})]})]})}function Vm(){let[e,t]=(0,z.useState)(null),[n,i]=(0,z.useState)(!1);(0,z.useEffect)(()=>{function e(e){let n=e.detail;n&&(t(n),i(!1))}return window.addEventListener(`open-bug-report`,e),()=>window.removeEventListener(`open-bug-report`,e)},[]);let a=(0,z.useCallback)(()=>t(null),[]);return e?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/50`,onClick:a}),(0,B.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,B.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,B.jsx)(`span`,{className:`text-sm font-medium`,children:`Bug Report`}),(0,B.jsx)(`button`,{onClick:a,className:`p-1 rounded hover:bg-surface-elevated`,children:(0,B.jsx)(r,{className:`size-4`})})]}),(0,B.jsx)(`pre`,{className:`flex-1 overflow-auto px-4 py-2 text-xs font-mono whitespace-pre-wrap break-all`,children:e}),(0,B.jsxs)(`div`,{className:`flex gap-2 p-3 border-t border-border`,children:[(0,B.jsxs)(`button`,{onClick:async()=>{await rm(e)&&i(!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,B.jsx)(c,{className:`size-3`}):(0,B.jsx)(ct,{className:`size-3`}),n?`Copied`:`Copy`]}),(0,B.jsxs)(`button`,{onClick:()=>{nm(e),a()},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,B.jsx)(ye,{className:`size-3`}),`Open GitHub Issue`]})]})]})]}):null}function Hm(){let[e,t]=(0,z.useState)(`checking`),[n,r]=(0,z.useState)(!1),[i,a]=(0,z.useState)(),[o,s]=(0,z.useState)(!1);(0,z.useEffect)(()=>{let e=()=>{a(`settings`),r(!0)};return window.addEventListener(`open-mobile-settings`,e),()=>window.removeEventListener(`open-mobile-settings`,e)},[]);let[c,l]=(0,z.useState)(()=>new Set([`__global__`])),u=I(e=>e.theme),d=I(e=>e.deviceName),f=td(e=>e.fetchProjects),p=I(e=>e.fetchServerInfo),m=td(e=>e.activeProject),h=(0,z.useRef)(xm());(0,z.useEffect)(()=>{if(Te(u),u===`system`){let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>Te(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}},[u]),(0,z.useEffect)(()=>{p()},[p]),(0,z.useEffect)(()=>{async function e(){let e=Ae();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()},[]),Cm();let{paletteOpen:g,paletteInitialQuery:_,closePalette:v}=vd();Am(),Nm(),(0,z.useEffect)(()=>{if(e!==`authenticated`)return;let t=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,t),()=>window.removeEventListener(`beforeunload`,t)},[e]),(0,z.useEffect)(()=>{e===`authenticated`&&we(async()=>{let{useKeybindingsStore:e}=await import(`./keybindings-store-DI1pVbE8.js`);return{useKeybindingsStore:e}},__vite__mapDeps([25,1,11])).then(({useKeybindingsStore:e})=>{e.getState().loadFromServer()})},[e]),(0,z.useEffect)(()=>{e===`authenticated`&&f().then(()=>{let{projectName:e,tabId:t,openChat:n}=h.current,{projects:r,customOrder:i}=td.getState();if(r.length===0)return;let a=e?r.find(t=>t.name===e):void 0;a||=ed(r,i)[0],a&&(td.getState().setActiveProject(a),e&&t&&queueMicrotask(()=>{let{tabs:e}=Se.getState();e.some(e=>e.id===t)&&Se.getState().setActiveTab(t)})),n&&queueMicrotask(()=>{let{tabs:e,setActiveTab:t,openTab:r}=Se.getState(),i=e.find(e=>e.type===`chat`&&e.metadata?.sessionId===n);i?t(i.id):r({type:`chat`,title:`Chat`,projectId:a?.name??null,closable:!0,metadata:{sessionId:n}});let o=new URL(window.location.href);o.searchParams.delete(`openChat`),window.history.replaceState(null,``,o.pathname)})})},[e,f]),(0,z.useEffect)(()=>{let e=m?.name??`__global__`;Se.getState().switchProject(e)},[m?.name]),(0,z.useEffect)(()=>{let e=m?.name??`__global__`;l(t=>t.has(e)?t:new Set([...t,e]))},[m?.name]),(0,z.useEffect)(()=>{e===`authenticated`&&!m&&Se.getState().switchProject(`__global__`)},[e,m]);let y=(0,z.useCallback)(()=>{t(`authenticated`)},[]);if(e===`checking`)return(0,B.jsx)(`div`,{className:`min-h-dvh flex items-center justify-center bg-background`,children:(0,B.jsx)(`div`,{className:`animate-pulse text-text-secondary text-sm`,children:`Loading...`})});if(e===`unauthenticated`)return(0,B.jsx)(bm,{onSuccess:y});let b=m?.name??`__global__`;return(0,B.jsx)(sl,{children:(0,B.jsxs)(`div`,{className:`h-dvh flex flex-col bg-background text-foreground overflow-hidden relative`,children:[d&&(0,B.jsx)(`div`,{className:`md:hidden fixed top-0 left-0 z-50 px-2 py-0.5 bg-primary/80 text-primary-foreground text-[10px] font-medium rounded-br`,children:d}),(0,B.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,B.jsx)(dm,{}),(0,B.jsx)(wp,{}),[...c].map(e=>(0,B.jsx)(`div`,{className:L(`flex-1 overflow-hidden pb-12 md:pb-0`,b!==e&&`hidden`),children:(0,B.jsx)(Rd,{projectName:e})},e))]}),(0,B.jsx)(hm,{onMenuPress:()=>r(!0),onProjectsPress:()=>s(!0)}),(0,B.jsx)(_m,{isOpen:n,onClose:()=>{r(!1),a(void 0)},initialTab:i}),(0,B.jsx)(ym,{isOpen:o,onClose:()=>s(!1)}),(0,B.jsx)(Bm,{open:g,onClose:v,initialQuery:_}),(0,B.jsx)(Vm,{}),(0,B.jsx)(Hn,{position:`bottom-left`,closeButton:!0,toastOptions:{className:`bg-surface border-border text-foreground`}})]})})}(0,un.createRoot)(document.getElementById(`root`)).render((0,B.jsx)(z.StrictMode,{children:(0,B.jsx)(Hm,{})}));export{St as A,nt as B,Qt as C,Wt as D,Gt as E,ut as F,et as H,lt as I,ct as L,vt as M,gt as N,It as O,mt as P,it as R,nn as S,qt as T,Ye as U,tt as V,ud as _,of as a,gd as b,$ as c,Jd as d,Yd as f,_d as g,xd as h,rf as i,xt as j,Mt as k,Gd as l,Hd as m,Zf as n,af as o,Kd as p,ef as r,sf as s,im as t,qd as u,hd as v,Xt as w,rn as x,md as y,rt as z};
|
|
28
|
+
</svg>`,Em=`data:image/svg+xml,${encodeURIComponent(wm)}`,Dm=`data:image/svg+xml,${encodeURIComponent(Tm)}`;function Om(e){let t=document.getElementById(`ppm-favicon`);t&&(t.href=e?Dm:Em)}function km(e,t,n){let r=[t,n||null,`PPM`].filter(Boolean).join(` - `);return e>0?`(${e}) ${r}`:r}function Am(){let e=td(e=>e.activeProject),t=I(e=>e.deviceName);(0,z.useEffect)(()=>{let n=()=>{let n=Sd(xd.getState());document.title=km(n,e?.name,t??void 0),Om(n>0)};return n(),xd.subscribe(n)},[e?.name,t])}var jm=1e4,Mm=2e3;function Nm(){(0,z.useEffect)(()=>{let e=!1,t;async function n(){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)))}window.location.reload();return}e=!1}catch{e=!0}t=setTimeout(n,e?Mm:jm)}return t=setTimeout(n,jm),()=>clearTimeout(t)},[])}var Pm=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent);function Fm(e){return e?e.replace(/Mod\+/g,Pm?`⌘`:`Ctrl+`).replace(/Alt\+/g,Pm?`⌥`:`Alt+`).replace(/Shift\+/g,Pm?`⇧`:`Shift+`).replace(/Meta\+/g,`⌘`).replace(/Ctrl\+/g,Pm?`⌃`:`Ctrl+`):``}function Im(e){let t=[];for(let n of e)n.type===`file`&&t.push({name:n.name,path:n.path}),n.children&&t.push(...Im(n.children));return t}function Lm(e){return e?e.startsWith(`/`)||e.startsWith(`~/`)||e.startsWith(`~\\`)||/^[A-Za-z]:[/\\]/.test(e):!1}function Rm(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 zm=new Map;function Bm({open:e,onClose:t,initialQuery:n=``}){let[r,i]=(0,z.useState)(``),[a,o]=(0,z.useState)(0),[s,c]=(0,z.useState)([]),[l,u]=(0,z.useState)(!1),[d,f]=(0,z.useState)([]),p=(0,z.useRef)(null),m=(0,z.useRef)(null),h=Se(e=>e.openTab),g=td(e=>e.activeProject),_=Hd(e=>e.tree),v=I(e=>e.setSidebarActiveTab),y=I(e=>e.sidebarCollapsed),b=I(e=>e.toggleSidebar),x=gd(e=>e.getBinding),S=(0,z.useCallback)(async e=>{if(zm.has(e)){c(zm.get(e));return}u(!0);try{let t=await R.get(`/api/fs/list?dir=${encodeURIComponent(e)}`);zm.set(e,t),c(t)}catch{c([])}finally{u(!1)}},[]);(0,z.useEffect)(()=>{if(!Lm(r)){c([]);return}S(Rm(r))},[r,S]),(0,z.useEffect)(()=>{if(Lm(r)||r.trim().length<2){f([]);return}let e=setTimeout(async()=>{try{f(await R.get(`/api/db/search?q=${encodeURIComponent(r.trim())}`)??[])}catch{f([])}},300);return()=>clearTimeout(e)},[r]);let C=(0,z.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()};return[{id:`chat`,label:`New AI Chat`,icon:It,action:r(`chat`,`AI Chat`),keywords:`ai assistant claude`,group:`action`,shortcut:Fm(x(`open-chat`))},{id:`terminal`,label:`New Terminal`,icon:nn,action:r(`terminal`,`Terminal`),keywords:`bash shell console`,group:`action`,shortcut:Fm(x(`open-terminal`))},{id:`git-graph`,label:`Git Graph`,icon:St,action:r(`git-graph`,`Git Graph`),keywords:`branch history log`,group:`action`,shortcut:Fm(x(`open-git-graph`))},{id:`postgres`,label:`PostgreSQL`,icon:lt,action:r(`postgres`,`PostgreSQL`),keywords:`database pg sql query`,group:`action`},{id:`git-status`,label:`Git Status`,icon:Ct,action:()=>{v(`git`),t()},keywords:`changes diff staged`,group:`action`,shortcut:Fm(x(`open-git-status`))},{id:`settings`,label:`Settings`,icon:Qt,action:()=>{y&&b(),v(`settings`),t()},keywords:`config preferences theme`,group:`action`,shortcut:Fm(x(`open-settings`))}]},[g,h,t,v,y,b,x]),w=(0,z.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0;return Im(_).map(r=>({id:`file:${r.path}`,label:r.name,hint:r.path,icon:mt,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]),T=(0,z.useMemo)(()=>{let e=g?.name??null,n=g?{projectName:g.name}:void 0;return s.map(r=>{let i=De(r);return{id:`fs:${r}`,label:i,hint:r,icon:yt,group:`fs`,keywords:r,action:()=>{h({type:`editor`,title:i,projectId:e,metadata:{...n,filePath:r},closable:!0}),t()}}})},[s,g,h,t]),E=(0,z.useMemo)(()=>d.map(e=>({id:`db:${e.connectionId}:${e.schemaName}.${e.tableName}`,label:e.tableName,hint:`${e.connectionName} (${e.connectionType===`postgres`?`PG`:`SQLite`})`,icon:lt,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]),D=(0,z.useMemo)(()=>[...C,...w],[C,w]),O=(0,z.useMemo)(()=>{if(Lm(r)){let e=r.lastIndexOf(`/`),t=e>=0?r.slice(e+1).toLowerCase():``;return t?T.filter(e=>{let n=e.label.toLowerCase(),r=(e.keywords??``).toLowerCase();return n.includes(t)||r.includes(t)}).slice(0,50):T.slice(0,50)}if(!r.trim())return C;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=D.filter(e=>t(e.label.toLowerCase())||e.keywords&&t(e.keywords.toLowerCase()));return r.trim().length>=2?[...E,...n]:n},[D,C,T,E,r]);(0,z.useEffect)(()=>{e&&(i(n||``),o(0),c([]),f([]),requestAnimationFrame(()=>p.current?.focus()))},[e]),(0,z.useEffect)(()=>{o(e=>Math.min(e,Math.max(O.length-1,0)))},[O.length]),(0,z.useEffect)(()=>{let e=m.current;e&&e.children[a]?.scrollIntoView({block:`nearest`})},[a]);let k=(0,z.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 A(e){let n=O.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?O[a]?.action():r.trim()&&k();break;case`Escape`:e.preventDefault(),t();break}}if(!e)return null;let ee=Lm(r);return(0,B.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:t,children:[(0,B.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,B.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:A,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,B.jsx)(Xt,{className:`size-4 text-text-subtle shrink-0`}),(0,B.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,B.jsx)(Mt,{className:`size-3.5 animate-spin text-text-subtle shrink-0`}),(0,B.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,B.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,B.jsx)(`div`,{ref:m,className:`max-h-72 overflow-y-auto py-1`,children:O.length===0?l?(0,B.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`Searching...`}):r.trim()?(0,B.jsxs)(`button`,{onClick:k,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,B.jsx)(It,{className:`size-4 shrink-0 text-accent`}),(0,B.jsxs)(`span`,{children:[`Ask AI: `,(0,B.jsx)(`span`,{className:`text-text-primary font-medium`,children:r.trim().slice(0,60)})]})]}):(0,B.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No results`}):O.map((e,t)=>{let n=e.icon;return(0,B.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,B.jsx)(n,{className:`size-4 shrink-0`}),(0,B.jsx)(`span`,{className:`truncate`,children:e.label}),e.hint&&(0,B.jsxs)(`span`,{className:`ml-auto flex items-center gap-1.5 text-xs text-text-subtle truncate max-w-[200px]`,children:[e.connectionColor&&(0,B.jsx)(`span`,{className:`shrink-0 size-2 rounded-full`,style:{backgroundColor:e.connectionColor}}),e.hint]}),e.shortcut&&(0,B.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,B.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 border-t border-border px-3 py-1.5`,children:[(0,B.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`Press`}),(0,B.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,B.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,B.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`to open this palette`})]})]})]})}function Vm(){let[e,t]=(0,z.useState)(null),[n,i]=(0,z.useState)(!1);(0,z.useEffect)(()=>{function e(e){let n=e.detail;n&&(t(n),i(!1))}return window.addEventListener(`open-bug-report`,e),()=>window.removeEventListener(`open-bug-report`,e)},[]);let a=(0,z.useCallback)(()=>t(null),[]);return e?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/50`,onClick:a}),(0,B.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,B.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,B.jsx)(`span`,{className:`text-sm font-medium`,children:`Bug Report`}),(0,B.jsx)(`button`,{onClick:a,className:`p-1 rounded hover:bg-surface-elevated`,children:(0,B.jsx)(r,{className:`size-4`})})]}),(0,B.jsx)(`pre`,{className:`flex-1 overflow-auto px-4 py-2 text-xs font-mono whitespace-pre-wrap break-all`,children:e}),(0,B.jsxs)(`div`,{className:`flex gap-2 p-3 border-t border-border`,children:[(0,B.jsxs)(`button`,{onClick:async()=>{await rm(e)&&i(!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,B.jsx)(c,{className:`size-3`}):(0,B.jsx)(ct,{className:`size-3`}),n?`Copied`:`Copy`]}),(0,B.jsxs)(`button`,{onClick:()=>{nm(e),a()},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,B.jsx)(ye,{className:`size-3`}),`Open GitHub Issue`]})]})]})]}):null}function Hm(){let[e,t]=(0,z.useState)(`checking`),[n,r]=(0,z.useState)(!1),[i,a]=(0,z.useState)(),[o,s]=(0,z.useState)(!1);(0,z.useEffect)(()=>{let e=()=>{a(`settings`),r(!0)};return window.addEventListener(`open-mobile-settings`,e),()=>window.removeEventListener(`open-mobile-settings`,e)},[]);let[c,l]=(0,z.useState)(()=>new Set([`__global__`])),u=I(e=>e.theme),d=I(e=>e.deviceName),f=td(e=>e.fetchProjects),p=I(e=>e.fetchServerInfo),m=td(e=>e.activeProject),h=(0,z.useRef)(xm());(0,z.useEffect)(()=>{if(Te(u),u===`system`){let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>Te(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}},[u]),(0,z.useEffect)(()=>{p()},[p]),(0,z.useEffect)(()=>{async function e(){let e=Ae();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()},[]),Cm();let{paletteOpen:g,paletteInitialQuery:_,closePalette:v}=vd();Am(),Nm(),(0,z.useEffect)(()=>{if(e!==`authenticated`)return;let t=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,t),()=>window.removeEventListener(`beforeunload`,t)},[e]),(0,z.useEffect)(()=>{e===`authenticated`&&we(async()=>{let{useKeybindingsStore:e}=await import(`./keybindings-store-CJS_N6r7.js`);return{useKeybindingsStore:e}},__vite__mapDeps([25,1,11])).then(({useKeybindingsStore:e})=>{e.getState().loadFromServer()})},[e]),(0,z.useEffect)(()=>{e===`authenticated`&&f().then(()=>{let{projectName:e,tabId:t,openChat:n}=h.current,{projects:r,customOrder:i}=td.getState();if(r.length===0)return;let a=e?r.find(t=>t.name===e):void 0;a||=ed(r,i)[0],a&&(td.getState().setActiveProject(a),e&&t&&queueMicrotask(()=>{let{tabs:e}=Se.getState();e.some(e=>e.id===t)&&Se.getState().setActiveTab(t)})),n&&queueMicrotask(()=>{let{tabs:e,setActiveTab:t,openTab:r}=Se.getState(),i=e.find(e=>e.type===`chat`&&e.metadata?.sessionId===n);i?t(i.id):r({type:`chat`,title:`Chat`,projectId:a?.name??null,closable:!0,metadata:{sessionId:n}});let o=new URL(window.location.href);o.searchParams.delete(`openChat`),window.history.replaceState(null,``,o.pathname)})})},[e,f]),(0,z.useEffect)(()=>{let e=m?.name??`__global__`;Se.getState().switchProject(e)},[m?.name]),(0,z.useEffect)(()=>{let e=m?.name??`__global__`;l(t=>t.has(e)?t:new Set([...t,e]))},[m?.name]),(0,z.useEffect)(()=>{e===`authenticated`&&!m&&Se.getState().switchProject(`__global__`)},[e,m]);let y=(0,z.useCallback)(()=>{t(`authenticated`)},[]);if(e===`checking`)return(0,B.jsx)(`div`,{className:`min-h-dvh flex items-center justify-center bg-background`,children:(0,B.jsx)(`div`,{className:`animate-pulse text-text-secondary text-sm`,children:`Loading...`})});if(e===`unauthenticated`)return(0,B.jsx)(bm,{onSuccess:y});let b=m?.name??`__global__`;return(0,B.jsx)(sl,{children:(0,B.jsxs)(`div`,{className:`h-dvh flex flex-col bg-background text-foreground overflow-hidden relative`,children:[d&&(0,B.jsx)(`div`,{className:`md:hidden fixed top-0 left-0 z-50 px-2 py-0.5 bg-primary/80 text-primary-foreground text-[10px] font-medium rounded-br`,children:d}),(0,B.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,B.jsx)(dm,{}),(0,B.jsx)(wp,{}),[...c].map(e=>(0,B.jsx)(`div`,{className:L(`flex-1 overflow-hidden pb-12 md:pb-0`,b!==e&&`hidden`),children:(0,B.jsx)(Rd,{projectName:e})},e))]}),(0,B.jsx)(hm,{onMenuPress:()=>r(!0),onProjectsPress:()=>s(!0)}),(0,B.jsx)(_m,{isOpen:n,onClose:()=>{r(!1),a(void 0)},initialTab:i}),(0,B.jsx)(ym,{isOpen:o,onClose:()=>s(!1)}),(0,B.jsx)(Bm,{open:g,onClose:v,initialQuery:_}),(0,B.jsx)(Vm,{}),(0,B.jsx)(Hn,{position:`bottom-left`,closeButton:!0,toastOptions:{className:`bg-surface border-border text-foreground`}})]})})}(0,un.createRoot)(document.getElementById(`root`)).render((0,B.jsx)(z.StrictMode,{children:(0,B.jsx)(Hm,{})}));export{St as A,nt as B,Qt as C,Wt as D,Gt as E,ut as F,et as H,lt as I,ct as L,vt as M,gt as N,It as O,mt as P,it as R,nn as S,qt as T,Ye as U,tt as V,ud as _,of as a,gd as b,$ as c,Jd as d,Yd as f,_d as g,xd as h,rf as i,xt as j,Mt as k,Gd as l,Hd as m,Zf as n,af as o,Kd as p,ef as r,sf as s,im as t,qd as u,hd as v,Xt as w,rn as x,md as y,rt as z};
|