@hienlh/ppm 0.13.44 → 0.13.45
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 +5 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/ai-settings-section-Btix996C.js +2 -1
- package/dist/web/assets/ai-settings-section-Btix996C.js.map +1 -0
- package/dist/web/assets/api-client-DIhJ5qVW.js +2 -1
- package/dist/web/assets/api-client-DIhJ5qVW.js.map +1 -0
- package/dist/web/assets/api-settings-DnHv6JgF.js +2 -1
- package/dist/web/assets/api-settings-DnHv6JgF.js.map +1 -0
- package/dist/web/assets/arrow-up-Rcw6_KKu.js +2 -1
- package/dist/web/assets/arrow-up-Rcw6_KKu.js.map +1 -0
- package/dist/web/assets/audio-preview-B6a1Djtr.js +2 -1
- package/dist/web/assets/audio-preview-B6a1Djtr.js.map +1 -0
- package/dist/web/assets/chat-tab-Z5VNzYCz.js +2 -1
- package/dist/web/assets/chat-tab-Z5VNzYCz.js.map +1 -0
- package/dist/web/assets/chevron-right-DnHIvvcy.js +2 -1
- package/dist/web/assets/chevron-right-DnHIvvcy.js.map +1 -0
- package/dist/web/assets/code-DGBecc50.js +2 -1
- package/dist/web/assets/code-DGBecc50.js.map +1 -0
- package/dist/web/assets/code-editor-Clvs0e0Q.js +2 -1
- package/dist/web/assets/code-editor-Clvs0e0Q.js.map +1 -0
- package/dist/web/assets/conflict-editor-B6nO1gln.js +2 -1
- package/dist/web/assets/conflict-editor-B6nO1gln.js.map +1 -0
- package/dist/web/assets/createLucideIcon-BjHrJDVb.js +2 -1
- package/dist/web/assets/createLucideIcon-BjHrJDVb.js.map +1 -0
- package/dist/web/assets/csv-parser-Dly5nqE1.js +2 -1
- package/dist/web/assets/csv-parser-Dly5nqE1.js.map +1 -0
- package/dist/web/assets/csv-preview-CsqFmPzb.js +2 -1
- package/dist/web/assets/csv-preview-CsqFmPzb.js.map +1 -0
- package/dist/web/assets/data-grid-overlay-editor-aTzJjALy.js +2 -1
- package/dist/web/assets/data-grid-overlay-editor-aTzJjALy.js.map +1 -0
- package/dist/web/assets/data-grid-types-BISkUXAY.js +2 -1
- package/dist/web/assets/data-grid-types-BISkUXAY.js.map +1 -0
- package/dist/web/assets/database-DOWH9-Vv.js +2 -1
- package/dist/web/assets/database-DOWH9-Vv.js.map +1 -0
- package/dist/web/assets/database-viewer-Boup8MJ_.js +2 -1
- package/dist/web/assets/database-viewer-Boup8MJ_.js.map +1 -0
- package/dist/web/assets/diff-viewer-Je2KYGME.js +2 -1
- package/dist/web/assets/diff-viewer-Je2KYGME.js.map +1 -0
- package/dist/web/assets/dist-B1I_4Jtc.js +2 -1
- package/dist/web/assets/dist-B1I_4Jtc.js.map +1 -0
- package/dist/web/assets/dist-CcDNqGjt.js +2 -1
- package/dist/web/assets/dist-CcDNqGjt.js.map +1 -0
- package/dist/web/assets/dist-wf2npcsG.js +2 -1
- package/dist/web/assets/dist-wf2npcsG.js.map +1 -0
- package/dist/web/assets/esm-UZtw2QcY.js +2 -1
- package/dist/web/assets/esm-UZtw2QcY.js.map +1 -0
- package/dist/web/assets/extension-webview-T9TN70nb.js +2 -1
- package/dist/web/assets/extension-webview-T9TN70nb.js.map +1 -0
- package/dist/web/assets/file-exclamation-point-BwzaQ50n.js +2 -1
- package/dist/web/assets/file-exclamation-point-BwzaQ50n.js.map +1 -0
- package/dist/web/assets/file-store-DOxcU_7s.js +2 -1
- package/dist/web/assets/file-store-DOxcU_7s.js.map +1 -0
- package/dist/web/assets/glide-data-grid-CqT8WzTs.js +2 -1
- package/dist/web/assets/glide-data-grid-CqT8WzTs.js.map +1 -0
- package/dist/web/assets/image-preview-DeNUcGI9.js +2 -1
- package/dist/web/assets/image-preview-DeNUcGI9.js.map +1 -0
- package/dist/web/assets/index-DJtqbPFT.js +2 -1
- package/dist/web/assets/index-DJtqbPFT.js.map +1 -0
- package/dist/web/assets/input-_LFQwhzd.js +2 -1
- package/dist/web/assets/input-_LFQwhzd.js.map +1 -0
- package/dist/web/assets/katex-Bqvo_ZG0.js +2 -1
- package/dist/web/assets/katex-Bqvo_ZG0.js.map +1 -0
- package/dist/web/assets/lib-Bu71-TFS.js +2 -1
- package/dist/web/assets/lib-Bu71-TFS.js.map +1 -0
- package/dist/web/assets/markdown-renderer-CXPtICSx.js +2 -1
- package/dist/web/assets/markdown-renderer-CXPtICSx.js.map +1 -0
- package/dist/web/assets/number-overlay-editor-CewUR5pB.js +2 -1
- package/dist/web/assets/number-overlay-editor-CewUR5pB.js.map +1 -0
- package/dist/web/assets/pdf-preview-DI2JU2Lm.js +2 -1
- package/dist/web/assets/pdf-preview-DI2JU2Lm.js.map +1 -0
- package/dist/web/assets/port-forwarding-tab-Cuv_37LW.js +2 -1
- package/dist/web/assets/port-forwarding-tab-Cuv_37LW.js.map +1 -0
- package/dist/web/assets/postgres-viewer-D76ygOZo.js +2 -1
- package/dist/web/assets/postgres-viewer-D76ygOZo.js.map +1 -0
- package/dist/web/assets/react-DMIOAtcX.js +2 -1
- package/dist/web/assets/react-DMIOAtcX.js.map +1 -0
- package/dist/web/assets/refresh-cw-BjrAbUJe.js +2 -1
- package/dist/web/assets/refresh-cw-BjrAbUJe.js.map +1 -0
- package/dist/web/assets/scroll-area-BDi_FNzr.js +2 -1
- package/dist/web/assets/scroll-area-BDi_FNzr.js.map +1 -0
- package/dist/web/assets/search-tM8K5zWU.js +2 -1
- package/dist/web/assets/search-tM8K5zWU.js.map +1 -0
- package/dist/web/assets/settings-store-CVrIYYCB.js +2 -1
- package/dist/web/assets/settings-store-CVrIYYCB.js.map +1 -0
- package/dist/web/assets/sparkles-CulWHe4c.js +2 -1
- package/dist/web/assets/sparkles-CulWHe4c.js.map +1 -0
- package/dist/web/assets/sql-query-editor-lSlKMPlG.js +2 -1
- package/dist/web/assets/sql-query-editor-lSlKMPlG.js.map +1 -0
- package/dist/web/assets/sqlite-viewer-DwTatNwI.js +2 -1
- package/dist/web/assets/sqlite-viewer-DwTatNwI.js.map +1 -0
- package/dist/web/assets/tab-store-S9w6U5gm.js +2 -1
- package/dist/web/assets/tab-store-S9w6U5gm.js.map +1 -0
- package/dist/web/assets/table-BzjWcs87.js +2 -1
- package/dist/web/assets/table-BzjWcs87.js.map +1 -0
- package/dist/web/assets/terminal-tab-XKe1TZiV.js +2 -1
- package/dist/web/assets/terminal-tab-XKe1TZiV.js.map +1 -0
- package/dist/web/assets/text-wrap-DJz9Bgpa.js +2 -1
- package/dist/web/assets/text-wrap-DJz9Bgpa.js.map +1 -0
- package/dist/web/assets/use-blob-url-QX-XajU8.js +2 -1
- package/dist/web/assets/use-blob-url-QX-XajU8.js.map +1 -0
- package/dist/web/assets/use-monaco-theme-BePWbY58.js +2 -1
- package/dist/web/assets/use-monaco-theme-BePWbY58.js.map +1 -0
- package/dist/web/assets/utils-CQux7CsO.js +2 -1
- package/dist/web/assets/utils-CQux7CsO.js.map +1 -0
- package/dist/web/assets/vendor-markdown-0Mxgxy0L.js +2 -1
- package/dist/web/assets/vendor-markdown-0Mxgxy0L.js.map +1 -0
- package/dist/web/assets/vendor-mermaid-Cl50p6TB.js +2 -1
- package/dist/web/assets/vendor-mermaid-Cl50p6TB.js.map +1 -0
- package/dist/web/assets/vendor-ui-UXCWAcmi.js +2 -1
- package/dist/web/assets/vendor-ui-UXCWAcmi.js.map +1 -0
- package/dist/web/assets/vendor-xterm-K3_Xwigj.js +2 -1
- package/dist/web/assets/vendor-xterm-K3_Xwigj.js.map +1 -0
- package/dist/web/assets/video-preview-wHVbAYar.js +2 -1
- package/dist/web/assets/video-preview-wHVbAYar.js.map +1 -0
- package/dist/web/assets/x-BPReZWnP.js +2 -1
- package/dist/web/assets/x-BPReZWnP.js.map +1 -0
- package/dist/web/sw.js +2 -1
- package/dist/web/sw.js.map +1 -0
- package/package.json +1 -1
- package/vite.config.ts +1 -0
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{b as e}from"./vendor-markdown-0Mxgxy0L.js";import{t}from"./file-exclamation-point-BwzaQ50n.js";import"./api-client-DIhJ5qVW.js";import{G as n}from"./index-DJtqbPFT.js";import{t as r}from"./use-blob-url-QX-XajU8.js";var i=e();function a({filePath:e,projectName:a}){let{blobUrl:o,error:s}=r(e,a);return s?(0,i.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,i.jsx)(t,{className:`size-10 text-text-subtle`}),(0,i.jsx)(`p`,{className:`text-sm`,children:`Failed to load image.`})]}):o?(0,i.jsx)(`div`,{className:`flex items-center justify-center h-full p-4 bg-surface overflow-auto`,children:(0,i.jsx)(`img`,{src:o,alt:e,className:`max-w-full max-h-full object-contain`})}):(0,i.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,i.jsx)(n,{className:`size-5 animate-spin text-text-subtle`})})}export{a as ImagePreview};
|
|
1
|
+
import{b as e}from"./vendor-markdown-0Mxgxy0L.js";import{t}from"./file-exclamation-point-BwzaQ50n.js";import"./api-client-DIhJ5qVW.js";import{G as n}from"./index-DJtqbPFT.js";import{t as r}from"./use-blob-url-QX-XajU8.js";var i=e();function a({filePath:e,projectName:a}){let{blobUrl:o,error:s}=r(e,a);return s?(0,i.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,i.jsx)(t,{className:`size-10 text-text-subtle`}),(0,i.jsx)(`p`,{className:`text-sm`,children:`Failed to load image.`})]}):o?(0,i.jsx)(`div`,{className:`flex items-center justify-center h-full p-4 bg-surface overflow-auto`,children:(0,i.jsx)(`img`,{src:o,alt:e,className:`max-w-full max-h-full object-contain`})}):(0,i.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,i.jsx)(n,{className:`size-5 animate-spin text-text-subtle`})})}export{a as ImagePreview};
|
|
2
|
+
//# sourceMappingURL=image-preview-DeNUcGI9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-preview-DeNUcGI9.js","names":[],"sources":["../../../src/web/components/editor/image-preview.tsx"],"sourcesContent":["import { Loader2, FileWarning } from \"lucide-react\";\nimport { useBlobUrl } from \"./use-blob-url\";\n\nexport function ImagePreview({ filePath, projectName }: { filePath: string; projectName: string }) {\n const { blobUrl, error } = useBlobUrl(filePath, projectName);\n\n if (error) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full gap-3 text-text-secondary\">\n <FileWarning className=\"size-10 text-text-subtle\" />\n <p className=\"text-sm\">Failed to load image.</p>\n </div>\n );\n }\n if (!blobUrl) {\n return <div className=\"flex items-center justify-center h-full\"><Loader2 className=\"size-5 animate-spin text-text-subtle\" /></div>;\n }\n return (\n <div className=\"flex items-center justify-center h-full p-4 bg-surface overflow-auto\">\n <img src={blobUrl} alt={filePath} className=\"max-w-full max-h-full object-contain\" />\n </div>\n );\n}\n"],"mappings":"wOAGA,SAAgB,EAAa,CAAE,WAAU,eAA0D,CACjG,GAAM,CAAE,UAAS,SAAU,EAAW,EAAU,EAAY,CAa5D,OAXI,GACF,EAAA,EAAA,MACG,MAAD,CAAK,UAAU,sFAAf,EAAA,EAAA,EAAA,KACG,EAAD,CAAa,UAAU,2BAA6B,CAAA,EAAA,EAAA,EAAA,KACnD,IAAD,CAAG,UAAU,mBAAU,wBAAyB,CAAA,CAC5C,GAGL,GAGL,EAAA,EAAA,KACG,MAAD,CAAK,UAAU,0FACZ,MAAD,CAAK,IAAK,EAAS,IAAK,EAAU,UAAU,uCAAyC,CAAA,CACjF,CAAA,EALN,EAAA,EAAA,KAAQ,MAAD,CAAK,UAAU,6DAA2C,EAAD,CAAS,UAAU,uCAAyC,CAAA,CAAM,CAAA"}
|
|
@@ -24,4 +24,5 @@ OPENAI_API_KEY=${e.authKey}`}),(0,q.jsx)(z,{variant:`ghost`,size:`sm`,className:
|
|
|
24
24
|
<rect width="32" height="32" rx="6" fill="${vu}"/>
|
|
25
25
|
${[10,16,22].map((t,n)=>`<circle cx="${t}" cy="${n===e?13:17}" r="3" fill="white"/>`).join(``)}
|
|
26
26
|
${t?`<circle cx="26" cy="6" r="5" fill="${yu}"/>`:``}
|
|
27
|
-
</svg>`}var Su=e=>`data:image/svg+xml,${encodeURIComponent(e)}`,Cu=[Su(bu(!1)),Su(bu(!0))],wu=[0,1,2,-1].map(e=>[Su(xu(e,!1)),Su(xu(e,!0))]),Tu=wu.length;function Eu(e,t=null){let n=document.getElementById(`ppm-favicon`);if(!n)return;let r=e?1:0;t===null?n.href=Cu[r]:n.href=wu[(t%Tu+Tu)%Tu][r]}function Du(e,t,n){let r=[t,n||null,`PPM`].filter(Boolean).join(` - `);return e>0?`(${e}) ${r}`:r}function Ou(){let e=Ue(e=>e.activeProject),t=Pe(e=>e.deviceName),n=Qa($a),r=(0,K.useRef)(null);(0,K.useEffect)(()=>{let i=()=>Xa(Ya.getState())>0,a=()=>{let n=Xa(Ya.getState());document.title=Du(n,e?.name,t??void 0)};if(a(),n){let e=0;Eu(i(),e),r.current=setInterval(()=>{e=(e+1)%Tu,Eu(i(),e)},300)}else Eu(i());let o=Ya.subscribe(()=>{a(),n||Eu(i())});return()=>{o(),r.current&&=(clearInterval(r.current),null)}},[e?.name,t,n])}var ku=15e3,Au=je((e,t)=>({isDown:!1,downSince:null,showOverlay:!1,markDown:()=>{let{downSince:n}=t(),r=Date.now(),i=n??r;e({isDown:!0,downSince:i,showOverlay:r-i>=ku})},markUp:()=>{e({isDown:!1,downSince:null,showOverlay:!1})}})),ju=1e4,Mu=2e3;function Nu(){(0,K.useEffect)(()=>{let e=!1,t,{markDown:n,markUp:r}=Au.getState();async function i(){try{let t=await fetch(`/api/health`,{cache:`no-store`});if(t.ok&&e){if(r(),`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload();return}t.ok&&r(),e=!1}catch{e=!0,n()}t=setTimeout(i,e?Mu:ju)}return t=setTimeout(i,ju),()=>clearTimeout(t)},[])}function Pu(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t>=0?e.slice(t+1):e}function Fu(e,t){let n=0,r=0,i=-1;for(let a=0;a<e.length;a++){if(n=t.indexOf(e[a],n),n===-1)return-1;i>=0&&(r+=n-i-1),i=n,n++}return r}function Iu(e,t,n,r,i){if(t===e)return{tier:0,offset:0,nameLen:r,depth:i};if(t.startsWith(e))return{tier:1,offset:0,nameLen:r,depth:i};let a=t.indexOf(e);if(a>=0)return{tier:2,offset:a,nameLen:r,depth:i};let o=n.indexOf(e);if(o>=0)return{tier:3,offset:o,nameLen:r,depth:i};let s=Fu(e,t);if(s>=0)return{tier:4,offset:s,nameLen:r,depth:i};let c=Fu(e,n);return c>=0?{tier:5,offset:c,nameLen:r,depth:i}:null}function Lu(e,t,n){let r=n.toLowerCase();return Iu(e.toLowerCase(),Pu(r),r,t.length,n.split(`/`).length)}function Ru(e,t){return e.tier-t.tier||e.offset-t.offset||e.nameLen-t.nameLen||e.depth-t.depth}var zu=100,Bu=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent),Vu={"git-branch":Rt,database:ue,refresh:Ae,plus:Oe,terminal:On,settings:Sn,search:we,"file-code":xt,globe:se};function Hu(e){return e?e.replace(/Mod\+/g,Bu?`⌘`:`Ctrl+`).replace(/Alt\+/g,Bu?`⌥`:`Alt+`).replace(/Shift\+/g,Bu?`⇧`:`Shift+`).replace(/Meta\+/g,`⌘`).replace(/Ctrl\+/g,Bu?`⌃`:`Ctrl+`):``}function Uu(e){let t=[];for(let n of e)n.type===`file`&&t.push({name:n.name,path:n.path}),n.children&&t.push(...Uu(n.children));return t}function Wu(e){return e?e.startsWith(`/`)||e.startsWith(`~/`)||e.startsWith(`~\\`)||/^[A-Za-z]:[/\\]/.test(e):!1}function Gu(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 Ku=new Map;function qu({open:e,onClose:t,initialQuery:n=``}){let[r,i]=(0,K.useState)(``),a=(0,K.useDeferredValue)(r),[o,s]=(0,K.useState)(0),[c,l]=(0,K.useState)([]),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)([]),m=(0,K.useRef)(null),h=(0,K.useRef)(null),g=W(e=>e.openTab),_=Ue(e=>e.activeProject),v=We(e=>e.fileIndex),y=We(e=>e.indexStatus),b=We(e=>e.loadIndex),x=We(e=>e.tree),S=Pe(e=>e.setSidebarActiveTab),C=Pe(e=>e.sidebarCollapsed),w=Pe(e=>e.toggleSidebar),T=Ba(e=>e.getBinding),E=Va(e=>e.contributions),D=(0,K.useCallback)(async e=>{if(Ku.has(e)){l(Ku.get(e));return}d(!0);try{let t=await V.get(`/api/fs/list?dir=${encodeURIComponent(e)}`);Ku.set(e,t),l(t)}catch{l([])}finally{d(!1)}},[]);(0,K.useEffect)(()=>{if(!Wu(r)){l([]);return}D(Gu(r))},[r,D]),(0,K.useEffect)(()=>{if(Wu(r)||r.trim().length<2){p([]);return}let e=setTimeout(async()=>{try{p(await V.get(`/api/db/search?q=${encodeURIComponent(r.trim())}`)??[])}catch{p([])}},300);return()=>clearTimeout(e)},[r]);let O=(0,K.useMemo)(()=>{let e=_?.name??null,n=_?{projectName:_.name}:void 0,r=(r,i)=>()=>{g({type:r,title:i,projectId:e,metadata:n,closable:!0}),t()},i=[{id:`chat`,label:`New AI Chat`,icon:en,action:r(`chat`,`AI Chat`),keywords:`ai assistant claude`,group:`action`,shortcut:Hu(T(`open-chat`))},{id:`new-file`,label:`New File`,icon:Et,action:()=>{W.getState().openNewFile(),t()},keywords:`create untitled blank empty`,group:`action`,shortcut:Hu(T(`new-file`))},{id:`terminal`,label:`New Terminal`,icon:On,action:r(`terminal`,`Terminal`),keywords:`bash shell console`,group:`action`,shortcut:Hu(T(`open-terminal`))},{id:`ports`,label:`Port Forwarding`,icon:se,action:r(`ports`,`Ports`),keywords:`web preview localhost port forward tunnel url`,group:`action`},{id:`postgres`,label:`PostgreSQL`,icon:ue,action:r(`postgres`,`PostgreSQL`),keywords:`database pg sql query`,group:`action`},{id:`voice-input`,label:`Voice Input`,icon:tn,action:()=>{window.dispatchEvent(new CustomEvent(`toggle-voice-input`)),t()},keywords:`speech microphone dictate voice`,group:`action`,shortcut:Hu(T(`voice-input`))},{id:`git-status`,label:`Git Status`,icon:zt,action:()=>{S(`git`),t()},keywords:`changes diff staged`,group:`action`,shortcut:Hu(T(`open-git-status`))},{id:`compare-files`,label:`Compare Files...`,icon:xe,group:`action`,keywords:`diff compare two files select`,shortcut:Hu(T(`compare-files`)),action:()=>{let{activeTabId:e,tabs:n}=W.getState(),r=n.find(t=>t.id===e),i=r?.metadata;r?.type===`editor`&&i?.filePath&&i?.projectName&&ea.getState().setSelection({filePath:i.filePath,projectName:i.projectName,dirtyContent:i.unsavedContent,label:Le(i.filePath)}),window.dispatchEvent(new CustomEvent(`open-compare-picker`)),t()}},{id:`settings`,label:`Settings`,icon:Sn,action:()=>{C&&w(),S(`settings`),t()},keywords:`config preferences theme`,group:`action`,shortcut:Hu(T(`open-settings`))}],a=E?.keybindings??[],o=(E?.commands??[]).map(e=>{let n=a.find(t=>t.command===e.command),r=(n?T(`ext:${n.command}`):``)||(n?Bu&&n.mac?n.mac:n.key:``);return{id:`ext:${e.command}`,label:e.title,hint:e.category,icon:e.icon&&Vu[e.icon]||mn,group:`action`,keywords:`extension ${e.command} ${e.category??``}`,shortcut:r?Hu(r):void 0,action:()=>{let n=[];_?.path&&n.push(_.path),window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e.command,args:n}})),t()}}});return[...i,...o]},[_,g,t,S,C,w,T,E]),k=(0,K.useMemo)(()=>{let e=_?.name??null,n=_?{projectName:_.name}:void 0;return(y===`ready`?v.filter(e=>e.type===`file`):Uu(x)).map(r=>({id:`file:${r.path}`,label:r.name,hint:r.path,icon:xt,group:`file`,keywords:r.path,isIgnored:`isIgnored`in r?r.isIgnored:void 0,action:()=>{g({type:`editor`,title:r.name,projectId:e,metadata:{...n,filePath:r.path},closable:!0}),t()}}))},[y,v,x,_,g,t]),ee=(0,K.useMemo)(()=>{let e=_?.name??null,n=_?{projectName:_.name}:void 0;return c.map(r=>{let i=Le(r);return{id:`fs:${r}`,label:i,hint:r,icon:Mt,group:`fs`,keywords:r,action:()=>{g({type:`editor`,title:i,projectId:e,metadata:{...n,filePath:r},closable:!0}),t()}}})},[c,_,g,t]),A=(0,K.useMemo)(()=>f.map(e=>({id:`db:${e.connectionId}:${e.schemaName}.${e.tableName}`,label:e.tableName,hint:`${e.connectionName} (${e.connectionType===`postgres`?`PG`:`SQLite`})`,icon:ue,group:`db`,connectionColor:e.connectionColor,action:()=>{g({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()}})),[f,g,t]),te=(0,K.useMemo)(()=>[...O,...k],[O,k]),ne=(0,K.useMemo)(()=>te.map(e=>{let t=e.keywords??e.label,n=t.toLowerCase();return{cmd:e,filenameLower:Pu(n),pathLower:n,labelLen:e.label.length,depth:t.split(`/`).length}}),[te]),re=(0,K.useMemo)(()=>{if(Wu(a)){let e=a.lastIndexOf(`/`),t=e>=0?a.slice(e+1).toLowerCase():``;return t?ee.filter(e=>{let n=e.label.toLowerCase(),r=(e.keywords??``).toLowerCase();return n.includes(t)||r.includes(t)}).slice(0,50):ee.slice(0,50)}if(!a.trim())return O;let e=a.toLowerCase().replace(/^\.\.?\//,``),t=[];for(let n of ne){let r=Iu(e,n.filenameLower,n.pathLower,n.labelLen,n.depth);r&&t.push({cmd:n.cmd,score:r})}t.sort((e,t)=>Ru(e.score,t.score));let n=t.slice(0,zu).map(e=>e.cmd);return a.trim().length>=2?[...A,...n]:n},[ne,O,ee,A,a]);(0,K.useEffect)(()=>{e&&y===`idle`&&_&&b(_.name)},[e,y,_,b]),(0,K.useEffect)(()=>{e&&(i(n||``),s(0),l([]),p([]),requestAnimationFrame(()=>m.current?.focus()))},[e]),(0,K.useEffect)(()=>{s(e=>Math.min(e,Math.max(re.length-1,0)))},[re.length]),(0,K.useEffect)(()=>{let e=h.current;e&&e.children[o]?.scrollIntoView({block:`nearest`})},[o]);let j=(0,K.useCallback)(()=>{r.trim()&&(g({type:`chat`,title:`AI Chat`,projectId:_?.name??null,metadata:{projectName:_?.name,pendingMessage:r.trim()},closable:!0}),t())},[r,_,g,t]);function M(e){let n=re.length;switch(e.key){case`ArrowDown`:e.preventDefault(),n>0&&s(e=>(e+1)%n);break;case`ArrowUp`:e.preventDefault(),n>0&&s(e=>(e-1+n)%n);break;case`Enter`:e.preventDefault(),n>0?re[o]?.action():r.trim()&&j();break;case`Escape`:e.preventDefault(),t();break}}if(!e)return null;let N=Wu(r);return(0,q.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:t,children:[(0,q.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,q.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:M,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,q.jsx)(we,{className:`size-4 text-text-subtle shrink-0`}),(0,q.jsx)(`input`,{ref:m,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`}),u&&(0,q.jsx)(G,{className:`size-3.5 animate-spin text-text-subtle shrink-0`}),(0,q.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`})]}),N&&!u&&c.length===0&&r.length<4&&(0,q.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/)`}),!N&&(y===`loading`||y===`idle`)&&(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5 px-3 py-1.5 border-b border-border/50`,children:[(0,q.jsx)(G,{className:`size-3 animate-spin text-text-subtle shrink-0`}),(0,q.jsx)(`span`,{className:`text-[11px] text-text-subtle italic`,children:`Indexing project…`})]}),!N&&y===`error`&&(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border/50`,children:[(0,q.jsx)(`span`,{className:`text-[11px] text-text-subtle`,children:`Failed to build file index —`}),(0,q.jsx)(`button`,{onClick:()=>_&&b(_.name),className:`text-[11px] text-accent hover:underline`,children:`retry`})]}),(0,q.jsx)(`div`,{ref:h,className:`max-h-72 overflow-y-auto py-1`,children:re.length===0?u?(0,q.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`Searching...`}):r.trim()?(0,q.jsxs)(`button`,{onClick:j,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,q.jsx)(en,{className:`size-4 shrink-0 text-accent`}),(0,q.jsxs)(`span`,{children:[`Ask AI: `,(0,q.jsx)(`span`,{className:`text-text-primary font-medium`,children:r.trim().slice(0,60)})]})]}):(0,q.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No results`}):re.map((e,t)=>{let n=e.icon;return(0,q.jsxs)(`button`,{onClick:e.action,className:`flex items-center gap-3 w-full px-3 py-2 text-sm text-left transition-colors ${t===o?`bg-accent/15 text-text-primary`:`text-text-secondary hover:bg-surface-elevated`} ${e.isIgnored?`opacity-60`:``}`,title:e.isIgnored?`Gitignored file`:void 0,children:[(0,q.jsx)(n,{className:`size-4 shrink-0`}),(0,q.jsx)(`span`,{className:`truncate`,children:e.label}),e.hint&&(0,q.jsxs)(`span`,{className:`ml-auto flex items-center gap-1.5 text-xs text-text-subtle truncate max-w-[200px]`,children:[e.connectionColor&&(0,q.jsx)(`span`,{className:`shrink-0 size-2 rounded-full`,style:{backgroundColor:e.connectionColor}}),e.hint]}),e.shortcut&&(0,q.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,q.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 border-t border-border px-3 py-1.5`,children:[(0,q.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`Press`}),(0,q.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,q.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,q.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`to open this palette`})]})]})]})}var Ju=50;function Yu({open:e,onOpenChange:t,initialA:n}={}){let r=e!==void 0,[i,a]=(0,K.useState)(!1),o=r?e:i,s=e=>{r?t?.(e):a(e)},[c,l]=(0,K.useState)(n??null);(0,K.useEffect)(()=>{if(r)return;function e(){l(ea.getState().selection),a(!0)}return window.addEventListener(`open-compare-picker`,e),()=>window.removeEventListener(`open-compare-picker`,e)},[r]);let[u,d]=(0,K.useState)(``),[f,p]=(0,K.useState)(0),[m,h]=(0,K.useState)(null),g=(0,K.useRef)(null),_=W(e=>e.tabs),v=We(e=>e.fileIndex),y=Ue(e=>e.activeProject);(0,K.useEffect)(()=>{o&&(r&&l(n??null),d(``),p(0),h(null),setTimeout(()=>g.current?.focus(),50))},[o,n,r]);let b=(0,K.useMemo)(()=>{let e=_.filter(e=>e.type===`editor`&&e.metadata?.filePath).map(e=>({id:`tab:${e.id}`,path:e.metadata.filePath,label:Le(e.metadata.filePath),source:`tab`,dirtyContent:e.metadata.unsavedContent})),t=new Set(e.map(e=>e.path)),n=v.filter(e=>e.type===`file`&&!t.has(e.path)).map(e=>({id:`file:${e.path}`,path:e.path,label:e.name,source:`file`}));return[...e,...n]},[_,v]),x=(0,K.useMemo)(()=>u.trim()?b.map(e=>{let t=Lu(u,e.label,e.path);return t?{c:e,score:t}:null}).filter(e=>e!==null).sort((e,t)=>Ru(e.score,t.score)).slice(0,Ju).map(e=>e.c):b.slice(0,Ju),[b,u]);(0,K.useEffect)(()=>{f>=x.length&&p(Math.max(0,x.length-1))},[x,f]);let S=(0,K.useRef)(!1);async function C(e){if(y){if(!c){l({filePath:e.path,projectName:y.name,dirtyContent:e.dirtyContent,label:e.label}),d(``),p(0),g.current?.focus();return}if(!S.current){S.current=!0;try{await na({path:c.filePath,dirtyContent:c.dirtyContent},{path:e.path,dirtyContent:e.dirtyContent},y.name),ea.getState().clearSelection(),s(!1)}catch(e){h(e instanceof Error?e.message:`Compare failed`)}finally{S.current=!1}}}}function w(e){if(e.key===`ArrowDown`)e.preventDefault(),p(e=>Math.min(x.length-1,e+1));else if(e.key===`ArrowUp`)e.preventDefault(),p(e=>Math.max(0,e-1));else if(e.key===`Enter`){e.preventDefault();let t=x[f];t&&C(t)}}return(0,q.jsx)(he,{open:o,onOpenChange:s,children:(0,q.jsxs)(_e,{className:`max-w-lg p-0 gap-0 overflow-hidden`,children:[(0,q.jsx)(ge,{className:`px-4 pt-4 pb-2`,children:(0,q.jsxs)(ve,{className:`flex items-center gap-2 text-sm`,children:[(0,q.jsx)(xe,{className:`size-4`}),`Compare Files`]})}),(0,q.jsx)(`div`,{className:`px-4 pb-2`,children:c?(0,q.jsxs)(`div`,{className:`flex items-center gap-2 text-xs bg-muted rounded px-2 py-1 w-fit max-w-full`,children:[(0,q.jsx)(xt,{className:`size-3.5 shrink-0`}),(0,q.jsx)(`span`,{className:`truncate`,title:c.filePath,children:c.label}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>l(null),className:`hover:bg-surface-elevated rounded p-0.5`,"aria-label":`Clear first file`,children:(0,q.jsx)(ke,{className:`size-3`})})]}):(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Pick first file, then second.`})}),(0,q.jsx)(`input`,{ref:g,type:`text`,value:u,onChange:e=>{d(e.target.value),p(0)},onKeyDown:w,placeholder:c?`Search for file B...`:`Search for file A...`,className:`w-full px-4 py-2 bg-transparent border-y border-border text-sm outline-none`}),m&&(0,q.jsx)(`div`,{className:`px-4 py-2 text-xs text-destructive border-b border-border`,children:m}),(0,q.jsx)(`div`,{className:`max-h-[50vh] md:max-h-80 overflow-y-auto`,children:x.length===0?(0,q.jsx)(`div`,{className:`px-4 py-6 text-center text-xs text-muted-foreground`,children:b.length===0?`No files available`:`No matches`}):x.map((e,t)=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>C(e),onMouseEnter:()=>p(t),className:H(`w-full flex items-center gap-2 px-4 py-1.5 text-left text-sm`,`hover:bg-surface-elevated transition-colors`,t===f&&`bg-surface-elevated`),children:[(0,q.jsx)(xt,{className:`size-3.5 shrink-0 text-text-secondary`}),(0,q.jsx)(`span`,{className:`truncate`,children:e.label}),(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground truncate ml-auto`,title:e.path,children:e.source===`tab`?`open`:e.path})]},e.id))})]})})}function Xu(){let[e,t]=(0,K.useState)(null),[n,r]=(0,K.useState)(!1);(0,K.useEffect)(()=>{function e(e){let n=e.detail;n&&(t(n),r(!1))}return window.addEventListener(`open-bug-report`,e),()=>window.removeEventListener(`open-bug-report`,e)},[]);let i=(0,K.useCallback)(()=>t(null),[]);return e?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/50`,onClick:i}),(0,q.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,q.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,q.jsx)(`span`,{className:`text-sm font-medium`,children:`Bug Report`}),(0,q.jsx)(`button`,{onClick:i,className:`p-1 rounded hover:bg-surface-elevated`,children:(0,q.jsx)(ke,{className:`size-4`})})]}),(0,q.jsx)(`pre`,{className:`flex-1 overflow-auto px-4 py-2 text-xs font-mono whitespace-pre-wrap break-all`,children:e}),(0,q.jsxs)(`div`,{className:`flex gap-2 p-3 border-t border-border`,children:[(0,q.jsxs)(`button`,{onClick:async()=>{await ql(e)&&r(!0)},className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-surface-elevated text-xs text-foreground hover:bg-surface transition-colors`,children:[n?(0,q.jsx)(oe,{className:`size-3`}):(0,q.jsx)(mt,{className:`size-3`}),n?`Copied`:`Copy`]}),(0,q.jsxs)(`button`,{onClick:()=>{Kl(e),i()},className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-primary text-primary-foreground text-xs hover:bg-primary/90 transition-colors`,children:[(0,q.jsx)(vt,{className:`size-3`}),`Open GitHub Issue`]})]})]})]}):null}var Zu=6e4,Qu=`ppm-upgrade-dismissed-`;async function $u(){if(`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload()}function ed({onVisibilityChange:e}){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(!1),[a,o]=(0,K.useState)(!1),[s,c]=(0,K.useState)(!1);(0,K.useEffect)(()=>{let e;async function t(){try{let e=await V.get(`/api/upgrade`);if(e.availableVersion){n(e.availableVersion);let t=Qu+e.availableVersion;sessionStorage.getItem(t)?c(!0):c(!1)}else n(null)}catch{}}return t(),e=setInterval(t,Zu),()=>clearInterval(e)},[]);let l=(0,K.useCallback)(async()=>{i(!0);try{let e=await V.post(`/api/upgrade/apply`);e.restart?(i(!1),o(!0)):(R.info(e.message||`Upgrade installed. Restart PPM manually.`),i(!1),t&&sessionStorage.setItem(Qu+t,`1`),c(!0))}catch(e){e instanceof TypeError||e.message?.includes(`fetch`)||e.message?.includes(`network`)?(i(!1),o(!0)):(R.error(`Upgrade failed: ${e.message}`),i(!1))}},[t]),u=(0,K.useCallback)(()=>{t&&sessionStorage.setItem(Qu+t,`1`),c(!0)},[t]),d=!!t&&!s||a;return(0,K.useEffect)(()=>{e?.(d)},[d,e]),d?(0,q.jsx)(`div`,{className:`w-full text-white px-3 py-1 flex items-center justify-between gap-2 z-50 text-sm shrink-0 ${a?`bg-green-600 dark:bg-green-700`:`bg-blue-600 dark:bg-blue-700`}`,children:a?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,q.jsx)(ut,{className:`size-4 shrink-0`}),(0,q.jsxs)(`span`,{className:`truncate`,children:[`Upgrade to v`,t,` installed! Reload to apply.`]})]}),(0,q.jsxs)(`button`,{onClick:$u,className:`bg-white text-green-600 font-medium rounded-full px-3 py-0.5 text-xs min-h-[28px] min-w-[28px] flex items-center gap-1.5 justify-center hover:bg-green-50 active:bg-green-100 transition-colors shrink-0`,children:[(0,q.jsx)(Ae,{className:`size-3`}),`Reload`]})]}):r?(0,q.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,q.jsx)(G,{className:`size-4 animate-spin shrink-0`}),(0,q.jsxs)(`span`,{className:`truncate`,children:[`Upgrading to v`,t,`...`]})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,q.jsx)(lt,{className:`size-4 shrink-0`}),(0,q.jsxs)(`span`,{className:`truncate`,children:[`PPM v`,t,` available`]})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,q.jsx)(`button`,{onClick:l,className:`bg-white text-blue-600 font-medium rounded-full px-3 py-0.5 text-xs min-h-[28px] min-w-[28px] flex items-center justify-center hover:bg-blue-50 active:bg-blue-100 transition-colors`,children:`Upgrade`}),(0,q.jsx)(`button`,{onClick:u,className:`min-h-[28px] min-w-[28px] flex items-center justify-center rounded-full hover:bg-blue-500 active:bg-blue-800 transition-colors`,"aria-label":`Dismiss upgrade notification`,children:(0,q.jsx)(ke,{className:`size-4`})})]})]})}):null}var td=je(e=>({src:null,alt:``,open:(t,n=``)=>e({src:t,alt:n}),close:()=>e({src:null,alt:``})}));function nd(){let{src:e,alt:t,close:n}=td(),r=(0,K.useCallback)(e=>{e.key===`Escape`&&n()},[n]);return(0,K.useEffect)(()=>{if(e)return document.addEventListener(`keydown`,r),()=>document.removeEventListener(`keydown`,r)},[e,r]),e?(0,q.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-sm animate-in fade-in duration-150`,onClick:n,children:[(0,q.jsx)(`button`,{onClick:n,className:`absolute top-4 right-4 z-10 flex items-center justify-center size-8 rounded-full bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Close`,children:(0,q.jsx)(ke,{className:`size-5`})}),(0,q.jsx)(`img`,{src:e,alt:t,className:`max-w-[90vw] max-h-[90vh] object-contain rounded-lg shadow-2xl`,onClick:e=>e.stopPropagation()})]}):null}var rd=je(e=>({svg:null,open:t=>e({svg:t}),close:()=>e({svg:null})})),id=.25,ad=4,od=.25;function sd(){let{svg:e,close:t}=rd(),n=(0,K.useRef)(null),[r,i]=(0,K.useState)(1),[a,o]=(0,K.useState)({x:0,y:0}),s=(0,K.useRef)(!1),c=(0,K.useRef)({x:0,y:0});(0,K.useEffect)(()=>{e&&(i(1),o({x:0,y:0}))},[e]);let l=(0,K.useCallback)(e=>{e.key===`Escape`&&t(),(e.key===`=`||e.key===`+`)&&i(e=>Math.min(ad,e+od)),e.key===`-`&&i(e=>Math.max(id,e-od)),e.key===`0`&&(i(1),o({x:0,y:0}))},[t]);(0,K.useEffect)(()=>{if(e)return document.addEventListener(`keydown`,l),()=>document.removeEventListener(`keydown`,l)},[e,l]);let u=(0,K.useCallback)(e=>{e.preventDefault();let t=e.deltaY>0?-od:od;i(e=>Math.min(ad,Math.max(id,e+t)))},[]),d=(0,K.useCallback)(e=>{e.button===0&&(s.current=!0,c.current={x:e.clientX,y:e.clientY},e.target.setPointerCapture(e.pointerId))},[]),f=(0,K.useCallback)(e=>{if(!s.current)return;let t=e.clientX-c.current.x,n=e.clientY-c.current.y;c.current={x:e.clientX,y:e.clientY},o(e=>({x:e.x+t,y:e.y+n}))},[]),p=(0,K.useCallback)(()=>{s.current=!1},[]);return e?(0,q.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex flex-col bg-black/85 backdrop-blur-sm animate-in fade-in duration-150`,onClick:t,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 bg-black/40`,onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`span`,{className:`text-sm text-white/70`,children:[Math.round(r*100),`% — Scroll to zoom, drag to pan, 0 to reset`]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(`button`,{onClick:()=>i(e=>Math.max(id,e-od)),className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Zoom out`,children:(0,q.jsx)(In,{className:`size-4`})}),(0,q.jsx)(`button`,{onClick:()=>i(e=>Math.min(ad,e+od)),className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Zoom in`,children:(0,q.jsx)(Fn,{className:`size-4`})}),(0,q.jsx)(`button`,{onClick:()=>{i(1),o({x:0,y:0})},className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Reset zoom`,children:(0,q.jsx)(_n,{className:`size-4`})}),(0,q.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors ml-2`,"aria-label":`Close`,children:(0,q.jsx)(ke,{className:`size-5`})})]})]}),(0,q.jsx)(`div`,{ref:n,className:`flex-1 overflow-hidden cursor-grab active:cursor-grabbing`,onClick:e=>e.stopPropagation(),onWheel:u,onPointerDown:d,onPointerMove:f,onPointerUp:p,children:(0,q.jsx)(`div`,{className:`w-full h-full flex items-center justify-center`,style:{transform:`translate(${a.x}px, ${a.y}px) scale(${r})`,transformOrigin:`center center`},children:(0,q.jsx)(`div`,{className:`mermaid-overlay-content bg-white rounded-lg p-6 shadow-2xl [&_svg]:max-w-full [&_svg]:h-auto`,dangerouslySetInnerHTML:{__html:e}})})})]}):null}var cd=`https://ppm.hienle.tech`;function ld(){return window.location.hostname.endsWith(`.trycloudflare.com`)}function ud(){let e=Au(e=>e.showOverlay),[t,n]=(0,K.useState)(!1);if(!e)return null;let r=ld();async function i(){n(!0);try{if((await fetch(`/api/health`,{cache:`no-store`})).ok){if(Au.getState().markUp(),`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload();return}}catch{}n(!1)}return(0,q.jsx)(`div`,{className:`fixed inset-0 z-[200] bg-background/95 backdrop-blur-sm flex items-center justify-center p-4`,children:(0,q.jsxs)(`div`,{className:`max-w-sm w-full text-center space-y-6`,children:[(0,q.jsx)(`div`,{className:`flex justify-center`,children:(0,q.jsx)(`div`,{className:`rounded-full bg-destructive/10 p-4`,children:(0,q.jsx)(r?Pn:yn,{className:`h-10 w-10 text-destructive`})})}),(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(`h2`,{className:`text-xl font-semibold text-foreground`,children:r?`Connection Lost`:`Server Unreachable`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground leading-relaxed`,children:r?`The tunnel appears to have closed. The server may have restarted with a new URL.`:`Cannot connect to the PPM server. It may have stopped or is restarting.`})]}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[r&&(0,q.jsx)(`a`,{href:cd,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center justify-center rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors`,children:`Open PPM Cloud`}),(0,q.jsxs)(`button`,{onClick:i,disabled:t,className:`inline-flex items-center justify-center gap-2 rounded-md border border-border px-4 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors disabled:opacity-50`,children:[(0,q.jsx)(Ae,{className:`h-4 w-4 ${t?`animate-spin`:``}`}),t?`Retrying…`:`Retry Connection`]})]}),!r&&(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`If the server was stopped, run `,(0,q.jsx)(`code`,{className:`bg-muted px-1 py-0.5 rounded text-[11px]`,children:`ppm start`}),` to restart it.`]})]})})}function dd(){let e=Va(e=>e.quickPick),t=Va(e=>e.resolveQuickPick);return e?(0,q.jsx)(fd,{items:e.items,options:e.options,onSelect:e=>t(e),onCancel:()=>t(void 0)}):null}function fd({items:e,options:t,onSelect:n,onCancel:r}){let[i,a]=(0,K.useState)(``),[o,s]=(0,K.useState)(0),[c,l]=(0,K.useState)(()=>{let t=new Set;return e.forEach((e,n)=>{e.picked&&t.add(n)}),t}),u=(0,K.useRef)(null),d=(0,K.useRef)(null),f=t.canPickMany??!1;(0,K.useEffect)(()=>{requestAnimationFrame(()=>u.current?.focus())},[]);let p=(0,K.useMemo)(()=>{if(!i.trim())return e.map((e,t)=>({item:e,originalIdx:t}));let t=i.toLowerCase();return e.map((e,t)=>({item:e,originalIdx:t})).filter(({item:e})=>e.label.toLowerCase().includes(t)||e.description?.toLowerCase().includes(t)||e.detail?.toLowerCase().includes(t))},[e,i]);(0,K.useEffect)(()=>{s(e=>Math.min(e,Math.max(p.length-1,0)))},[p.length]),(0,K.useEffect)(()=>{(d.current?.children[o])?.scrollIntoView({block:`nearest`})},[o]);let m=(0,K.useCallback)(()=>{f?n(e.filter((e,t)=>c.has(t))):p[o]&&n([p[o].item])},[f,c,e,p,o,n]);function h(e){switch(e.key){case`ArrowDown`:e.preventDefault(),p.length>0&&s(e=>(e+1)%p.length);break;case`ArrowUp`:e.preventDefault(),p.length>0&&s(e=>(e-1+p.length)%p.length);break;case` `:if(f&&p[o]){e.preventDefault();let t=p[o].originalIdx;l(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})}break;case`Enter`:e.preventDefault(),m();break;case`Escape`:e.preventDefault(),r();break}}return(0,q.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:r,children:[(0,q.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,q.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden max-h-[80vh] md:max-h-none`,onClick:e=>e.stopPropagation(),onKeyDown:h,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,q.jsx)(we,{className:`size-4 text-text-subtle shrink-0`}),(0,q.jsx)(`input`,{ref:u,type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:t.placeholder??`Select an item...`,className:`flex-1 bg-transparent text-sm text-text-primary outline-none placeholder:text-text-subtle`}),(0,q.jsx)(`kbd`,{className:`hidden sm:inline-flex items-center rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] text-text-subtle font-mono`,children:`ESC`})]}),(0,q.jsx)(`div`,{ref:d,className:`max-h-72 overflow-y-auto py-1`,children:p.length===0?(0,q.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No matching items`}):p.map(({item:e,originalIdx:t},r)=>(0,q.jsxs)(`button`,{onClick:()=>{f?l(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}):n([e])},className:H(`flex items-center gap-3 w-full px-3 py-2 text-sm text-left transition-colors`,r===o?`bg-accent/15 text-text-primary`:`text-text-secondary hover:bg-surface-elevated`),children:[f&&(0,q.jsx)(`span`,{className:H(`size-4 shrink-0 rounded border flex items-center justify-center`,c.has(t)?`bg-primary border-primary text-primary-foreground`:`border-border`),children:c.has(t)&&(0,q.jsx)(oe,{className:`size-3`})}),(0,q.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,q.jsx)(`div`,{className:`truncate`,children:e.label}),e.description&&(0,q.jsx)(`span`,{className:`text-xs text-text-subtle ml-2`,children:e.description}),e.detail&&(0,q.jsx)(`div`,{className:`text-xs text-text-subtle truncate mt-0.5`,children:e.detail})]})]},t))}),f&&(0,q.jsxs)(`div`,{className:`flex items-center justify-between border-t border-border px-3 py-1.5`,children:[(0,q.jsxs)(`span`,{className:`text-[10px] text-text-subtle`,children:[c.size,` selected`]}),(0,q.jsx)(`button`,{onClick:m,className:`text-xs text-primary hover:text-primary/80 font-medium`,children:`Confirm`})]})]})]})}function pd(){let e=Va(e=>e.inputBox),t=Va(e=>e.resolveInputBox);return e?(0,q.jsx)(md,{options:e.options,onConfirm:e=>t(e),onCancel:()=>t(void 0)}):null}function md({options:e,onConfirm:t,onCancel:n}){let[r,i]=(0,K.useState)(e.value??``),a=(0,K.useRef)(null);(0,K.useEffect)(()=>{requestAnimationFrame(()=>{a.current?.focus(),a.current?.select()})},[]);function o(e){e.key===`Enter`?(e.preventDefault(),t(r)):e.key===`Escape`&&(e.preventDefault(),n())}return(0,q.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:n,children:[(0,q.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,q.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden`,onClick:e=>e.stopPropagation(),children:[e.prompt&&(0,q.jsx)(`div`,{className:`px-3 pt-3 pb-1 text-sm text-text-primary`,children:e.prompt}),(0,q.jsx)(`div`,{className:`flex items-center gap-2 px-3 py-2.5`,children:(0,q.jsx)(`input`,{ref:a,type:e.password?`password`:`text`,value:r,onChange:e=>i(e.target.value),onKeyDown:o,placeholder:e.placeholder??``,className:`flex-1 bg-surface border border-border rounded px-2 py-1.5 text-sm text-text-primary outline-none focus:border-primary placeholder:text-text-subtle`})}),(0,q.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t border-border px-3 py-2`,children:[(0,q.jsx)(`button`,{onClick:n,className:`px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors rounded`,children:`Cancel`}),(0,q.jsx)(`button`,{onClick:()=>t(r),className:`px-3 py-1.5 text-xs bg-primary text-primary-foreground rounded hover:bg-primary/90 transition-colors font-medium`,children:`OK`})]})]})]})}var hd=3e4,gd=1e3,_d=class{ws=null;url;handlers=[];reconnectAttempts=0;reconnectTimer=null;intentionalClose=!1;pendingMessages=[];visibilityHandler=null;constructor(e){this.url=e,this.visibilityHandler=()=>{document.visibilityState===`visible`&&!this.intentionalClose&&this.ws?.readyState!==WebSocket.OPEN&&(this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null,this.reconnectAttempts=0,this.connect())},document.addEventListener(`visibilitychange`,this.visibilityHandler)}connect(){this.intentionalClose=!1,this.cleanup();let e=window.location.protocol===`https:`?`wss:`:`ws:`,t;t=this.url.startsWith(`ws`)?this.url:`${e}//${window.location.host}${this.url}`,this.ws=new WebSocket(t),this.ws.onopen=()=>{this.reconnectAttempts=0;try{this.ws?.send(JSON.stringify({type:`ready`}))}catch{}if(this.pendingMessages.length>0){console.log(`[ws] flushing ${this.pendingMessages.length} queued message(s)`);for(let e of this.pendingMessages)try{this.ws?.send(e)}catch{}this.pendingMessages=[]}},this.ws.onmessage=e=>{for(let t of this.handlers)t(e)},this.ws.onclose=()=>{this.intentionalClose||this.scheduleReconnect()},this.ws.onerror=()=>{this.ws?.close()}}disconnect(){this.intentionalClose=!0,this.pendingMessages=[],this.cleanup(),this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.visibilityHandler&&=(document.removeEventListener(`visibilitychange`,this.visibilityHandler),null)}send(e){this.ws?.readyState===WebSocket.OPEN?this.ws.send(e):this.intentionalClose?console.warn(`[ws] message dropped — WS intentionally closed`):(console.warn(`[ws] WS not open (readyState=${this.ws?.readyState??`no-ws`}) — queuing message`),this.pendingMessages.push(e))}onMessage(e){return this.handlers.push(e),()=>{this.handlers=this.handlers.filter(t=>t!==e)}}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}cleanup(){this.ws&&=(this.ws.onopen=null,this.ws.onclose=null,this.ws.onmessage=null,this.ws.onerror=null,(this.ws.readyState===WebSocket.OPEN||this.ws.readyState===WebSocket.CONNECTING)&&this.ws.close(),null)}scheduleReconnect(){let e=Math.min(gd*2**this.reconnectAttempts,hd);this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>this.connect(),e)}},vd=new Set;function $(e=!0){let t=(0,K.useRef)(null),n=(0,K.useCallback)(e=>{t.current?.send(JSON.stringify(e))},[]);return(0,K.useEffect)(()=>{if(!e)return;let r=Ne(),i=new _d(r?`/ws/extensions?token=${encodeURIComponent(r)}`:`/ws/extensions`);t.current=i,i.onMessage(e=>{let t;try{t=JSON.parse(e.data)}catch{return}let r=Va.getState();switch(t.type){case`contributions:update`:if(r.setContributions(t.contributions),t.activationErrors){let e=r.activationErrors;r.setActivationErrors(t.activationErrors);for(let[n,r]of Object.entries(t.activationErrors))e[n]||R.error(`Extension "${n}" failed to activate: ${r}`)}break;case`statusbar:update`:r.addStatusBarItem(t.item);break;case`statusbar:remove`:r.removeStatusBarItem(t.itemId);break;case`tree:update`:t.parentId?r.updateTreeChildren(t.viewId,t.parentId,t.items):r.updateTree(t.viewId,t.items);break;case`tree:refresh`:r.removeTree(t.viewId);break;case`notification`:{let e=t.level===`error`?R.error:t.level===`warn`?R.warning:R.info;if(t.actions&&t.actions.length>0){let r={action:{label:t.actions[0],onClick:()=>n({type:`notification:action`,id:t.id,action:t.actions[0]??null})},onDismiss:()=>n({type:`notification:action`,id:t.id,action:null})};t.actions.length>1&&(r.cancel={label:t.actions[1],onClick:()=>n({type:`notification:action`,id:t.id,action:t.actions[1]??null})}),e(t.message,r)}else e(t.message);break}case`quickpick:show`:r.showQuickPick(t.items,t.options).then(e=>{n({type:`quickpick:resolve`,requestId:t.requestId,selected:e??null})});break;case`inputbox:show`:r.showInputBox(t.options).then(e=>{n({type:`inputbox:resolve`,requestId:t.requestId,value:e??null})});break;case`webview:create`:{let e=t.viewType.replace(/\.view$/,``);r.addWebviewPanel({id:t.panelId,extensionId:t.extensionId,viewType:t.viewType,title:t.title,html:``});let n=`extension:${e}`,i=U.getState(),a=new Set(i.grid.flat()),o=null;for(let e of a){let t=i.panels[e];if(!t)continue;let r=t.tabs.find(e=>e.id===n||e.id.startsWith(`${n}@`));if(r){o=r.id;break}}if(o){let n=i.grid.flat().reduce((e,t)=>e||i.panels[t]?.tabs.find(e=>e.id===o)?.metadata,void 0);W.getState().updateTab(o,{title:t.title,metadata:{...n,viewType:e,panelId:t.panelId,extensionId:t.extensionId}}),W.getState().setActiveTab(o)}else if(!vd.has(e)){let n=W.getState().currentProject;W.getState().openTab({type:`extension`,title:t.title,projectId:null,closable:!0,metadata:{viewType:e,panelId:t.panelId,extensionId:t.extensionId,...n&&{projectName:n}}})}break}case`webview:html`:r.updateWebviewPanel(t.panelId,{html:t.html});break;case`webview:dispose`:r.removeWebviewPanel(t.panelId);break;case`webview:postMessage`:window.dispatchEvent(new CustomEvent(`ext:webview:message`,{detail:{panelId:t.panelId,message:t.message}}));break;case`tab:open`:W.getState().openTab({type:t.tabType,title:t.title,projectId:t.projectId??null,closable:t.closable??!0,metadata:t.metadata});break;case`project:switch`:W.getState().switchProject(t.projectName);break}});let a=e=>{let{panelId:t,message:n}=e.detail;i.send(JSON.stringify({type:`webview:message`,panelId:t,message:n}))};window.addEventListener(`ext:webview:send`,a);let o=e=>{let{viewId:t,itemId:n}=e.detail;i.send(JSON.stringify({type:`tree:expand`,viewId:t,itemId:n}))};window.addEventListener(`ext:tree:expand`,o);let s=e=>{let{command:t,args:n}=e.detail,r=t.replace(/\.view$/,``);vd.delete(r),i.send(JSON.stringify({type:`command:execute`,command:t,args:n}))};window.addEventListener(`ext:command:execute`,s);let c=e=>{let{panelId:t,viewType:n}=e.detail;if(i.send(JSON.stringify({type:`webview:close`,panelId:t})),n){let e=n.replace(/\.view$/,``);vd.add(e),setTimeout(()=>vd.delete(e),5e3)}};return window.addEventListener(`ext:webview:close`,c),i.connect(),()=>{window.removeEventListener(`ext:webview:send`,a),window.removeEventListener(`ext:tree:expand`,o),window.removeEventListener(`ext:command:execute`,s),window.removeEventListener(`ext:webview:close`,c),i.disconnect(),t.current=null}},[n,e]),{send:n}}function yd(){let[e,t]=(0,K.useState)(`checking`),[n,r]=(0,K.useState)(!1),[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(),[c,l]=(0,K.useState)(!1);(0,K.useEffect)(()=>{let e=()=>{s(`settings`),a(!0)};return window.addEventListener(`open-mobile-settings`,e),()=>window.removeEventListener(`open-mobile-settings`,e)},[]);let[u,d]=(0,K.useState)(()=>new Set([`__global__`])),f=Pe(e=>e.theme),p=Pe(e=>e.deviceName),m=Ue(e=>e.fetchProjects),h=Pe(e=>e.fetchServerInfo),g=Ue(e=>e.activeProject),_=(0,K.useRef)(uu());(0,K.useEffect)(()=>{if(Fe(f),f===`system`){let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>Fe(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}},[f]),(0,K.useEffect)(()=>{h()},[h]),(0,K.useEffect)(()=>{async function e(){let e=Ne();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()},[]),gu();let{paletteOpen:v,paletteInitialQuery:y,closePalette:b}=Ua();Ou(),Nu(),$(e===`authenticated`),(0,K.useEffect)(()=>{if(e!==`authenticated`)return;let t=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,t),()=>window.removeEventListener(`beforeunload`,t)},[e]),(0,K.useEffect)(()=>{e===`authenticated`&&Ie(async()=>{let{useKeybindingsStore:e}=await import(`./keybindings-store-DChqpL1V.js`);return{useKeybindingsStore:e}},__vite__mapDeps([49,3,1,9])).then(({useKeybindingsStore:e})=>{e.getState().loadFromServer()})},[e]),(0,K.useEffect)(()=>{e===`authenticated`&&m().then(async()=>{let e=_.current,{projects:t,customOrder:n}=Ue.getState();if(t.length===0)return;let r=e.projectName?t.find(t=>t.name===e.projectName):void 0;if(r||=Ge(t,n)[0],!r)return;let i=await ze(r.name);if(i){let e=localStorage.getItem(`ppm-panels-${r.name}`),t=He(e?JSON.parse(e):null,i);t&&t===i&&localStorage.setItem(`ppm-panels-${r.name}`,JSON.stringify(i))}if(Ue.getState().setActiveProject(r),W.getState().switchProject(r.name),e.tabType&&hu(e.tabType,e.tabIdentifier,r.name),e.openChat){hu(`chat`,e.openChat,r.name);let t=new URL(window.location.href);t.searchParams.delete(`openChat`),window.history.replaceState(null,``,t.pathname)}})},[e,m]),(0,K.useEffect)(()=>{let e=g?.name??`__global__`;W.getState().switchProject(e)},[g?.name]),(0,K.useEffect)(()=>{e!==`authenticated`||!g?.name||Ie(async()=>{let{useNotificationStore:e}=await import(`./notification-store-Dn9zySnl.js`);return{useNotificationStore:e}},__vite__mapDeps([50,3,1,9])).then(({useNotificationStore:e})=>{e.getState().loadFromServer(g.name)})},[e,g?.name]),(0,K.useEffect)(()=>{let e=g?.name??`__global__`;d(t=>t.has(e)?t:new Set([...t,e]))},[g?.name]),(0,K.useEffect)(()=>{e===`authenticated`&&!g&&W.getState().switchProject(`__global__`)},[e,g]);let x=(0,K.useCallback)(()=>{t(`authenticated`)},[]);if(e===`checking`)return(0,q.jsx)(`div`,{className:`min-h-dvh flex items-center justify-center bg-background`,children:(0,q.jsx)(`div`,{className:`animate-pulse text-text-secondary text-sm`,children:`Loading...`})});if(e===`unauthenticated`)return(0,q.jsx)(cu,{onSuccess:x});let S=g?.name??`__global__`;return(0,q.jsx)(zn,{children:(0,q.jsxs)(`div`,{className:`h-dvh flex flex-col bg-background text-foreground overflow-hidden relative`,children:[(0,q.jsx)(ed,{onVisibilityChange:r}),(0,q.jsx)(`div`,{className:`fixed z-50 overflow-hidden pointer-events-none max-md:right-0 max-md:top-0 md:left-0 md:top-0 w-10 h-10`,children:(0,q.jsx)(`div`,{className:`absolute flex items-center justify-center max-md:rotate-45 max-md:right-[-18px] max-md:top-[4px] md:-rotate-45 md:left-[-18px] md:top-[4px] w-[60px] bg-amber-500 text-white text-[6px] font-bold leading-none py-[2.5px] shadow-sm`,children:`BETA`})}),p&&(0,q.jsx)(`div`,{className:H(`md:hidden fixed left-0 z-50 px-2 py-0.5 bg-primary/80 text-primary-foreground text-[10px] font-medium rounded-br transition-[top]`,n?`top-7`:`top-0`),children:p}),(0,q.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,q.jsx)($l,{}),(0,q.jsx)(ml,{}),(0,q.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[[...u].map(e=>(0,q.jsx)(`div`,{className:H(`flex-1 overflow-hidden pb-12 md:pb-0`,S!==e&&`hidden`),children:(0,q.jsx)(So,{projectName:e})},e)),(0,q.jsx)(_o,{})]})]}),(0,q.jsx)(ru,{onMenuPress:()=>a(!0),onProjectsPress:()=>l(!0)}),(0,q.jsx)(au,{isOpen:i,onClose:()=>{a(!1),s(void 0)},initialTab:o}),(0,q.jsx)(su,{isOpen:c,onClose:()=>l(!1)}),(0,q.jsx)(qu,{open:v,onClose:b,initialQuery:y}),(0,q.jsx)(Yu,{}),(0,q.jsx)(Xu,{}),(0,q.jsx)(nd,{}),(0,q.jsx)(sd,{}),(0,q.jsx)(dd,{}),(0,q.jsx)(pd,{}),(0,q.jsx)(ud,{}),(0,q.jsx)(Rn,{position:`bottom-left`,closeButton:!0,toastOptions:{className:`bg-surface border-border text-foreground`}})]})})}if(typeof Node<`u`){let e=Node.prototype.removeChild;Node.prototype.removeChild=function(t){try{return e.call(this,t)}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`)return t;throw e}};let t=Node.prototype.insertBefore;Node.prototype.insertBefore=function(e,n){try{return t.call(this,e,n)}catch(t){if(t instanceof DOMException&&t.name===`NotFoundError`)return e;throw t}}}(0,Ln.createRoot)(document.getElementById(`root`)).render((0,q.jsx)(K.StrictMode,{children:(0,q.jsx)(yd,{})}));export{vt as $,Ba as A,Sn as B,Ha as C,Fa as D,La as E,Mn as F,G,_n as H,An as I,At as J,Bt as K,On as L,Gi as M,Pi as N,Ia as O,Ni as P,bt as Q,Dn as R,Ya as S,Ma as T,un as U,xn as V,tn as W,Ot as X,kt as Y,xt as Z,Qa as _,Lc as a,Za as b,hs as c,ys as d,mt as et,xs as f,oo as g,jo as h,Jl as i,Ji as j,Pa as k,_s as l,gs as m,rd as n,ut as nt,jc as o,bs as p,Lt as q,td as r,st as rt,_c as s,_d as t,dt as tt,vs as u,Ka as v,Va as w,Xa as x,Ja as y,Tn as z};
|
|
27
|
+
</svg>`}var Su=e=>`data:image/svg+xml,${encodeURIComponent(e)}`,Cu=[Su(bu(!1)),Su(bu(!0))],wu=[0,1,2,-1].map(e=>[Su(xu(e,!1)),Su(xu(e,!0))]),Tu=wu.length;function Eu(e,t=null){let n=document.getElementById(`ppm-favicon`);if(!n)return;let r=e?1:0;t===null?n.href=Cu[r]:n.href=wu[(t%Tu+Tu)%Tu][r]}function Du(e,t,n){let r=[t,n||null,`PPM`].filter(Boolean).join(` - `);return e>0?`(${e}) ${r}`:r}function Ou(){let e=Ue(e=>e.activeProject),t=Pe(e=>e.deviceName),n=Qa($a),r=(0,K.useRef)(null);(0,K.useEffect)(()=>{let i=()=>Xa(Ya.getState())>0,a=()=>{let n=Xa(Ya.getState());document.title=Du(n,e?.name,t??void 0)};if(a(),n){let e=0;Eu(i(),e),r.current=setInterval(()=>{e=(e+1)%Tu,Eu(i(),e)},300)}else Eu(i());let o=Ya.subscribe(()=>{a(),n||Eu(i())});return()=>{o(),r.current&&=(clearInterval(r.current),null)}},[e?.name,t,n])}var ku=15e3,Au=je((e,t)=>({isDown:!1,downSince:null,showOverlay:!1,markDown:()=>{let{downSince:n}=t(),r=Date.now(),i=n??r;e({isDown:!0,downSince:i,showOverlay:r-i>=ku})},markUp:()=>{e({isDown:!1,downSince:null,showOverlay:!1})}})),ju=1e4,Mu=2e3;function Nu(){(0,K.useEffect)(()=>{let e=!1,t,{markDown:n,markUp:r}=Au.getState();async function i(){try{let t=await fetch(`/api/health`,{cache:`no-store`});if(t.ok&&e){if(r(),`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload();return}t.ok&&r(),e=!1}catch{e=!0,n()}t=setTimeout(i,e?Mu:ju)}return t=setTimeout(i,ju),()=>clearTimeout(t)},[])}function Pu(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t>=0?e.slice(t+1):e}function Fu(e,t){let n=0,r=0,i=-1;for(let a=0;a<e.length;a++){if(n=t.indexOf(e[a],n),n===-1)return-1;i>=0&&(r+=n-i-1),i=n,n++}return r}function Iu(e,t,n,r,i){if(t===e)return{tier:0,offset:0,nameLen:r,depth:i};if(t.startsWith(e))return{tier:1,offset:0,nameLen:r,depth:i};let a=t.indexOf(e);if(a>=0)return{tier:2,offset:a,nameLen:r,depth:i};let o=n.indexOf(e);if(o>=0)return{tier:3,offset:o,nameLen:r,depth:i};let s=Fu(e,t);if(s>=0)return{tier:4,offset:s,nameLen:r,depth:i};let c=Fu(e,n);return c>=0?{tier:5,offset:c,nameLen:r,depth:i}:null}function Lu(e,t,n){let r=n.toLowerCase();return Iu(e.toLowerCase(),Pu(r),r,t.length,n.split(`/`).length)}function Ru(e,t){return e.tier-t.tier||e.offset-t.offset||e.nameLen-t.nameLen||e.depth-t.depth}var zu=100,Bu=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent),Vu={"git-branch":Rt,database:ue,refresh:Ae,plus:Oe,terminal:On,settings:Sn,search:we,"file-code":xt,globe:se};function Hu(e){return e?e.replace(/Mod\+/g,Bu?`⌘`:`Ctrl+`).replace(/Alt\+/g,Bu?`⌥`:`Alt+`).replace(/Shift\+/g,Bu?`⇧`:`Shift+`).replace(/Meta\+/g,`⌘`).replace(/Ctrl\+/g,Bu?`⌃`:`Ctrl+`):``}function Uu(e){let t=[];for(let n of e)n.type===`file`&&t.push({name:n.name,path:n.path}),n.children&&t.push(...Uu(n.children));return t}function Wu(e){return e?e.startsWith(`/`)||e.startsWith(`~/`)||e.startsWith(`~\\`)||/^[A-Za-z]:[/\\]/.test(e):!1}function Gu(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 Ku=new Map;function qu({open:e,onClose:t,initialQuery:n=``}){let[r,i]=(0,K.useState)(``),a=(0,K.useDeferredValue)(r),[o,s]=(0,K.useState)(0),[c,l]=(0,K.useState)([]),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)([]),m=(0,K.useRef)(null),h=(0,K.useRef)(null),g=W(e=>e.openTab),_=Ue(e=>e.activeProject),v=We(e=>e.fileIndex),y=We(e=>e.indexStatus),b=We(e=>e.loadIndex),x=We(e=>e.tree),S=Pe(e=>e.setSidebarActiveTab),C=Pe(e=>e.sidebarCollapsed),w=Pe(e=>e.toggleSidebar),T=Ba(e=>e.getBinding),E=Va(e=>e.contributions),D=(0,K.useCallback)(async e=>{if(Ku.has(e)){l(Ku.get(e));return}d(!0);try{let t=await V.get(`/api/fs/list?dir=${encodeURIComponent(e)}`);Ku.set(e,t),l(t)}catch{l([])}finally{d(!1)}},[]);(0,K.useEffect)(()=>{if(!Wu(r)){l([]);return}D(Gu(r))},[r,D]),(0,K.useEffect)(()=>{if(Wu(r)||r.trim().length<2){p([]);return}let e=setTimeout(async()=>{try{p(await V.get(`/api/db/search?q=${encodeURIComponent(r.trim())}`)??[])}catch{p([])}},300);return()=>clearTimeout(e)},[r]);let O=(0,K.useMemo)(()=>{let e=_?.name??null,n=_?{projectName:_.name}:void 0,r=(r,i)=>()=>{g({type:r,title:i,projectId:e,metadata:n,closable:!0}),t()},i=[{id:`chat`,label:`New AI Chat`,icon:en,action:r(`chat`,`AI Chat`),keywords:`ai assistant claude`,group:`action`,shortcut:Hu(T(`open-chat`))},{id:`new-file`,label:`New File`,icon:Et,action:()=>{W.getState().openNewFile(),t()},keywords:`create untitled blank empty`,group:`action`,shortcut:Hu(T(`new-file`))},{id:`terminal`,label:`New Terminal`,icon:On,action:r(`terminal`,`Terminal`),keywords:`bash shell console`,group:`action`,shortcut:Hu(T(`open-terminal`))},{id:`ports`,label:`Port Forwarding`,icon:se,action:r(`ports`,`Ports`),keywords:`web preview localhost port forward tunnel url`,group:`action`},{id:`postgres`,label:`PostgreSQL`,icon:ue,action:r(`postgres`,`PostgreSQL`),keywords:`database pg sql query`,group:`action`},{id:`voice-input`,label:`Voice Input`,icon:tn,action:()=>{window.dispatchEvent(new CustomEvent(`toggle-voice-input`)),t()},keywords:`speech microphone dictate voice`,group:`action`,shortcut:Hu(T(`voice-input`))},{id:`git-status`,label:`Git Status`,icon:zt,action:()=>{S(`git`),t()},keywords:`changes diff staged`,group:`action`,shortcut:Hu(T(`open-git-status`))},{id:`compare-files`,label:`Compare Files...`,icon:xe,group:`action`,keywords:`diff compare two files select`,shortcut:Hu(T(`compare-files`)),action:()=>{let{activeTabId:e,tabs:n}=W.getState(),r=n.find(t=>t.id===e),i=r?.metadata;r?.type===`editor`&&i?.filePath&&i?.projectName&&ea.getState().setSelection({filePath:i.filePath,projectName:i.projectName,dirtyContent:i.unsavedContent,label:Le(i.filePath)}),window.dispatchEvent(new CustomEvent(`open-compare-picker`)),t()}},{id:`settings`,label:`Settings`,icon:Sn,action:()=>{C&&w(),S(`settings`),t()},keywords:`config preferences theme`,group:`action`,shortcut:Hu(T(`open-settings`))}],a=E?.keybindings??[],o=(E?.commands??[]).map(e=>{let n=a.find(t=>t.command===e.command),r=(n?T(`ext:${n.command}`):``)||(n?Bu&&n.mac?n.mac:n.key:``);return{id:`ext:${e.command}`,label:e.title,hint:e.category,icon:e.icon&&Vu[e.icon]||mn,group:`action`,keywords:`extension ${e.command} ${e.category??``}`,shortcut:r?Hu(r):void 0,action:()=>{let n=[];_?.path&&n.push(_.path),window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e.command,args:n}})),t()}}});return[...i,...o]},[_,g,t,S,C,w,T,E]),k=(0,K.useMemo)(()=>{let e=_?.name??null,n=_?{projectName:_.name}:void 0;return(y===`ready`?v.filter(e=>e.type===`file`):Uu(x)).map(r=>({id:`file:${r.path}`,label:r.name,hint:r.path,icon:xt,group:`file`,keywords:r.path,isIgnored:`isIgnored`in r?r.isIgnored:void 0,action:()=>{g({type:`editor`,title:r.name,projectId:e,metadata:{...n,filePath:r.path},closable:!0}),t()}}))},[y,v,x,_,g,t]),ee=(0,K.useMemo)(()=>{let e=_?.name??null,n=_?{projectName:_.name}:void 0;return c.map(r=>{let i=Le(r);return{id:`fs:${r}`,label:i,hint:r,icon:Mt,group:`fs`,keywords:r,action:()=>{g({type:`editor`,title:i,projectId:e,metadata:{...n,filePath:r},closable:!0}),t()}}})},[c,_,g,t]),A=(0,K.useMemo)(()=>f.map(e=>({id:`db:${e.connectionId}:${e.schemaName}.${e.tableName}`,label:e.tableName,hint:`${e.connectionName} (${e.connectionType===`postgres`?`PG`:`SQLite`})`,icon:ue,group:`db`,connectionColor:e.connectionColor,action:()=>{g({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()}})),[f,g,t]),te=(0,K.useMemo)(()=>[...O,...k],[O,k]),ne=(0,K.useMemo)(()=>te.map(e=>{let t=e.keywords??e.label,n=t.toLowerCase();return{cmd:e,filenameLower:Pu(n),pathLower:n,labelLen:e.label.length,depth:t.split(`/`).length}}),[te]),re=(0,K.useMemo)(()=>{if(Wu(a)){let e=a.lastIndexOf(`/`),t=e>=0?a.slice(e+1).toLowerCase():``;return t?ee.filter(e=>{let n=e.label.toLowerCase(),r=(e.keywords??``).toLowerCase();return n.includes(t)||r.includes(t)}).slice(0,50):ee.slice(0,50)}if(!a.trim())return O;let e=a.toLowerCase().replace(/^\.\.?\//,``),t=[];for(let n of ne){let r=Iu(e,n.filenameLower,n.pathLower,n.labelLen,n.depth);r&&t.push({cmd:n.cmd,score:r})}t.sort((e,t)=>Ru(e.score,t.score));let n=t.slice(0,zu).map(e=>e.cmd);return a.trim().length>=2?[...A,...n]:n},[ne,O,ee,A,a]);(0,K.useEffect)(()=>{e&&y===`idle`&&_&&b(_.name)},[e,y,_,b]),(0,K.useEffect)(()=>{e&&(i(n||``),s(0),l([]),p([]),requestAnimationFrame(()=>m.current?.focus()))},[e]),(0,K.useEffect)(()=>{s(e=>Math.min(e,Math.max(re.length-1,0)))},[re.length]),(0,K.useEffect)(()=>{let e=h.current;e&&e.children[o]?.scrollIntoView({block:`nearest`})},[o]);let j=(0,K.useCallback)(()=>{r.trim()&&(g({type:`chat`,title:`AI Chat`,projectId:_?.name??null,metadata:{projectName:_?.name,pendingMessage:r.trim()},closable:!0}),t())},[r,_,g,t]);function M(e){let n=re.length;switch(e.key){case`ArrowDown`:e.preventDefault(),n>0&&s(e=>(e+1)%n);break;case`ArrowUp`:e.preventDefault(),n>0&&s(e=>(e-1+n)%n);break;case`Enter`:e.preventDefault(),n>0?re[o]?.action():r.trim()&&j();break;case`Escape`:e.preventDefault(),t();break}}if(!e)return null;let N=Wu(r);return(0,q.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:t,children:[(0,q.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,q.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:M,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,q.jsx)(we,{className:`size-4 text-text-subtle shrink-0`}),(0,q.jsx)(`input`,{ref:m,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`}),u&&(0,q.jsx)(G,{className:`size-3.5 animate-spin text-text-subtle shrink-0`}),(0,q.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`})]}),N&&!u&&c.length===0&&r.length<4&&(0,q.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/)`}),!N&&(y===`loading`||y===`idle`)&&(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5 px-3 py-1.5 border-b border-border/50`,children:[(0,q.jsx)(G,{className:`size-3 animate-spin text-text-subtle shrink-0`}),(0,q.jsx)(`span`,{className:`text-[11px] text-text-subtle italic`,children:`Indexing project…`})]}),!N&&y===`error`&&(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border/50`,children:[(0,q.jsx)(`span`,{className:`text-[11px] text-text-subtle`,children:`Failed to build file index —`}),(0,q.jsx)(`button`,{onClick:()=>_&&b(_.name),className:`text-[11px] text-accent hover:underline`,children:`retry`})]}),(0,q.jsx)(`div`,{ref:h,className:`max-h-72 overflow-y-auto py-1`,children:re.length===0?u?(0,q.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`Searching...`}):r.trim()?(0,q.jsxs)(`button`,{onClick:j,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,q.jsx)(en,{className:`size-4 shrink-0 text-accent`}),(0,q.jsxs)(`span`,{children:[`Ask AI: `,(0,q.jsx)(`span`,{className:`text-text-primary font-medium`,children:r.trim().slice(0,60)})]})]}):(0,q.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No results`}):re.map((e,t)=>{let n=e.icon;return(0,q.jsxs)(`button`,{onClick:e.action,className:`flex items-center gap-3 w-full px-3 py-2 text-sm text-left transition-colors ${t===o?`bg-accent/15 text-text-primary`:`text-text-secondary hover:bg-surface-elevated`} ${e.isIgnored?`opacity-60`:``}`,title:e.isIgnored?`Gitignored file`:void 0,children:[(0,q.jsx)(n,{className:`size-4 shrink-0`}),(0,q.jsx)(`span`,{className:`truncate`,children:e.label}),e.hint&&(0,q.jsxs)(`span`,{className:`ml-auto flex items-center gap-1.5 text-xs text-text-subtle truncate max-w-[200px]`,children:[e.connectionColor&&(0,q.jsx)(`span`,{className:`shrink-0 size-2 rounded-full`,style:{backgroundColor:e.connectionColor}}),e.hint]}),e.shortcut&&(0,q.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,q.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 border-t border-border px-3 py-1.5`,children:[(0,q.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`Press`}),(0,q.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,q.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,q.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:`to open this palette`})]})]})]})}var Ju=50;function Yu({open:e,onOpenChange:t,initialA:n}={}){let r=e!==void 0,[i,a]=(0,K.useState)(!1),o=r?e:i,s=e=>{r?t?.(e):a(e)},[c,l]=(0,K.useState)(n??null);(0,K.useEffect)(()=>{if(r)return;function e(){l(ea.getState().selection),a(!0)}return window.addEventListener(`open-compare-picker`,e),()=>window.removeEventListener(`open-compare-picker`,e)},[r]);let[u,d]=(0,K.useState)(``),[f,p]=(0,K.useState)(0),[m,h]=(0,K.useState)(null),g=(0,K.useRef)(null),_=W(e=>e.tabs),v=We(e=>e.fileIndex),y=Ue(e=>e.activeProject);(0,K.useEffect)(()=>{o&&(r&&l(n??null),d(``),p(0),h(null),setTimeout(()=>g.current?.focus(),50))},[o,n,r]);let b=(0,K.useMemo)(()=>{let e=_.filter(e=>e.type===`editor`&&e.metadata?.filePath).map(e=>({id:`tab:${e.id}`,path:e.metadata.filePath,label:Le(e.metadata.filePath),source:`tab`,dirtyContent:e.metadata.unsavedContent})),t=new Set(e.map(e=>e.path)),n=v.filter(e=>e.type===`file`&&!t.has(e.path)).map(e=>({id:`file:${e.path}`,path:e.path,label:e.name,source:`file`}));return[...e,...n]},[_,v]),x=(0,K.useMemo)(()=>u.trim()?b.map(e=>{let t=Lu(u,e.label,e.path);return t?{c:e,score:t}:null}).filter(e=>e!==null).sort((e,t)=>Ru(e.score,t.score)).slice(0,Ju).map(e=>e.c):b.slice(0,Ju),[b,u]);(0,K.useEffect)(()=>{f>=x.length&&p(Math.max(0,x.length-1))},[x,f]);let S=(0,K.useRef)(!1);async function C(e){if(y){if(!c){l({filePath:e.path,projectName:y.name,dirtyContent:e.dirtyContent,label:e.label}),d(``),p(0),g.current?.focus();return}if(!S.current){S.current=!0;try{await na({path:c.filePath,dirtyContent:c.dirtyContent},{path:e.path,dirtyContent:e.dirtyContent},y.name),ea.getState().clearSelection(),s(!1)}catch(e){h(e instanceof Error?e.message:`Compare failed`)}finally{S.current=!1}}}}function w(e){if(e.key===`ArrowDown`)e.preventDefault(),p(e=>Math.min(x.length-1,e+1));else if(e.key===`ArrowUp`)e.preventDefault(),p(e=>Math.max(0,e-1));else if(e.key===`Enter`){e.preventDefault();let t=x[f];t&&C(t)}}return(0,q.jsx)(he,{open:o,onOpenChange:s,children:(0,q.jsxs)(_e,{className:`max-w-lg p-0 gap-0 overflow-hidden`,children:[(0,q.jsx)(ge,{className:`px-4 pt-4 pb-2`,children:(0,q.jsxs)(ve,{className:`flex items-center gap-2 text-sm`,children:[(0,q.jsx)(xe,{className:`size-4`}),`Compare Files`]})}),(0,q.jsx)(`div`,{className:`px-4 pb-2`,children:c?(0,q.jsxs)(`div`,{className:`flex items-center gap-2 text-xs bg-muted rounded px-2 py-1 w-fit max-w-full`,children:[(0,q.jsx)(xt,{className:`size-3.5 shrink-0`}),(0,q.jsx)(`span`,{className:`truncate`,title:c.filePath,children:c.label}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>l(null),className:`hover:bg-surface-elevated rounded p-0.5`,"aria-label":`Clear first file`,children:(0,q.jsx)(ke,{className:`size-3`})})]}):(0,q.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Pick first file, then second.`})}),(0,q.jsx)(`input`,{ref:g,type:`text`,value:u,onChange:e=>{d(e.target.value),p(0)},onKeyDown:w,placeholder:c?`Search for file B...`:`Search for file A...`,className:`w-full px-4 py-2 bg-transparent border-y border-border text-sm outline-none`}),m&&(0,q.jsx)(`div`,{className:`px-4 py-2 text-xs text-destructive border-b border-border`,children:m}),(0,q.jsx)(`div`,{className:`max-h-[50vh] md:max-h-80 overflow-y-auto`,children:x.length===0?(0,q.jsx)(`div`,{className:`px-4 py-6 text-center text-xs text-muted-foreground`,children:b.length===0?`No files available`:`No matches`}):x.map((e,t)=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>C(e),onMouseEnter:()=>p(t),className:H(`w-full flex items-center gap-2 px-4 py-1.5 text-left text-sm`,`hover:bg-surface-elevated transition-colors`,t===f&&`bg-surface-elevated`),children:[(0,q.jsx)(xt,{className:`size-3.5 shrink-0 text-text-secondary`}),(0,q.jsx)(`span`,{className:`truncate`,children:e.label}),(0,q.jsx)(`span`,{className:`text-xs text-muted-foreground truncate ml-auto`,title:e.path,children:e.source===`tab`?`open`:e.path})]},e.id))})]})})}function Xu(){let[e,t]=(0,K.useState)(null),[n,r]=(0,K.useState)(!1);(0,K.useEffect)(()=>{function e(e){let n=e.detail;n&&(t(n),r(!1))}return window.addEventListener(`open-bug-report`,e),()=>window.removeEventListener(`open-bug-report`,e)},[]);let i=(0,K.useCallback)(()=>t(null),[]);return e?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`fixed inset-0 z-50 bg-black/50`,onClick:i}),(0,q.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,q.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 border-b border-border`,children:[(0,q.jsx)(`span`,{className:`text-sm font-medium`,children:`Bug Report`}),(0,q.jsx)(`button`,{onClick:i,className:`p-1 rounded hover:bg-surface-elevated`,children:(0,q.jsx)(ke,{className:`size-4`})})]}),(0,q.jsx)(`pre`,{className:`flex-1 overflow-auto px-4 py-2 text-xs font-mono whitespace-pre-wrap break-all`,children:e}),(0,q.jsxs)(`div`,{className:`flex gap-2 p-3 border-t border-border`,children:[(0,q.jsxs)(`button`,{onClick:async()=>{await ql(e)&&r(!0)},className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-surface-elevated text-xs text-foreground hover:bg-surface transition-colors`,children:[n?(0,q.jsx)(oe,{className:`size-3`}):(0,q.jsx)(mt,{className:`size-3`}),n?`Copied`:`Copy`]}),(0,q.jsxs)(`button`,{onClick:()=>{Kl(e),i()},className:`flex items-center gap-1.5 px-3 py-1.5 rounded-md bg-primary text-primary-foreground text-xs hover:bg-primary/90 transition-colors`,children:[(0,q.jsx)(vt,{className:`size-3`}),`Open GitHub Issue`]})]})]})]}):null}var Zu=6e4,Qu=`ppm-upgrade-dismissed-`;async function $u(){if(`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload()}function ed({onVisibilityChange:e}){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(!1),[a,o]=(0,K.useState)(!1),[s,c]=(0,K.useState)(!1);(0,K.useEffect)(()=>{let e;async function t(){try{let e=await V.get(`/api/upgrade`);if(e.availableVersion){n(e.availableVersion);let t=Qu+e.availableVersion;sessionStorage.getItem(t)?c(!0):c(!1)}else n(null)}catch{}}return t(),e=setInterval(t,Zu),()=>clearInterval(e)},[]);let l=(0,K.useCallback)(async()=>{i(!0);try{let e=await V.post(`/api/upgrade/apply`);e.restart?(i(!1),o(!0)):(R.info(e.message||`Upgrade installed. Restart PPM manually.`),i(!1),t&&sessionStorage.setItem(Qu+t,`1`),c(!0))}catch(e){e instanceof TypeError||e.message?.includes(`fetch`)||e.message?.includes(`network`)?(i(!1),o(!0)):(R.error(`Upgrade failed: ${e.message}`),i(!1))}},[t]),u=(0,K.useCallback)(()=>{t&&sessionStorage.setItem(Qu+t,`1`),c(!0)},[t]),d=!!t&&!s||a;return(0,K.useEffect)(()=>{e?.(d)},[d,e]),d?(0,q.jsx)(`div`,{className:`w-full text-white px-3 py-1 flex items-center justify-between gap-2 z-50 text-sm shrink-0 ${a?`bg-green-600 dark:bg-green-700`:`bg-blue-600 dark:bg-blue-700`}`,children:a?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,q.jsx)(ut,{className:`size-4 shrink-0`}),(0,q.jsxs)(`span`,{className:`truncate`,children:[`Upgrade to v`,t,` installed! Reload to apply.`]})]}),(0,q.jsxs)(`button`,{onClick:$u,className:`bg-white text-green-600 font-medium rounded-full px-3 py-0.5 text-xs min-h-[28px] min-w-[28px] flex items-center gap-1.5 justify-center hover:bg-green-50 active:bg-green-100 transition-colors shrink-0`,children:[(0,q.jsx)(Ae,{className:`size-3`}),`Reload`]})]}):r?(0,q.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,q.jsx)(G,{className:`size-4 animate-spin shrink-0`}),(0,q.jsxs)(`span`,{className:`truncate`,children:[`Upgrading to v`,t,`...`]})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0`,children:[(0,q.jsx)(lt,{className:`size-4 shrink-0`}),(0,q.jsxs)(`span`,{className:`truncate`,children:[`PPM v`,t,` available`]})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,q.jsx)(`button`,{onClick:l,className:`bg-white text-blue-600 font-medium rounded-full px-3 py-0.5 text-xs min-h-[28px] min-w-[28px] flex items-center justify-center hover:bg-blue-50 active:bg-blue-100 transition-colors`,children:`Upgrade`}),(0,q.jsx)(`button`,{onClick:u,className:`min-h-[28px] min-w-[28px] flex items-center justify-center rounded-full hover:bg-blue-500 active:bg-blue-800 transition-colors`,"aria-label":`Dismiss upgrade notification`,children:(0,q.jsx)(ke,{className:`size-4`})})]})]})}):null}var td=je(e=>({src:null,alt:``,open:(t,n=``)=>e({src:t,alt:n}),close:()=>e({src:null,alt:``})}));function nd(){let{src:e,alt:t,close:n}=td(),r=(0,K.useCallback)(e=>{e.key===`Escape`&&n()},[n]);return(0,K.useEffect)(()=>{if(e)return document.addEventListener(`keydown`,r),()=>document.removeEventListener(`keydown`,r)},[e,r]),e?(0,q.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex items-center justify-center bg-black/80 backdrop-blur-sm animate-in fade-in duration-150`,onClick:n,children:[(0,q.jsx)(`button`,{onClick:n,className:`absolute top-4 right-4 z-10 flex items-center justify-center size-8 rounded-full bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Close`,children:(0,q.jsx)(ke,{className:`size-5`})}),(0,q.jsx)(`img`,{src:e,alt:t,className:`max-w-[90vw] max-h-[90vh] object-contain rounded-lg shadow-2xl`,onClick:e=>e.stopPropagation()})]}):null}var rd=je(e=>({svg:null,open:t=>e({svg:t}),close:()=>e({svg:null})})),id=.25,ad=4,od=.25;function sd(){let{svg:e,close:t}=rd(),n=(0,K.useRef)(null),[r,i]=(0,K.useState)(1),[a,o]=(0,K.useState)({x:0,y:0}),s=(0,K.useRef)(!1),c=(0,K.useRef)({x:0,y:0});(0,K.useEffect)(()=>{e&&(i(1),o({x:0,y:0}))},[e]);let l=(0,K.useCallback)(e=>{e.key===`Escape`&&t(),(e.key===`=`||e.key===`+`)&&i(e=>Math.min(ad,e+od)),e.key===`-`&&i(e=>Math.max(id,e-od)),e.key===`0`&&(i(1),o({x:0,y:0}))},[t]);(0,K.useEffect)(()=>{if(e)return document.addEventListener(`keydown`,l),()=>document.removeEventListener(`keydown`,l)},[e,l]);let u=(0,K.useCallback)(e=>{e.preventDefault();let t=e.deltaY>0?-od:od;i(e=>Math.min(ad,Math.max(id,e+t)))},[]),d=(0,K.useCallback)(e=>{e.button===0&&(s.current=!0,c.current={x:e.clientX,y:e.clientY},e.target.setPointerCapture(e.pointerId))},[]),f=(0,K.useCallback)(e=>{if(!s.current)return;let t=e.clientX-c.current.x,n=e.clientY-c.current.y;c.current={x:e.clientX,y:e.clientY},o(e=>({x:e.x+t,y:e.y+n}))},[]),p=(0,K.useCallback)(()=>{s.current=!1},[]);return e?(0,q.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex flex-col bg-black/85 backdrop-blur-sm animate-in fade-in duration-150`,onClick:t,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2 bg-black/40`,onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`span`,{className:`text-sm text-white/70`,children:[Math.round(r*100),`% — Scroll to zoom, drag to pan, 0 to reset`]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(`button`,{onClick:()=>i(e=>Math.max(id,e-od)),className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Zoom out`,children:(0,q.jsx)(In,{className:`size-4`})}),(0,q.jsx)(`button`,{onClick:()=>i(e=>Math.min(ad,e+od)),className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Zoom in`,children:(0,q.jsx)(Fn,{className:`size-4`})}),(0,q.jsx)(`button`,{onClick:()=>{i(1),o({x:0,y:0})},className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors`,"aria-label":`Reset zoom`,children:(0,q.jsx)(_n,{className:`size-4`})}),(0,q.jsx)(`button`,{onClick:t,className:`flex items-center justify-center size-8 rounded bg-white/10 hover:bg-white/20 text-white transition-colors ml-2`,"aria-label":`Close`,children:(0,q.jsx)(ke,{className:`size-5`})})]})]}),(0,q.jsx)(`div`,{ref:n,className:`flex-1 overflow-hidden cursor-grab active:cursor-grabbing`,onClick:e=>e.stopPropagation(),onWheel:u,onPointerDown:d,onPointerMove:f,onPointerUp:p,children:(0,q.jsx)(`div`,{className:`w-full h-full flex items-center justify-center`,style:{transform:`translate(${a.x}px, ${a.y}px) scale(${r})`,transformOrigin:`center center`},children:(0,q.jsx)(`div`,{className:`mermaid-overlay-content bg-white rounded-lg p-6 shadow-2xl [&_svg]:max-w-full [&_svg]:h-auto`,dangerouslySetInnerHTML:{__html:e}})})})]}):null}var cd=`https://ppm.hienle.tech`;function ld(){return window.location.hostname.endsWith(`.trycloudflare.com`)}function ud(){let e=Au(e=>e.showOverlay),[t,n]=(0,K.useState)(!1);if(!e)return null;let r=ld();async function i(){n(!0);try{if((await fetch(`/api/health`,{cache:`no-store`})).ok){if(Au.getState().markUp(),`caches`in window){let e=await caches.keys();await Promise.all(e.map(e=>caches.delete(e)))}window.location.reload();return}}catch{}n(!1)}return(0,q.jsx)(`div`,{className:`fixed inset-0 z-[200] bg-background/95 backdrop-blur-sm flex items-center justify-center p-4`,children:(0,q.jsxs)(`div`,{className:`max-w-sm w-full text-center space-y-6`,children:[(0,q.jsx)(`div`,{className:`flex justify-center`,children:(0,q.jsx)(`div`,{className:`rounded-full bg-destructive/10 p-4`,children:(0,q.jsx)(r?Pn:yn,{className:`h-10 w-10 text-destructive`})})}),(0,q.jsxs)(`div`,{className:`space-y-2`,children:[(0,q.jsx)(`h2`,{className:`text-xl font-semibold text-foreground`,children:r?`Connection Lost`:`Server Unreachable`}),(0,q.jsx)(`p`,{className:`text-sm text-muted-foreground leading-relaxed`,children:r?`The tunnel appears to have closed. The server may have restarted with a new URL.`:`Cannot connect to the PPM server. It may have stopped or is restarting.`})]}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[r&&(0,q.jsx)(`a`,{href:cd,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center justify-center rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors`,children:`Open PPM Cloud`}),(0,q.jsxs)(`button`,{onClick:i,disabled:t,className:`inline-flex items-center justify-center gap-2 rounded-md border border-border px-4 py-2.5 text-sm font-medium text-foreground hover:bg-accent transition-colors disabled:opacity-50`,children:[(0,q.jsx)(Ae,{className:`h-4 w-4 ${t?`animate-spin`:``}`}),t?`Retrying…`:`Retry Connection`]})]}),!r&&(0,q.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`If the server was stopped, run `,(0,q.jsx)(`code`,{className:`bg-muted px-1 py-0.5 rounded text-[11px]`,children:`ppm start`}),` to restart it.`]})]})})}function dd(){let e=Va(e=>e.quickPick),t=Va(e=>e.resolveQuickPick);return e?(0,q.jsx)(fd,{items:e.items,options:e.options,onSelect:e=>t(e),onCancel:()=>t(void 0)}):null}function fd({items:e,options:t,onSelect:n,onCancel:r}){let[i,a]=(0,K.useState)(``),[o,s]=(0,K.useState)(0),[c,l]=(0,K.useState)(()=>{let t=new Set;return e.forEach((e,n)=>{e.picked&&t.add(n)}),t}),u=(0,K.useRef)(null),d=(0,K.useRef)(null),f=t.canPickMany??!1;(0,K.useEffect)(()=>{requestAnimationFrame(()=>u.current?.focus())},[]);let p=(0,K.useMemo)(()=>{if(!i.trim())return e.map((e,t)=>({item:e,originalIdx:t}));let t=i.toLowerCase();return e.map((e,t)=>({item:e,originalIdx:t})).filter(({item:e})=>e.label.toLowerCase().includes(t)||e.description?.toLowerCase().includes(t)||e.detail?.toLowerCase().includes(t))},[e,i]);(0,K.useEffect)(()=>{s(e=>Math.min(e,Math.max(p.length-1,0)))},[p.length]),(0,K.useEffect)(()=>{(d.current?.children[o])?.scrollIntoView({block:`nearest`})},[o]);let m=(0,K.useCallback)(()=>{f?n(e.filter((e,t)=>c.has(t))):p[o]&&n([p[o].item])},[f,c,e,p,o,n]);function h(e){switch(e.key){case`ArrowDown`:e.preventDefault(),p.length>0&&s(e=>(e+1)%p.length);break;case`ArrowUp`:e.preventDefault(),p.length>0&&s(e=>(e-1+p.length)%p.length);break;case` `:if(f&&p[o]){e.preventDefault();let t=p[o].originalIdx;l(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})}break;case`Enter`:e.preventDefault(),m();break;case`Escape`:e.preventDefault(),r();break}}return(0,q.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:r,children:[(0,q.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,q.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden max-h-[80vh] md:max-h-none`,onClick:e=>e.stopPropagation(),onKeyDown:h,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,q.jsx)(we,{className:`size-4 text-text-subtle shrink-0`}),(0,q.jsx)(`input`,{ref:u,type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:t.placeholder??`Select an item...`,className:`flex-1 bg-transparent text-sm text-text-primary outline-none placeholder:text-text-subtle`}),(0,q.jsx)(`kbd`,{className:`hidden sm:inline-flex items-center rounded border border-border bg-surface px-1.5 py-0.5 text-[10px] text-text-subtle font-mono`,children:`ESC`})]}),(0,q.jsx)(`div`,{ref:d,className:`max-h-72 overflow-y-auto py-1`,children:p.length===0?(0,q.jsx)(`p`,{className:`px-3 py-4 text-sm text-text-subtle text-center`,children:`No matching items`}):p.map(({item:e,originalIdx:t},r)=>(0,q.jsxs)(`button`,{onClick:()=>{f?l(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n}):n([e])},className:H(`flex items-center gap-3 w-full px-3 py-2 text-sm text-left transition-colors`,r===o?`bg-accent/15 text-text-primary`:`text-text-secondary hover:bg-surface-elevated`),children:[f&&(0,q.jsx)(`span`,{className:H(`size-4 shrink-0 rounded border flex items-center justify-center`,c.has(t)?`bg-primary border-primary text-primary-foreground`:`border-border`),children:c.has(t)&&(0,q.jsx)(oe,{className:`size-3`})}),(0,q.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,q.jsx)(`div`,{className:`truncate`,children:e.label}),e.description&&(0,q.jsx)(`span`,{className:`text-xs text-text-subtle ml-2`,children:e.description}),e.detail&&(0,q.jsx)(`div`,{className:`text-xs text-text-subtle truncate mt-0.5`,children:e.detail})]})]},t))}),f&&(0,q.jsxs)(`div`,{className:`flex items-center justify-between border-t border-border px-3 py-1.5`,children:[(0,q.jsxs)(`span`,{className:`text-[10px] text-text-subtle`,children:[c.size,` selected`]}),(0,q.jsx)(`button`,{onClick:m,className:`text-xs text-primary hover:text-primary/80 font-medium`,children:`Confirm`})]})]})]})}function pd(){let e=Va(e=>e.inputBox),t=Va(e=>e.resolveInputBox);return e?(0,q.jsx)(md,{options:e.options,onConfirm:e=>t(e),onCancel:()=>t(void 0)}):null}function md({options:e,onConfirm:t,onCancel:n}){let[r,i]=(0,K.useState)(e.value??``),a=(0,K.useRef)(null);(0,K.useEffect)(()=>{requestAnimationFrame(()=>{a.current?.focus(),a.current?.select()})},[]);function o(e){e.key===`Enter`?(e.preventDefault(),t(r)):e.key===`Escape`&&(e.preventDefault(),n())}return(0,q.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-end md:items-start justify-center md:pt-[20vh]`,onClick:n,children:[(0,q.jsx)(`div`,{className:`fixed inset-0 bg-black/50`}),(0,q.jsxs)(`div`,{className:`relative z-10 w-full max-w-md rounded-t-xl md:rounded-xl border border-border bg-background shadow-2xl overflow-hidden`,onClick:e=>e.stopPropagation(),children:[e.prompt&&(0,q.jsx)(`div`,{className:`px-3 pt-3 pb-1 text-sm text-text-primary`,children:e.prompt}),(0,q.jsx)(`div`,{className:`flex items-center gap-2 px-3 py-2.5`,children:(0,q.jsx)(`input`,{ref:a,type:e.password?`password`:`text`,value:r,onChange:e=>i(e.target.value),onKeyDown:o,placeholder:e.placeholder??``,className:`flex-1 bg-surface border border-border rounded px-2 py-1.5 text-sm text-text-primary outline-none focus:border-primary placeholder:text-text-subtle`})}),(0,q.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t border-border px-3 py-2`,children:[(0,q.jsx)(`button`,{onClick:n,className:`px-3 py-1.5 text-xs text-text-secondary hover:text-text-primary transition-colors rounded`,children:`Cancel`}),(0,q.jsx)(`button`,{onClick:()=>t(r),className:`px-3 py-1.5 text-xs bg-primary text-primary-foreground rounded hover:bg-primary/90 transition-colors font-medium`,children:`OK`})]})]})]})}var hd=3e4,gd=1e3,_d=class{ws=null;url;handlers=[];reconnectAttempts=0;reconnectTimer=null;intentionalClose=!1;pendingMessages=[];visibilityHandler=null;constructor(e){this.url=e,this.visibilityHandler=()=>{document.visibilityState===`visible`&&!this.intentionalClose&&this.ws?.readyState!==WebSocket.OPEN&&(this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null,this.reconnectAttempts=0,this.connect())},document.addEventListener(`visibilitychange`,this.visibilityHandler)}connect(){this.intentionalClose=!1,this.cleanup();let e=window.location.protocol===`https:`?`wss:`:`ws:`,t;t=this.url.startsWith(`ws`)?this.url:`${e}//${window.location.host}${this.url}`,this.ws=new WebSocket(t),this.ws.onopen=()=>{this.reconnectAttempts=0;try{this.ws?.send(JSON.stringify({type:`ready`}))}catch{}if(this.pendingMessages.length>0){console.log(`[ws] flushing ${this.pendingMessages.length} queued message(s)`);for(let e of this.pendingMessages)try{this.ws?.send(e)}catch{}this.pendingMessages=[]}},this.ws.onmessage=e=>{for(let t of this.handlers)t(e)},this.ws.onclose=()=>{this.intentionalClose||this.scheduleReconnect()},this.ws.onerror=()=>{this.ws?.close()}}disconnect(){this.intentionalClose=!0,this.pendingMessages=[],this.cleanup(),this.reconnectTimer&&=(clearTimeout(this.reconnectTimer),null),this.visibilityHandler&&=(document.removeEventListener(`visibilitychange`,this.visibilityHandler),null)}send(e){this.ws?.readyState===WebSocket.OPEN?this.ws.send(e):this.intentionalClose?console.warn(`[ws] message dropped — WS intentionally closed`):(console.warn(`[ws] WS not open (readyState=${this.ws?.readyState??`no-ws`}) — queuing message`),this.pendingMessages.push(e))}onMessage(e){return this.handlers.push(e),()=>{this.handlers=this.handlers.filter(t=>t!==e)}}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}cleanup(){this.ws&&=(this.ws.onopen=null,this.ws.onclose=null,this.ws.onmessage=null,this.ws.onerror=null,(this.ws.readyState===WebSocket.OPEN||this.ws.readyState===WebSocket.CONNECTING)&&this.ws.close(),null)}scheduleReconnect(){let e=Math.min(gd*2**this.reconnectAttempts,hd);this.reconnectAttempts++,this.reconnectTimer=setTimeout(()=>this.connect(),e)}},vd=new Set;function $(e=!0){let t=(0,K.useRef)(null),n=(0,K.useCallback)(e=>{t.current?.send(JSON.stringify(e))},[]);return(0,K.useEffect)(()=>{if(!e)return;let r=Ne(),i=new _d(r?`/ws/extensions?token=${encodeURIComponent(r)}`:`/ws/extensions`);t.current=i,i.onMessage(e=>{let t;try{t=JSON.parse(e.data)}catch{return}let r=Va.getState();switch(t.type){case`contributions:update`:if(r.setContributions(t.contributions),t.activationErrors){let e=r.activationErrors;r.setActivationErrors(t.activationErrors);for(let[n,r]of Object.entries(t.activationErrors))e[n]||R.error(`Extension "${n}" failed to activate: ${r}`)}break;case`statusbar:update`:r.addStatusBarItem(t.item);break;case`statusbar:remove`:r.removeStatusBarItem(t.itemId);break;case`tree:update`:t.parentId?r.updateTreeChildren(t.viewId,t.parentId,t.items):r.updateTree(t.viewId,t.items);break;case`tree:refresh`:r.removeTree(t.viewId);break;case`notification`:{let e=t.level===`error`?R.error:t.level===`warn`?R.warning:R.info;if(t.actions&&t.actions.length>0){let r={action:{label:t.actions[0],onClick:()=>n({type:`notification:action`,id:t.id,action:t.actions[0]??null})},onDismiss:()=>n({type:`notification:action`,id:t.id,action:null})};t.actions.length>1&&(r.cancel={label:t.actions[1],onClick:()=>n({type:`notification:action`,id:t.id,action:t.actions[1]??null})}),e(t.message,r)}else e(t.message);break}case`quickpick:show`:r.showQuickPick(t.items,t.options).then(e=>{n({type:`quickpick:resolve`,requestId:t.requestId,selected:e??null})});break;case`inputbox:show`:r.showInputBox(t.options).then(e=>{n({type:`inputbox:resolve`,requestId:t.requestId,value:e??null})});break;case`webview:create`:{let e=t.viewType.replace(/\.view$/,``);r.addWebviewPanel({id:t.panelId,extensionId:t.extensionId,viewType:t.viewType,title:t.title,html:``});let n=`extension:${e}`,i=U.getState(),a=new Set(i.grid.flat()),o=null;for(let e of a){let t=i.panels[e];if(!t)continue;let r=t.tabs.find(e=>e.id===n||e.id.startsWith(`${n}@`));if(r){o=r.id;break}}if(o){let n=i.grid.flat().reduce((e,t)=>e||i.panels[t]?.tabs.find(e=>e.id===o)?.metadata,void 0);W.getState().updateTab(o,{title:t.title,metadata:{...n,viewType:e,panelId:t.panelId,extensionId:t.extensionId}}),W.getState().setActiveTab(o)}else if(!vd.has(e)){let n=W.getState().currentProject;W.getState().openTab({type:`extension`,title:t.title,projectId:null,closable:!0,metadata:{viewType:e,panelId:t.panelId,extensionId:t.extensionId,...n&&{projectName:n}}})}break}case`webview:html`:r.updateWebviewPanel(t.panelId,{html:t.html});break;case`webview:dispose`:r.removeWebviewPanel(t.panelId);break;case`webview:postMessage`:window.dispatchEvent(new CustomEvent(`ext:webview:message`,{detail:{panelId:t.panelId,message:t.message}}));break;case`tab:open`:W.getState().openTab({type:t.tabType,title:t.title,projectId:t.projectId??null,closable:t.closable??!0,metadata:t.metadata});break;case`project:switch`:W.getState().switchProject(t.projectName);break}});let a=e=>{let{panelId:t,message:n}=e.detail;i.send(JSON.stringify({type:`webview:message`,panelId:t,message:n}))};window.addEventListener(`ext:webview:send`,a);let o=e=>{let{viewId:t,itemId:n}=e.detail;i.send(JSON.stringify({type:`tree:expand`,viewId:t,itemId:n}))};window.addEventListener(`ext:tree:expand`,o);let s=e=>{let{command:t,args:n}=e.detail,r=t.replace(/\.view$/,``);vd.delete(r),i.send(JSON.stringify({type:`command:execute`,command:t,args:n}))};window.addEventListener(`ext:command:execute`,s);let c=e=>{let{panelId:t,viewType:n}=e.detail;if(i.send(JSON.stringify({type:`webview:close`,panelId:t})),n){let e=n.replace(/\.view$/,``);vd.add(e),setTimeout(()=>vd.delete(e),5e3)}};return window.addEventListener(`ext:webview:close`,c),i.connect(),()=>{window.removeEventListener(`ext:webview:send`,a),window.removeEventListener(`ext:tree:expand`,o),window.removeEventListener(`ext:command:execute`,s),window.removeEventListener(`ext:webview:close`,c),i.disconnect(),t.current=null}},[n,e]),{send:n}}function yd(){let[e,t]=(0,K.useState)(`checking`),[n,r]=(0,K.useState)(!1),[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(),[c,l]=(0,K.useState)(!1);(0,K.useEffect)(()=>{let e=()=>{s(`settings`),a(!0)};return window.addEventListener(`open-mobile-settings`,e),()=>window.removeEventListener(`open-mobile-settings`,e)},[]);let[u,d]=(0,K.useState)(()=>new Set([`__global__`])),f=Pe(e=>e.theme),p=Pe(e=>e.deviceName),m=Ue(e=>e.fetchProjects),h=Pe(e=>e.fetchServerInfo),g=Ue(e=>e.activeProject),_=(0,K.useRef)(uu());(0,K.useEffect)(()=>{if(Fe(f),f===`system`){let e=window.matchMedia(`(prefers-color-scheme: dark)`),t=()=>Fe(`system`);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)}},[f]),(0,K.useEffect)(()=>{h()},[h]),(0,K.useEffect)(()=>{async function e(){let e=Ne();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()},[]),gu();let{paletteOpen:v,paletteInitialQuery:y,closePalette:b}=Ua();Ou(),Nu(),$(e===`authenticated`),(0,K.useEffect)(()=>{if(e!==`authenticated`)return;let t=e=>{e.preventDefault()};return window.addEventListener(`beforeunload`,t),()=>window.removeEventListener(`beforeunload`,t)},[e]),(0,K.useEffect)(()=>{e===`authenticated`&&Ie(async()=>{let{useKeybindingsStore:e}=await import(`./keybindings-store-DChqpL1V.js`);return{useKeybindingsStore:e}},__vite__mapDeps([49,3,1,9])).then(({useKeybindingsStore:e})=>{e.getState().loadFromServer()})},[e]),(0,K.useEffect)(()=>{e===`authenticated`&&m().then(async()=>{let e=_.current,{projects:t,customOrder:n}=Ue.getState();if(t.length===0)return;let r=e.projectName?t.find(t=>t.name===e.projectName):void 0;if(r||=Ge(t,n)[0],!r)return;let i=await ze(r.name);if(i){let e=localStorage.getItem(`ppm-panels-${r.name}`),t=He(e?JSON.parse(e):null,i);t&&t===i&&localStorage.setItem(`ppm-panels-${r.name}`,JSON.stringify(i))}if(Ue.getState().setActiveProject(r),W.getState().switchProject(r.name),e.tabType&&hu(e.tabType,e.tabIdentifier,r.name),e.openChat){hu(`chat`,e.openChat,r.name);let t=new URL(window.location.href);t.searchParams.delete(`openChat`),window.history.replaceState(null,``,t.pathname)}})},[e,m]),(0,K.useEffect)(()=>{let e=g?.name??`__global__`;W.getState().switchProject(e)},[g?.name]),(0,K.useEffect)(()=>{e!==`authenticated`||!g?.name||Ie(async()=>{let{useNotificationStore:e}=await import(`./notification-store-Dn9zySnl.js`);return{useNotificationStore:e}},__vite__mapDeps([50,3,1,9])).then(({useNotificationStore:e})=>{e.getState().loadFromServer(g.name)})},[e,g?.name]),(0,K.useEffect)(()=>{let e=g?.name??`__global__`;d(t=>t.has(e)?t:new Set([...t,e]))},[g?.name]),(0,K.useEffect)(()=>{e===`authenticated`&&!g&&W.getState().switchProject(`__global__`)},[e,g]);let x=(0,K.useCallback)(()=>{t(`authenticated`)},[]);if(e===`checking`)return(0,q.jsx)(`div`,{className:`min-h-dvh flex items-center justify-center bg-background`,children:(0,q.jsx)(`div`,{className:`animate-pulse text-text-secondary text-sm`,children:`Loading...`})});if(e===`unauthenticated`)return(0,q.jsx)(cu,{onSuccess:x});let S=g?.name??`__global__`;return(0,q.jsx)(zn,{children:(0,q.jsxs)(`div`,{className:`h-dvh flex flex-col bg-background text-foreground overflow-hidden relative`,children:[(0,q.jsx)(ed,{onVisibilityChange:r}),(0,q.jsx)(`div`,{className:`fixed z-50 overflow-hidden pointer-events-none max-md:right-0 max-md:top-0 md:left-0 md:top-0 w-10 h-10`,children:(0,q.jsx)(`div`,{className:`absolute flex items-center justify-center max-md:rotate-45 max-md:right-[-18px] max-md:top-[4px] md:-rotate-45 md:left-[-18px] md:top-[4px] w-[60px] bg-amber-500 text-white text-[6px] font-bold leading-none py-[2.5px] shadow-sm`,children:`BETA`})}),p&&(0,q.jsx)(`div`,{className:H(`md:hidden fixed left-0 z-50 px-2 py-0.5 bg-primary/80 text-primary-foreground text-[10px] font-medium rounded-br transition-[top]`,n?`top-7`:`top-0`),children:p}),(0,q.jsxs)(`div`,{className:`flex flex-1 overflow-hidden`,children:[(0,q.jsx)($l,{}),(0,q.jsx)(ml,{}),(0,q.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[[...u].map(e=>(0,q.jsx)(`div`,{className:H(`flex-1 overflow-hidden pb-12 md:pb-0`,S!==e&&`hidden`),children:(0,q.jsx)(So,{projectName:e})},e)),(0,q.jsx)(_o,{})]})]}),(0,q.jsx)(ru,{onMenuPress:()=>a(!0),onProjectsPress:()=>l(!0)}),(0,q.jsx)(au,{isOpen:i,onClose:()=>{a(!1),s(void 0)},initialTab:o}),(0,q.jsx)(su,{isOpen:c,onClose:()=>l(!1)}),(0,q.jsx)(qu,{open:v,onClose:b,initialQuery:y}),(0,q.jsx)(Yu,{}),(0,q.jsx)(Xu,{}),(0,q.jsx)(nd,{}),(0,q.jsx)(sd,{}),(0,q.jsx)(dd,{}),(0,q.jsx)(pd,{}),(0,q.jsx)(ud,{}),(0,q.jsx)(Rn,{position:`bottom-left`,closeButton:!0,toastOptions:{className:`bg-surface border-border text-foreground`}})]})})}if(typeof Node<`u`){let e=Node.prototype.removeChild;Node.prototype.removeChild=function(t){try{return e.call(this,t)}catch(e){if(e instanceof DOMException&&e.name===`NotFoundError`)return t;throw e}};let t=Node.prototype.insertBefore;Node.prototype.insertBefore=function(e,n){try{return t.call(this,e,n)}catch(t){if(t instanceof DOMException&&t.name===`NotFoundError`)return e;throw t}}}(0,Ln.createRoot)(document.getElementById(`root`)).render((0,q.jsx)(K.StrictMode,{children:(0,q.jsx)(yd,{})}));export{vt as $,Ba as A,Sn as B,Ha as C,Fa as D,La as E,Mn as F,G,_n as H,An as I,At as J,Bt as K,On as L,Gi as M,Pi as N,Ia as O,Ni as P,bt as Q,Dn as R,Ya as S,Ma as T,un as U,xn as V,tn as W,Ot as X,kt as Y,xt as Z,Qa as _,Lc as a,Za as b,hs as c,ys as d,mt as et,xs as f,oo as g,jo as h,Jl as i,Ji as j,Pa as k,_s as l,gs as m,rd as n,ut as nt,jc as o,bs as p,Lt as q,td as r,st as rt,_c as s,_d as t,dt as tt,vs as u,Ka as v,Va as w,Xa as x,Ja as y,Tn as z};
|
|
28
|
+
//# sourceMappingURL=index-DJtqbPFT.js.map
|