@hienlh/ppm 0.13.8 → 0.13.9
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 +6 -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-CLNBWLS4.js +1 -0
- package/dist/web/assets/{audio-preview-DQbX8gfL.js → audio-preview-C1p-Q5XZ.js} +1 -1
- package/dist/web/assets/{chat-tab-BJQT9kie.js → chat-tab-BSJUkgxB.js} +8 -8
- package/dist/web/assets/code-editor-rNw5_pXh.js +8 -0
- package/dist/web/assets/{conflict-editor-BKwJLX0D.js → conflict-editor-Dcn3HuLD.js} +1 -1
- package/dist/web/assets/data-grid-nZfSIop5.js +5 -0
- package/dist/web/assets/database-DOWH9-Vv.js +1 -0
- package/dist/web/assets/database-viewer-CNoq5Uxp.js +1 -0
- package/dist/web/assets/{diff-viewer-SAtaBwNI.js → diff-viewer-NMLD4V8q.js} +1 -1
- package/dist/web/assets/{extension-webview-PiV4bKJ1.js → extension-webview-DW2dBswj.js} +1 -1
- package/dist/web/assets/{image-preview-CbFFD9BS.js → image-preview-Dqp1KSus.js} +1 -1
- package/dist/web/assets/index-CoMWx5VS.js +27 -0
- package/dist/web/assets/index-Dzb3OtrX.css +2 -0
- package/dist/web/assets/{input-BMvRUOr7.js → input-DYWhyaze.js} +1 -1
- package/dist/web/assets/keybindings-store-B7nlHmDh.js +1 -0
- package/dist/web/assets/{markdown-renderer-CHWA0KAo.js → markdown-renderer-DNIXdY0d.js} +1 -1
- package/dist/web/assets/{pdf-preview-DQMdjqa2.js → pdf-preview-ChC1gaaZ.js} +1 -1
- package/dist/web/assets/{port-forwarding-tab-9BpNC9_7.js → port-forwarding-tab-dLhH_g2l.js} +1 -1
- package/dist/web/assets/{postgres-viewer-Bm5T51n6.js → postgres-viewer-De0pzd1C.js} +2 -2
- package/dist/web/assets/{settings-tab-BUstSDLR.js → settings-tab-Mrs9uzCZ.js} +1 -1
- package/dist/web/assets/sqlite-viewer-BqtIjvil.js +1 -0
- package/dist/web/assets/{terminal-tab-Xtj6RN0d.js → terminal-tab-CeHEtoE2.js} +1 -1
- package/dist/web/assets/{video-preview-BLI_RruT.js → video-preview-CHPVrMtx.js} +1 -1
- package/dist/web/assets/x-OGGXhtlb.js +1 -0
- package/dist/web/index.html +8 -8
- package/dist/web/sw.js +1 -1
- package/package.json +2 -1
- package/src/web/components/database/data-grid.tsx +18 -2
- package/src/web/components/database/glide-grid-theme.ts +82 -0
- package/src/web/components/database/glide-grid-types.ts +79 -0
- package/src/web/components/database/use-glide-cell-content.ts +124 -0
- package/src/web/components/database/use-glide-columns.ts +61 -0
- package/src/web/components/database/use-glide-selection.ts +48 -0
- package/src/web/components/editor/code-editor.tsx +124 -7
- package/src/web/index.html +1 -0
- package/test.sql +1 -0
- package/dist/web/assets/ai-settings-section-CHgpQ_OP.js +0 -1
- package/dist/web/assets/code-editor-CeKTvfyz.js +0 -8
- package/dist/web/assets/database-DCT0OjgQ.js +0 -1
- package/dist/web/assets/database-viewer-DixWWvjx.js +0 -5
- package/dist/web/assets/index-C1RBJe0a.css +0 -2
- package/dist/web/assets/index-ZFyltHwi.js +0 -27
- package/dist/web/assets/keybindings-store-D0C-Pq2o.js +0 -1
- package/dist/web/assets/plus-51UQ45rf.js +0 -1
- package/dist/web/assets/sqlite-viewer-C7rhO4bn.js +0 -1
- package/dist/web/assets/x-BtqbfkR7.js +0 -1
- /package/dist/web/assets/{chevron-right-BzAdxJRG.js → chevron-right-DnHIvvcy.js} +0 -0
- /package/dist/web/assets/{code-CuravVys.js → code-DGBecc50.js} +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-DNIXdY0d.js","assets/rolldown-runtime-FhOqtrmT.js","assets/index-CoMWx5VS.js","assets/vendor-mermaid-CMiurk2b.js","assets/vendor-ui-B-89Uj8i.js","assets/vendor-markdown-0Mxgxy0L.js","assets/input-DYWhyaze.js","assets/utils-CTg5uAYR.js","assets/createLucideIcon-BjHrJDVb.js","assets/x-OGGXhtlb.js","assets/settings-store-BHBb62gq.js","assets/react-GqWghJ-L.js","assets/api-client-Dvzcc_EO.js","assets/scroll-area-BEllam7_.js","assets/ai-settings-section-CLNBWLS4.js","assets/dist-D7KGU7Vl.js","assets/refresh-cw-CSFrDtiu.js","assets/trash-2-CJYoLw7Q.js","assets/api-settings-D0_eiIYv.js","assets/database-DOWH9-Vv.js","assets/chevron-right-DnHIvvcy.js","assets/file-store-BrbCNyLm.js","assets/tab-store-0rGchMXr.js","assets/index-Dzb3OtrX.css","assets/csv-preview-D5lmgVEy.js","assets/lib-D_kRA9p6.js","assets/arrow-up-Dtrfv490.js","assets/csv-parser-DO0dz4x_.js","assets/image-preview-Dqp1KSus.js","assets/file-exclamation-point-Baz81y5z.js","assets/use-blob-url-Hn6n1730.js","assets/pdf-preview-ChC1gaaZ.js","assets/video-preview-CHPVrMtx.js","assets/audio-preview-C1p-Q5XZ.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import"./vendor-ui-B-89Uj8i.js";import{t as r}from"./createLucideIcon-BjHrJDVb.js";import"./scroll-area-BEllam7_.js";import{i,r as a,t as o}from"./x-OGGXhtlb.js";import{t as s}from"./database-DOWH9-Vv.js";import{t as c}from"./chevron-right-DnHIvvcy.js";import{a as l,l as u,n as d,o as f,r as p,s as ee,t as m}from"./input-DYWhyaze.js";import{t as h}from"./code-DGBecc50.js";import{t as g}from"./data-grid-nZfSIop5.js";import{t as te}from"./file-exclamation-point-Baz81y5z.js";import{t as _}from"./table-Dq575bPF.js";import{t as v}from"./text-wrap-Cn6BNQfq.js";import{i as ne,t as y}from"./api-client-Dvzcc_EO.js";import{n as re}from"./settings-store-BHBb62gq.js";import{G as b}from"./vendor-mermaid-CMiurk2b.js";import{t as x}from"./utils-CTg5uAYR.js";import{n as ie,t as S}from"./tab-store-0rGchMXr.js";import{r as C,t as w}from"./file-store-BrbCNyLm.js";import{$ as ae,G as T,J as oe,K as E,Q as D,X as O,Y as k,Z as A,a as se,c as j,d as M,f as N,g as P,h as F,j as I,l as ce,m as le,nt as ue,o as L,p as de,q as fe,u as pe,z as me}from"./index-CoMWx5VS.js";import{n as he,t as ge}from"./use-monaco-theme-CP-vyTF8.js";import{n as _e,t as ve}from"./sql-completion-provider-tCzZfqWs.js";var ye=r(`redo-2`,[[`path`,{d:`m15 14 5-5-5-5`,key:`12vg1m`}],[`path`,{d:`M20 9H9.5A5.5 5.5 0 0 0 4 14.5A5.5 5.5 0 0 0 9.5 20H13`,key:`6uklza`}]]),R=e(n(),1),z=t(),B={ts:A,tsx:A,js:A,jsx:A,py:A,rs:A,go:A,html:A,css:A,scss:A,json:D,md:O,txt:O,yaml:k,yml:k};function be(e,t){return t?fe:B[e.split(`.`).pop()?.toLowerCase()??``]??oe}function xe(e,t){let n=[],r=e;for(let e=0;e<t.length;e++){let i=t[e],a=t.slice(0,e+1).join(`/`),o=r.find(e=>e.name===i);if(n.push({name:i,fullPath:a,node:o??null,siblings:r}),o?.children)r=o.children;else{for(let r=e+1;r<t.length;r++)n.push({name:t[r],fullPath:t.slice(0,r+1).join(`/`),node:null,siblings:[]});break}}return n}function V(e){return[...e].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1)}function Se({filePath:e,projectName:t,tabId:n,className:r}){let i=w(e=>e.tree),{updateTab:a,openTab:o}=S(F(e=>({updateTab:e.updateTab,openTab:e.openTab}))),s=(0,R.useRef)(null),l=(0,R.useMemo)(()=>xe(i,e.split(`/`).filter(Boolean)),[i,e]);(0,R.useEffect)(()=>{s.current&&(s.current.scrollLeft=s.current.scrollWidth)},[l]);function u(e,r){let i=x(e);r.metaKey||r.ctrlKey?o({type:`editor`,title:i,metadata:{filePath:e,projectName:t},projectId:t,closable:!0}):a(n,{title:i,metadata:{filePath:e,projectName:t}})}return(0,z.jsx)(`div`,{ref:s,className:r,children:l.map((e,n)=>(0,z.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[n>0&&(0,z.jsx)(c,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),e.siblings.length>0?(0,z.jsx)(Ce,{segment:e,isLast:n===l.length-1,projectName:t,onFileClick:u}):(0,z.jsx)(`span`,{className:`text-xs text-muted-foreground px-1 py-0.5`,children:e.name})]},e.fullPath))})}function Ce({segment:e,isLast:t,projectName:n,onFileClick:r}){let i=(0,R.useMemo)(()=>V(e.siblings),[e.siblings]);return(0,z.jsxs)(j,{children:[(0,z.jsx)(le,{asChild:!0,children:(0,z.jsx)(`button`,{type:`button`,className:`text-xs px-1 py-0.5 rounded hover:bg-muted transition-colors truncate max-w-[120px] ${t?`text-foreground font-medium`:`text-muted-foreground`}`,children:e.name})}),(0,z.jsx)(ce,{align:`start`,className:`max-h-[300px] p-1`,children:i.map(t=>(0,z.jsx)(H,{node:t,projectName:n,activePath:e.fullPath,onFileClick:r},t.path))})]})}function H({node:e,projectName:t,activePath:n,onFileClick:r}){let i=be(e.name,e.type===`directory`),a=e.path===n;return e.type===`directory`&&e.children&&e.children.length>0?(0,z.jsxs)(M,{children:[(0,z.jsxs)(de,{className:`text-xs gap-1.5 ${a?`bg-muted`:``}`,children:[(0,z.jsx)(i,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,z.jsx)(`span`,{className:`truncate`,children:e.name})]}),(0,z.jsx)(N,{className:`max-h-[300px] overflow-y-auto p-1`,children:V(e.children).map(e=>(0,z.jsx)(H,{node:e,projectName:t,activePath:n,onFileClick:r},e.path))})]}):(0,z.jsxs)(pe,{className:`text-xs gap-1.5 cursor-pointer ${a?`bg-muted`:``}`,onSelect:e=>{},onClick:t=>{e.type!==`directory`&&r(e.path,t)},children:[(0,z.jsx)(i,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,z.jsx)(`span`,{className:`truncate`,children:e.name})]})}function U({active:e,onClick:t,icon:n,label:r}){return(0,z.jsxs)(`button`,{type:`button`,onClick:t,className:`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${e?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`}`,children:[(0,z.jsx)(n,{className:`size-3`}),(0,z.jsx)(`span`,{className:`hidden sm:inline`,children:r})]})}function we({ext:e,mdMode:t,onMdModeChange:n,csvMode:r,onCsvModeChange:o,wordWrap:s,onToggleWordWrap:c,filePath:l,projectName:u,className:d}){return(0,z.jsxs)(`div`,{className:d,children:[(e===`md`||e===`mdx`)&&n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(U,{active:t===`edit`,onClick:()=>n(`edit`),icon:h,label:`Edit`}),(0,z.jsx)(U,{active:t===`preview`,onClick:()=>n(`preview`),icon:a,label:`Preview`})]}),e===`csv`&&o&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(U,{active:r===`table`,onClick:()=>o(`table`),icon:_,label:`Table`}),(0,z.jsx)(U,{active:r===`raw`,onClick:()=>o(`raw`),icon:h,label:`Raw`})]}),(0,z.jsx)(U,{active:s,onClick:c,icon:v,label:`Wrap`}),l&&u&&(0,z.jsx)(U,{active:!1,onClick:()=>P(u,l),icon:i,label:`Download`})]})}function Te({open:e,defaultName:t,content:n,onSave:r,onCancel:i}){let[a,o]=(0,R.useState)(t),[s,c]=(0,R.useState)(!1),[h,g]=(0,R.useState)(``),te=C(e=>e.activeProject),_=(0,R.useCallback)(()=>{let e=a.trim();if(!e){g(`Filename cannot be empty`);return}if(/[/\\]/.test(e)){g(`Filename cannot contain / or \\`);return}g(``),c(!0)},[a]),v=(0,R.useCallback)(e=>{let t=e.includes(`\\`)?`\\`:`/`;r(e.endsWith(t)?`${e}${a.trim()}`:`${e}${t}${a.trim()}`,n)},[a,n,r]);return s?(0,z.jsx)(L,{open:!0,mode:`folder`,root:te?.path,title:`Save "${a.trim()}" to...`,onSelect:v,onCancel:()=>c(!1)}):(0,z.jsx)(d,{open:e,onOpenChange:e=>{e||i()},children:(0,z.jsxs)(p,{className:`sm:max-w-md`,children:[(0,z.jsx)(f,{children:(0,z.jsx)(ee,{children:`Save As`})}),(0,z.jsxs)(`div`,{className:`flex flex-col gap-2 py-2`,children:[(0,z.jsx)(`label`,{className:`text-sm text-muted-foreground`,children:`Filename`}),(0,z.jsx)(m,{value:a,onChange:e=>{o(e.target.value),g(``)},onKeyDown:e=>{e.key===`Enter`&&_()},placeholder:`e.g. my-file.ts`,autoFocus:!0}),h&&(0,z.jsx)(`p`,{className:`text-xs text-destructive`,children:h})]}),(0,z.jsxs)(l,{children:[(0,z.jsx)(u,{variant:`outline`,onClick:i,children:`Cancel`}),(0,z.jsx)(u,{onClick:_,children:`Choose Folder...`})]})]})})}var W=typeof window<`u`&&window.isSecureContext,Ee=[`(`,`)`,`{`,`}`,`[`,`]`,`<`,`>`,`;`,`:`,`=`,`"`,`'`,"`",`/`,`\\`,`_`,`#`],G=`px-2 py-1.5 rounded text-xs min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,K=`px-3 py-1.5 rounded text-xs font-mono min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,De=`w-px h-5 bg-border mx-0.5 shrink-0`;function Oe({editorRef:e,readOnly:t}){let n=(0,R.useCallback)(()=>e.current,[e]),r=(0,R.useCallback)(e=>{let t=n();if(!t)return;t.focus();let r=t.getSelection();r&&t.executeEdits(`mobile-toolbar`,[{range:r,text:e}])},[n]),[i,a]=(0,R.useState)(!1),s=(0,R.useRef)(null),c=(0,R.useCallback)(async()=>{try{let e=await navigator.clipboard.readText();e&&r(e)}catch{}},[r]),l=(0,R.useCallback)(()=>{a(!0),requestAnimationFrame(()=>s.current?.focus())},[]),u=(0,R.useCallback)(e=>{e.preventDefault();let t=e.clipboardData.getData(`text/plain`);t&&(a(!1),r(t))},[r]),d=(0,R.useCallback)(()=>{let e=n();e&&(e.focus(),e.trigger(`mobile-toolbar`,`undo`,null))},[n]),f=(0,R.useCallback)(()=>{let e=n();e&&(e.focus(),e.trigger(`mobile-toolbar`,`redo`,null))},[n]),p=(0,R.useCallback)(()=>{let e=n();e&&(e.focus(),e.trigger(`mobile-toolbar`,`tab`,null))},[n]);return t?null:(0,z.jsxs)(`div`,{className:`shrink-0 border-t border-border bg-surface`,children:[!W&&i&&(0,z.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1.5 border-b border-border bg-muted/50`,children:[(0,z.jsx)(`textarea`,{ref:s,onPaste:u,placeholder:`Long-press here → Paste`,className:`flex-1 h-8 rounded border border-border bg-background text-foreground text-xs px-2 py-1.5 resize-none focus:outline-none focus:ring-1 focus:ring-primary`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>a(!1),className:`p-1.5 rounded text-muted-foreground active:bg-muted transition-colors`,children:(0,z.jsx)(o,{size:14})})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1.5 overflow-x-auto`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:W?c:l,className:G,title:`Paste`,children:(0,z.jsx)(ue,{size:14})}),(0,z.jsx)(`button`,{type:`button`,onClick:d,className:G,title:`Undo`,children:(0,z.jsx)(I,{size:14})}),(0,z.jsx)(`button`,{type:`button`,onClick:f,className:G,title:`Redo`,children:(0,z.jsx)(ye,{size:14})}),(0,z.jsx)(`div`,{className:De}),(0,z.jsx)(`button`,{type:`button`,onClick:p,className:K,children:`Tab`}),(0,z.jsx)(`div`,{className:De}),Ee.map(e=>(0,z.jsx)(`button`,{type:`button`,onClick:()=>r(e),className:K,children:e},e))]})]})}var ke=(0,R.lazy)(()=>b(()=>import(`./markdown-renderer-DNIXdY0d.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]))),Ae=(0,R.lazy)(()=>b(()=>import(`./csv-preview-D5lmgVEy.js`).then(e=>({default:e.CsvPreview})),__vite__mapDeps([24,1,4,5,25,8,26,27]))),je=(0,R.lazy)(()=>b(()=>import(`./image-preview-Dqp1KSus.js`).then(e=>({default:e.ImagePreview})),__vite__mapDeps([28,2,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,29,30]))),Me=(0,R.lazy)(()=>b(()=>import(`./pdf-preview-ChC1gaaZ.js`).then(e=>({default:e.PdfPreview})),__vite__mapDeps([31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,29,30]))),Ne=(0,R.lazy)(()=>b(()=>import(`./video-preview-CHPVrMtx.js`).then(e=>({default:e.VideoPreview})),__vite__mapDeps([32,2,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,29,30]))),Pe=(0,R.lazy)(()=>b(()=>import(`./audio-preview-C1p-Q5XZ.js`).then(e=>({default:e.AudioPreview})),__vite__mapDeps([33,2,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,29,30]))),Fe=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`svg`,`ico`]),Ie=new Set([`mp4`,`webm`,`mov`,`ogg`,`avi`,`mkv`]),Le=new Set([`mp3`,`wav`,`flac`,`aac`,`m4a`,`wma`]),Re=new Set([`db`,`sqlite`,`sqlite3`]);function ze(e){return e.split(`.`).pop()?.toLowerCase()??``}function Be(e){return{js:`javascript`,jsx:`javascript`,ts:`typescript`,tsx:`typescript`,py:`python`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,mdx:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,bash:`shell`,sql:`sql`}[ze(e)]??`plaintext`}var q=(0,R.memo)(function({metadata:e,tabId:t}){let n=e?.filePath,r=e?.projectName,i=e?.inlineContent,a=e?.inlineLanguage,[o,c]=(0,R.useState)(i??null),[l,u]=(0,R.useState)(`utf-8`),[d,f]=(0,R.useState)(!0),[p,ee]=(0,R.useState)(null),[m,h]=(0,R.useState)(!1),g=(0,R.useRef)(null),_=(0,R.useRef)(``),v=(0,R.useRef)(null),{tabs:b,updateTab:C}=S(F(e=>({tabs:e.tabs,updateTab:e.updateTab}))),{wordWrap:w,toggleWordWrap:ae}=re(F(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap}))),oe=ge(),E=e?.isUntitled===!0,D=e?.unsavedContent,[O,k]=(0,R.useState)(!1),A=b.find(e=>e.id===t),j=n?ze(n):``,M=Fe.has(j),N=j===`pdf`,P=Ie.has(j),I=Le.has(j),ce=Re.has(j),le=j===`md`||j===`mdx`,ue=j===`csv`,L=j===`sql`,[de,fe]=(0,R.useState)(`preview`),[pe,ye]=(0,R.useState)(`table`),{connections:B,cachedTables:be,refreshTables:xe}=se(),[V,Ce]=(0,R.useState)(()=>{if(!L||!n)return null;let e=localStorage.getItem(`ppm:sql-conn:${n}`);return e?Number(e):null}),H=(0,R.useRef)(null),U=(0,R.useRef)(null),W=(0,R.useMemo)(()=>B.find(e=>e.id===V)??null,[B,V]),Ee=i!=null&&(a===`json`||a===`xml`),[G,K]=(0,R.useState)(!1),De=(0,R.useCallback)(()=>{if(i)if(G)c(i),K(!1);else{let e=i.trimStart();if(a===`json`)try{c(JSON.stringify(JSON.parse(e),null,2)),K(!0)}catch{}else if(a===`xml`){let t=0;c(e.replace(/(>)(<)(\/*)/g,`$1
|
|
3
|
+
$2$3`).split(`
|
|
4
|
+
`).map(e=>{let n=e.trim();n.startsWith(`</`)&&(t=Math.max(0,t-1));let r=` `.repeat(t)+n;return n.startsWith(`<`)&&!n.startsWith(`</`)&&!n.endsWith(`/>`)&&!n.includes(`</`)&&t++,r}).join(`
|
|
5
|
+
`)),K(!0)}}},[i,a,G]),ke=(0,R.useCallback)(e=>{Ce(e),n&&localStorage.setItem(`ppm:sql-conn:${n}`,String(e)),xe(e).catch(()=>{})},[n,xe]),q=(0,R.useMemo)(()=>{if(!L||!V)return;let e=(be.get(V)??[]).map(e=>({name:e.tableName,schema:e.schemaName}));if(e.length!==0)return{tables:e,getColumns:async(e,t)=>y.get(`/api/db/connections/${V}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[L,V,be]);(0,R.useEffect)(()=>{if(!(!H.current||!q))return U.current?.dispose(),ve(),U.current=H.current.languages.registerCompletionItemProvider(`sql`,_e(H.current,q)),()=>{U.current?.dispose()}},[q]);let J=S(e=>e.openTab),[Ue,We]=(0,R.useState)(null),[Ge,Ke]=(0,R.useState)(null),[qe,Je]=(0,R.useState)(!1),[Ye,Xe]=(0,R.useState)(``),X=(0,R.useCallback)(async e=>{if(W){Je(!0),Ke(null),Xe(e);try{We(await y.post(`/api/db/connections/${W.id}/query`,{sql:e}))}catch(e){Ke(e.message),We(null)}finally{Je(!1)}}},[W]),Ze=(0,R.useCallback)(()=>{!W||!Ye||J({type:`database`,title:`${W.name} · Query`,projectId:null,closable:!0,metadata:{connectionId:W.id,connectionName:W.name,dbType:W.type,initialSql:Ye}})},[W,J,Ye]),Qe=(0,R.useCallback)(()=>{if(!v.current||!W)return;let e=v.current,t=e.getSelection();X(t&&!t.isEmpty()?e.getModel()?.getValueInRange(t)??e.getValue():e.getValue())},[W,X]),$e=typeof window<`u`&&`ontouchstart`in window,et=(0,R.useRef)(null),[tt,nt]=(0,R.useState)(null);(0,R.useEffect)(()=>{if(!$e)return;let e=window.visualViewport;if(!e)return;let t=()=>{let t=et.current;if(!t)return;let n=t.getBoundingClientRect().top;nt(e.height-Math.max(0,n))};return e.addEventListener(`resize`,t),e.addEventListener(`scroll`,t),()=>{e.removeEventListener(`resize`,t),e.removeEventListener(`scroll`,t)}},[$e]);let Z=(0,R.useRef)([]),rt=(0,R.useRef)(X);rt.current=X,(0,R.useEffect)(()=>()=>{Z.current.forEach(e=>e.dispose()),Z.current=[]},[]),(0,R.useEffect)(()=>{ce&&t&&C(t,{type:`sqlite`})},[ce,t,C]);let Q=n?/^(\/|[A-Za-z]:[/\\])/.test(n):!1;(0,R.useEffect)(()=>{if(i!=null){f(!1);return}if(E){c(D??``),_.current=D??``,f(!1),D&&h(!0);return}if(!n||!Q&&!r)return;if(M||N||P||I){f(!1);return}f(!0),ee(null);let e=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${ne(r)}/files/read?path=${encodeURIComponent(n)}`;return y.get(e).then(e=>{c(e.content),e.encoding&&u(e.encoding),_.current=e.content,f(!1)}).catch(e=>{ee(e instanceof Error?e.message:`Failed to load file`),f(!1)}),()=>{g.current&&clearTimeout(g.current)}},[n,r,M,N,Q,E]);let it=(0,R.useRef)(m);it.current=m,(0,R.useEffect)(()=>{if(!n||!r||i!=null||E)return;let e=e=>{let t=e.detail;if(t.projectName!==r||t.path!==n||it.current)return;let i=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${ne(r)}/files/read?path=${encodeURIComponent(n)}`;y.get(i).then(e=>{e.content!==_.current&&(c(e.content),_.current=e.content,e.encoding&&u(e.encoding))}).catch(()=>{})};return window.addEventListener(`file:changed`,e),()=>window.removeEventListener(`file:changed`,e)},[n,r,Q,i,E]),(0,R.useEffect)(()=>{if(!A||i!=null)return;let t=E?`Untitled-${e?.untitledNumber??1}`:n?x(n):`Untitled`,r=m?`${t} \u25CF`:t;A.title!==r&&C(A.id,{title:r})},[m]);let at=(0,R.useCallback)(async e=>{if(n&&!(!Q&&!r))try{Q?await y.put(`/api/fs/write`,{path:n,content:e}):await y.put(`${ne(r)}/files/write`,{path:n,content:e}),h(!1)}catch{}},[n,r,Q]);function ot(n){let r=n??``;c(r),_.current=r,h(!0),g.current&&clearTimeout(g.current),E?g.current=setTimeout(()=>{t&&C(t,{metadata:{...e,unsavedContent:_.current}})},2e3):g.current=setTimeout(()=>at(_.current),1e3)}let st=(0,R.useCallback)(async(e,n)=>{try{if(g.current&&clearTimeout(g.current),await y.put(`/api/fs/write`,{path:e,content:n}),t){let{closeTab:n,openTab:r}=ie.getState();n(t),r({type:`editor`,title:x(e),projectId:null,metadata:{filePath:e},closable:!0})}h(!1),k(!1)}catch{}},[t]),$=e?.lineNumber,ct=(0,R.useCallback)((e,t)=>{if(v.current=e,H.current=t,$&&$>0&&setTimeout(()=>{e.revealLineInCenter($),e.setPosition({lineNumber:$,column:1}),e.focus()},100),E&&e.addCommand(t.KeyMod.CtrlCmd|t.KeyCode.KeyS,()=>k(!0)),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyZ,()=>re.getState().toggleWordWrap()),t.languages.typescript.typescriptDefaults.setDiagnosticsOptions({noSemanticValidation:!0,noSyntaxValidation:!0,noSuggestionDiagnostics:!0}),t.languages.typescript.javascriptDefaults.setDiagnosticsOptions({noSemanticValidation:!0,noSyntaxValidation:!0,noSuggestionDiagnostics:!0}),q&&(U.current?.dispose(),U.current=t.languages.registerCompletionItemProvider(`sql`,_e(t,q))),L){Z.current.forEach(e=>e.dispose()),Z.current=[];let n=e.getModel(),r=e.addCommand(0,(e,t)=>{t&&rt.current(t)});if(r&&n){let e=t.languages.registerCodeLensProvider(`sql`,{provideCodeLenses:e=>{if(e!==n)return{lenses:[],dispose:()=>{}};let t=[],i=e.getValue().split(`
|
|
6
|
+
`),a=-1,o=[],s=!1,c=(e,n)=>{let i=n.trim();!i||i.startsWith(`--`)||t.push({range:{startLineNumber:e,startColumn:1,endLineNumber:e,endColumn:1},command:{id:r,title:`▷ Run`,arguments:[i]}})};for(let e=0;e<i.length;e++){let t=i[e].trim();if(a===-1){if(!t||t.startsWith(`--`))continue;a=e+1,o=[]}o.push(i[e]),(t.match(/\$\$/g)||[]).length%2==1&&(s=!s),!s&&t.endsWith(`;`)&&(c(a,o.join(`
|
|
7
|
+
`)),a=-1,o=[])}return a>0&&o.join(``).trim()&&c(a,o.join(`
|
|
8
|
+
`)),{lenses:t,dispose:()=>{}}}});Z.current.push(e)}}},[q]);if(!i&&!E&&(!n||!Q&&!r))return(0,z.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`No file selected.`});if(d)return(0,z.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-text-secondary`,children:[(0,z.jsx)(T,{className:`size-5 animate-spin`}),(0,z.jsx)(`span`,{className:`text-sm`,children:`Loading file...`})]});if(p)return(0,z.jsx)(`div`,{className:`flex items-center justify-center h-full text-error text-sm`,children:p});if(M)return(0,z.jsx)(R.Suspense,{fallback:(0,z.jsx)(Y,{}),children:(0,z.jsx)(je,{filePath:n,projectName:r})});if(N)return(0,z.jsx)(R.Suspense,{fallback:(0,z.jsx)(Y,{}),children:(0,z.jsx)(Me,{filePath:n,projectName:r})});if(P)return(0,z.jsx)(R.Suspense,{fallback:(0,z.jsx)(Y,{}),children:(0,z.jsx)(Ne,{filePath:n,projectName:r})});if(I)return(0,z.jsx)(R.Suspense,{fallback:(0,z.jsx)(Y,{}),children:(0,z.jsx)(Pe,{filePath:n,projectName:r})});if(l===`base64`)return(0,z.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,z.jsx)(te,{className:`size-10 text-text-subtle`}),(0,z.jsx)(`p`,{className:`text-sm`,children:`This file is a binary format and cannot be displayed.`}),(0,z.jsx)(`p`,{className:`text-xs text-text-subtle`,children:n})]});let lt=L?(0,z.jsxs)(`div`,{className:`shrink-0 flex items-center gap-1 px-2 border-l border-border`,children:[(0,z.jsx)(s,{className:`size-3 text-muted-foreground`}),(0,z.jsxs)(`select`,{value:V??``,onChange:e=>{let t=Number(e.target.value);t&&ke(t)},className:`h-5 text-[10px] bg-transparent border border-border rounded px-1 text-foreground outline-none max-w-[140px]`,title:`Select connection for autocomplete`,children:[(0,z.jsx)(`option`,{value:``,children:`Connection…`}),B.map(e=>(0,z.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,z.jsx)(`button`,{type:`button`,onClick:Qe,disabled:!W,className:`p-0.5 rounded text-muted-foreground hover:text-primary disabled:opacity-30 transition-colors`,title:`Run SQL`,children:(0,z.jsx)(me,{className:`size-3.5`})})]}):null;return(0,z.jsxs)(`div`,{ref:et,className:`flex flex-col h-full w-full overflow-hidden`,style:tt?{height:`${tt}px`,maxHeight:`${tt}px`}:void 0,children:[i!=null&&Ee&&(0,z.jsx)(`div`,{className:`flex items-center h-7 border-b border-border bg-background shrink-0 px-2 gap-2`,children:(0,z.jsx)(`button`,{type:`button`,onClick:De,className:`text-[10px] px-2 py-0.5 rounded border border-border hover:bg-muted transition-colors text-foreground`,children:G?`Raw`:`Beautify`})}),n&&r&&t&&(0,z.jsxs)(`div`,{className:`hidden md:flex items-center h-7 border-b border-border bg-background shrink-0`,children:[(0,z.jsx)(Se,{filePath:n,projectName:r,tabId:t,className:`flex items-center flex-1 min-w-0 overflow-x-auto scrollbar-none px-2 gap-0.5`}),lt,(0,z.jsx)(we,{ext:j,mdMode:de,onMdModeChange:fe,csvMode:pe,onCsvModeChange:ye,wordWrap:w,onToggleWordWrap:ae,filePath:n,projectName:r,className:`shrink-0 flex items-center gap-1 px-2`})]}),L&&(!r||!t)&&(0,z.jsxs)(`div`,{className:`hidden md:flex items-center h-7 border-b border-border bg-background shrink-0 px-2`,children:[(0,z.jsx)(`span`,{className:`text-xs text-muted-foreground truncate flex-1`,children:n?x(n):`SQL`}),lt]}),ue&&pe===`table`?(0,z.jsx)(R.Suspense,{fallback:(0,z.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,z.jsx)(T,{className:`size-5 animate-spin text-text-subtle`})}),children:(0,z.jsx)(Ae,{content:o??``,onContentChange:ot,wordWrap:w})}):le&&de===`preview`?(0,z.jsx)(He,{content:o??``}):(0,z.jsx)(`div`,{className:`flex-1 overflow-hidden min-h-0`,children:(0,z.jsx)(he,{height:`100%`,language:a??Be(n??``),value:o??``,onChange:i==null?ot:void 0,onMount:ct,theme:oe,options:{fontSize:13,fontFamily:`Menlo, Monaco, Consolas, monospace`,wordWrap:w?`on`:`off`,minimap:{enabled:!1},scrollBeyondLastLine:!1,automaticLayout:!0,lineNumbers:`on`,folding:!0,bracketPairColorization:{enabled:!0},readOnly:i!=null},loading:(0,z.jsx)(T,{className:`size-5 animate-spin text-text-subtle`})})}),L&&(Ue||Ge||qe)&&(0,z.jsx)(Ve,{result:Ue,error:Ge,loading:qe,connName:W?.name,onClose:()=>{We(null),Ke(null),Je(!1)},onOpenInTab:Ze}),$e&&(0,z.jsx)(Oe,{editorRef:v,readOnly:i!=null}),O&&(0,z.jsx)(Te,{open:O,defaultName:`Untitled-${e?.untitledNumber??1}`,content:_.current,onSave:st,onCancel:()=>k(!1)})]})}),J=()=>{};function Ve({result:e,error:t,loading:n,connName:r,onClose:i,onOpenInTab:a}){let c=(0,R.useMemo)(()=>e?.changeType===`select`&&e.rows.length>0?{columns:e.columns,rows:e.rows,total:e.rows.length,limit:e.rows.length}:null,[e]),l=(0,R.useMemo)(()=>(e?.columns??[]).map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null})),[e?.columns]),[u,d]=(0,R.useState)(250),f=(0,R.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=u,r=e=>d(Math.max(80,n+(t-e.clientY))),i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[u]);return(0,z.jsxs)(`div`,{className:`shrink-0 border-t border-border flex flex-col`,style:{height:u},children:[(0,z.jsx)(`div`,{onMouseDown:f,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,z.jsx)(E,{className:`size-3 text-muted-foreground/50`})}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1 bg-muted/50 border-b border-border shrink-0`,children:[(0,z.jsx)(s,{className:`size-3 text-muted-foreground`}),(0,z.jsxs)(`span`,{className:`text-xs font-medium text-foreground truncate flex-1`,children:[r?`${r} · Results`:`Query Results`,e?.executionTimeMs!=null&&(0,z.jsxs)(`span`,{className:`text-muted-foreground ml-1.5 font-normal`,children:[e.executionTimeMs,`ms`]})]}),(0,z.jsxs)(`button`,{type:`button`,onClick:a,title:`Open in DB Viewer tab`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,z.jsx)(ae,{className:`size-3`}),(0,z.jsx)(`span`,{className:`hidden sm:inline`,children:`Open in Tab`})]}),(0,z.jsx)(`button`,{type:`button`,onClick:i,title:`Close results`,className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,z.jsx)(o,{className:`size-3`})})]}),(0,z.jsxs)(`div`,{className:`flex-1 overflow-hidden min-h-0`,children:[n&&(0,z.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,z.jsx)(T,{className:`size-4 animate-spin text-muted-foreground`})}),t&&(0,z.jsx)(`div`,{className:`px-3 py-2 text-xs text-destructive bg-destructive/5`,children:t}),e?.changeType===`modify`&&(0,z.jsxs)(`div`,{className:`px-3 py-2 text-xs text-green-500`,children:[e.rowsAffected,` row(s) affected`]}),c&&(0,z.jsx)(g,{tableData:c,schema:l,loading:!1,page:1,onPageChange:J,onCellUpdate:J,orderBy:null,orderDir:`ASC`,onToggleSort:J,connectionName:r}),e?.changeType===`select`&&e.rows.length===0&&(0,z.jsx)(`div`,{className:`px-3 py-2 text-xs text-muted-foreground`,children:`No results`})]})]})}function Y(){return(0,z.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,z.jsx)(T,{className:`size-5 animate-spin text-text-subtle`})})}function He({content:e}){return(0,z.jsx)(R.Suspense,{fallback:(0,z.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded m-4`}),children:(0,z.jsx)(ke,{content:e,className:`flex-1 overflow-auto p-4`})})}export{q as CodeEditor};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{i as r,t as i}from"./api-client-Dvzcc_EO.js";import{n as a}from"./settings-store-BHBb62gq.js";import"./vendor-mermaid-CMiurk2b.js";import{G as o,h as s}from"./index-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{i as r,t as i}from"./api-client-Dvzcc_EO.js";import{n as a}from"./settings-store-BHBb62gq.js";import"./vendor-mermaid-CMiurk2b.js";import{G as o,h as s}from"./index-CoMWx5VS.js";import{n as c,t as l}from"./use-monaco-theme-CP-vyTF8.js";var u=e(n(),1),d=t();function f(e){return{js:`javascript`,jsx:`javascript`,ts:`typescript`,tsx:`typescript`,py:`python`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,mdx:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,bash:`shell`,go:`go`,rs:`rust`,java:`java`,rb:`ruby`,php:`php`,swift:`swift`,sql:`sql`,xml:`xml`,toml:`toml`}[e.split(`.`).pop()?.toLowerCase()??``]??`plaintext`}function p(e){let t=e.split(`
|
|
2
2
|
`),n=[],r=0,i=0;for(;r<t.length;){let e=t[r];if(e.startsWith(`<<<<<<<`)){let a=r,o=e.substring(7).trim(),s=[];for(r++;r<t.length&&!t[r].startsWith(`=======`);)s.push(t[r]),r++;if(r>=t.length)break;let c=r,l=[];for(r++;r<t.length&&!t[r].startsWith(`>>>>>>>`);)l.push(t[r]),r++;if(r>=t.length)break;let u=t[r].substring(7).trim();n.push({id:i++,startLine:a+1,separatorLine:c+1,endLine:r+1,currentContent:s.join(`
|
|
3
3
|
`),incomingContent:l.join(`
|
|
4
4
|
`),currentLabel:o,incomingLabel:u})}r++}return n}function m({metadata:e}){let t=e?.filePath,n=e?.projectName,[m,g]=(0,u.useState)(null),[_,v]=(0,u.useState)(!0),[y,b]=(0,u.useState)(null),[x,S]=(0,u.useState)(0),C=(0,u.useRef)(null),w=(0,u.useRef)(null),T=(0,u.useRef)([]),E=(0,u.useRef)(null),{wordWrap:D}=a(s(e=>({wordWrap:e.wordWrap}))),O=l(),k=(0,u.useRef)(null),[A,j]=(0,u.useState)();(0,u.useEffect)(()=>{let e=k.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&j(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[]),(0,u.useEffect)(()=>{!t||!n||(v(!0),i.get(`${r(n)}/files/read?path=${encodeURIComponent(t)}`).then(e=>{g(e.content),v(!1)}).catch(e=>{b(e.message||`Failed to load file`),v(!1)}))},[t,n]);let M=(0,u.useCallback)(()=>{let e=C.current,t=w.current;if(!e||!t)return;let n=p(e.getModel()?.getValue()||``);S(n.length);for(let t of T.current)e.removeContentWidget(t);if(T.current=[],E.current&&E.current.clear(),n.length===0)return;let r=[];for(let e of n)r.push({range:new t.Range(e.startLine,1,e.startLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`,glyphMarginClassName:`conflict-glyph-current`}}),r.push({range:new t.Range(e.separatorLine,1,e.separatorLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`}}),r.push({range:new t.Range(e.endLine,1,e.endLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`,glyphMarginClassName:`conflict-glyph-incoming`}}),e.separatorLine-e.startLine>1&&r.push({range:new t.Range(e.startLine+1,1,e.separatorLine-1,1),options:{isWholeLine:!0,className:`conflict-current-content`}}),e.endLine-e.separatorLine>1&&r.push({range:new t.Range(e.separatorLine+1,1,e.endLine-1,1),options:{isWholeLine:!0,className:`conflict-incoming-content`}});E.current=e.createDecorationsCollection(r);for(let r of n){let n=`conflict-widget-${r.id}`,i=document.createElement(`div`);i.className=`conflict-actions`,i.innerHTML=`<span class="conflict-label">Current Change (${h(r.currentLabel||`HEAD`)})</span><button class="conflict-btn conflict-btn-current" data-action="current">Accept Current</button><button class="conflict-btn conflict-btn-incoming" data-action="incoming">Accept Incoming</button><button class="conflict-btn conflict-btn-both" data-action="both">Accept Both</button>`,i.addEventListener(`click`,e=>{let t=e.target.closest(`[data-action]`);if(!t)return;let n=t.getAttribute(`data-action`);N(r.id,n)});let a={getId:()=>n,getDomNode:()=>i,getPosition:()=>({position:{lineNumber:r.startLine,column:1},preference:[t.editor.ContentWidgetPositionPreference.ABOVE]})};e.addContentWidget(a),T.current.push(a)}},[]),N=(0,u.useCallback)((e,t)=>{let n=C.current,r=w.current;if(!n||!r)return;let i=n.getModel();if(!i)return;let a=p(i.getValue()).find(t=>t.id===e);if(!a)return;let o;switch(t){case`current`:o=a.currentContent;break;case`incoming`:o=a.incomingContent;break;case`both`:o=a.currentContent+`
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{t as r}from"./createLucideIcon-BjHrJDVb.js";import{a as i,i as a,n as o,o as s,r as c,t as l}from"./x-OGGXhtlb.js";import{n as u}from"./database-DOWH9-Vv.js";import{t as d}from"./chevron-right-DnHIvvcy.js";import{t as f}from"./sparkles-B0mRBy_j.js";import{t as p}from"./text-wrap-Cn6BNQfq.js";import{t as m}from"./trash-2-CJYoLw7Q.js";import{t as h}from"./tab-store-0rGchMXr.js";import{$ as g,B as _,G as v,K as y,L as b,V as ee,h as x}from"./index-CoMWx5VS.js";import{n as S,t as C}from"./use-monaco-theme-CP-vyTF8.js";import{n as w}from"./csv-parser-DO0dz4x_.js";var te=r(`columns-3`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}]]),ne=r(`funnel`,[[`path`,{d:`M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z`,key:`sc7q7i`}]]),T=e(n(),1),E=t();function D(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,a.click(),URL.revokeObjectURL(i)}function re({columns:e,rows:t,filename:n=`export`,exportAllUrl:r}){let[i,o]=(0,T.useState)(!1),[s,c]=(0,T.useState)(!1),l=(0,T.useRef)(null);(0,T.useEffect)(()=>{if(!i)return;let e=e=>{l.current&&!l.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[i]);let u=()=>{let r=w(e,t.map(t=>e.map(e=>String(t[e]??``))));D(`${n}.csv`,r,`text/csv`),o(!1)},d=()=>{let e=JSON.stringify(t,null,2);D(`${n}.json`,e,`application/json`),o(!1)},f=async e=>{if(r){c(!0);try{let t=await(await fetch(`${r}&format=${e}&limit=10000`)).text(),i=e===`csv`?`text/csv`:`application/json`;D(`${n}-all.${e}`,t,i)}catch{}c(!1),o(!1)}};return e.length===0||t.length===0?null:(0,E.jsxs)(`div`,{className:`relative`,ref:l,children:[(0,E.jsx)(`button`,{type:`button`,onClick:()=>o(e=>!e),className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,title:`Export`,children:(0,E.jsx)(a,{className:`size-3.5`})}),i&&(0,E.jsxs)(`div`,{className:`absolute right-0 top-full mt-1 z-50 bg-popover border border-border rounded-md shadow-md py-1 min-w-[160px] text-xs`,children:[(0,E.jsx)(`button`,{onClick:u,className:`w-full text-left px-3 py-1.5 hover:bg-muted transition-colors`,children:`Export Page (CSV)`}),(0,E.jsx)(`button`,{onClick:d,className:`w-full text-left px-3 py-1.5 hover:bg-muted transition-colors`,children:`Export Page (JSON)`}),r&&(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(`div`,{className:`border-t border-border my-1`}),(0,E.jsx)(`button`,{onClick:()=>f(`csv`),disabled:s,className:`w-full text-left px-3 py-1.5 hover:bg-muted transition-colors disabled:opacity-50`,children:s?`Exporting…`:`Export All (CSV)`}),(0,E.jsx)(`button`,{onClick:()=>f(`json`),disabled:s,className:`w-full text-left px-3 py-1.5 hover:bg-muted transition-colors disabled:opacity-50`,children:s?`Exporting…`:`Export All (JSON)`})]})]})]})}function ie({tableData:e,schema:t,loading:n,page:r,onPageChange:a,onCellUpdate:c,onRowDelete:f,orderBy:p,orderDir:g,onToggleSort:y,onBulkDelete:S,onInsertRow:C,connectionId:w,selectedTable:D,selectedSchema:ie,connectionName:O,columnFilters:k={},onColumnFilter:A}){let[j,le]=(0,T.useState)(null),[M,ue]=(0,T.useState)(``),[N,de]=(0,T.useState)(null),[P,fe]=(0,T.useState)(``),[F,I]=(0,T.useState)(new Set),[pe,L]=(0,T.useState)(!1),[R,z]=(0,T.useState)({}),[me,B]=(0,T.useState)(null),[he,V]=(0,T.useState)(!1),{openTab:ge}=h(x(e=>({openTab:e.openTab}))),[H,U]=(0,T.useState)(null),_e=(0,T.useCallback)(e=>{let t=D??``,n=ae(e.value),r=`${w??`local`}:${t}:${e.col}:${e.pkVal}`;U({title:t?`${e.col} #${e.pkVal} — ${t}`:`${e.col} #${e.pkVal}`,content:e.value,language:n,viewerKey:r})},[w,D]),[W,ve]=(0,T.useState)(new Set),[G,ye]=(0,T.useState)(new Set),[be,xe]=(0,T.useState)(null),[Se,K]=(0,T.useState)(!1),Ce=(0,T.useRef)(null),q=(0,T.useMemo)(()=>t.find(e=>e.pk)?.name||(t.find(e=>e.name.toLowerCase()===`id`)?.name??null),[t]),we=(0,T.useCallback)(e=>{let t=JSON.stringify(e,null,2),n=q?String(e[q]??``):``,r=D??``,i=`${w??`local`}:${r}:row:${n||`unknown`}`;U({title:n?`Row #${n}${r?` — ${r}`:``}`:`Row${r?` — ${r}`:``}`,content:t,language:`json`,viewerKey:i})},[q,w,D]),Te=(0,T.useCallback)(()=>{H&&ge({type:`editor`,title:H.title,projectId:null,closable:!0,metadata:{inlineContent:H.content,inlineLanguage:H.language,viewerKey:H.viewerKey}})},[ge,H]),Ee=(0,T.useRef)(j);Ee.current=j;let J=(0,T.useRef)(M);J.current=M;let De=(0,T.useRef)(F);De.current=F;let Oe=(0,T.useRef)(N);Oe.current=N;let ke=(0,T.useCallback)((e,t,n)=>{le({rowIdx:e,col:t}),ue(n==null?``:typeof n==`object`?JSON.stringify(n):String(n))},[]),Ae=(0,T.useCallback)(()=>{let t=Ee.current;if(!t||!e||!q)return;let n=e.rows[t.rowIdx];if(!n)return;let r=n[t.col];String(r??``)!==J.current&&c(q,n[q],t.col,J.current===``?null:J.current),le(null)},[e,q,c]),je=(0,T.useCallback)(()=>le(null),[]),Me=(0,T.useCallback)(t=>{if(!e||!q||!f)return;let n=e.rows[t];n&&(f(q,n[q]),de(null))},[e,q,f]),Ne=(0,T.useCallback)(e=>{ve(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Pe=(0,T.useCallback)(e=>{ye(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Fe=(0,T.useCallback)((e,t)=>{let n={...k};t?n[e]=t:delete n[e],A?.(n)},[k,A]),Ie=(0,T.useCallback)(e=>{I(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Le=(0,T.useCallback)(()=>{e&&I(t=>t.size===e.rows.length?new Set:new Set(e.rows.map((e,t)=>t)))},[e]),Re=(0,T.useCallback)(()=>{!e||!q||!S||(S(q,Array.from(F).map(t=>e.rows[t]?.[q]).filter(e=>e!=null)),I(new Set),V(!1))},[e,q,S,F]),ze=(0,T.useCallback)(async()=>{if(C){B(null);try{let e={};for(let[t,n]of Object.entries(R))n!==``&&(e[t]=n);await C(e),L(!1),z({})}catch(e){B(e.message)}}},[C,R]),Y=(0,T.useMemo)(()=>{if(!e||!P)return e?.rows??[];let t=P.toLowerCase();return e.rows.filter(n=>e.columns.some(e=>String(n[e]??``).toLowerCase().includes(t)))},[e,P]),Be=(0,T.useRef)(null);(0,T.useEffect)(()=>{let t=Be.current;if(!t)return;let n=t=>{if(t.key===`Escape`){K(!1),U(null);return}let n=t.target?.tagName;if(!(n===`INPUT`||n===`TEXTAREA`)){if(t.key===`/`){t.preventDefault(),K(!0);return}if(!(!(t.metaKey||t.ctrlKey)||!e)&&(t.key===`a`&&(t.preventDefault(),I(new Set(e.rows.map((e,t)=>t)))),t.key===`c`&&F.size>0)){t.preventDefault();let n=e.columns,r=n.join(` `),i=Array.from(F).sort((e,t)=>e-t).map(t=>n.map(n=>{let r=e.rows[t]?.[n];return r==null?``:typeof r==`object`?JSON.stringify(r):String(r)}).join(` `));navigator.clipboard.writeText([r,...i].join(`
|
|
2
|
+
`))}}};return t.addEventListener(`keydown`,n),()=>t.removeEventListener(`keydown`,n)},[e,F]);let X=(0,T.useMemo)(()=>{if(!e)return[];let t=e.columns.filter(e=>W.has(e)),n=e.columns.filter(e=>!W.has(e));return[...t,...n]},[e?.columns,W]),Ve=(0,T.useRef)(null),[He,Ue]=(0,T.useState)(0),[Z,We]=(0,T.useState)(new Map);(0,T.useEffect)(()=>{let e=Ve.current;if(!e)return;let t=()=>{Ue(e.offsetHeight);let t=new Map;e.querySelectorAll(`th[data-col]`).forEach(e=>{t.set(e.dataset.col,e.offsetWidth)});let n=e.querySelector(`th[data-col='_cb']`);n&&t.set(`_cb`,n.offsetWidth),We(t)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[e?.columns,W]);let Q=(0,T.useMemo)(()=>{let e=new Map,t=Z.get(`_cb`)??(q?40:0);for(let n of X){if(!W.has(n))break;e.set(n,t),t+=Z.get(n)??100}return e},[X,W,q,Z]),$=(0,T.useMemo)(()=>Array.from(G).sort((e,t)=>e-t).map(e=>({idx:e,row:Y[e]})).filter(e=>e.row),[G,Y]),Ge=(0,T.useRef)(new Map),[Ke,qe]=(0,T.useState)(new Map),Je=(0,T.useCallback)((e,t)=>{t?Ge.current.set(e,t):Ge.current.delete(e)},[]);(0,T.useEffect)(()=>{if($.length===0){Ke.size>0&&qe(new Map);return}let e=requestAnimationFrame(()=>{let e=new Map;for(let{idx:t}of $){let n=Ge.current.get(t);n&&e.set(t,n.offsetHeight)}qe(e)});return()=>cancelAnimationFrame(e)},[$,e]);let Ye=(0,T.useMemo)(()=>{let e=new Map,t=He;for(let{idx:n}of $)e.set(n,t),t+=Ke.get(n)??28;return e},[He,$,Ke]),Xe=(0,T.useCallback)(e=>{let t=Ce.current,n=t?.querySelector(`th[data-col="${e}"]`);if(!t||!n)return;let r=0,i=t.querySelector(`th[data-col="_cb"]`);i&&(r+=i.offsetWidth);for(let[t,n]of Q)t!==e&&(r=Math.max(r,n+(Z.get(t)??0)));let a=n.offsetLeft-r;t.scrollTo({left:a,behavior:`instant`}),K(!1)},[Q,Z]);if(!e)return(0,E.jsx)(`div`,{className:`flex items-center justify-center h-full text-xs text-muted-foreground`,children:n?(0,E.jsx)(v,{className:`size-4 animate-spin`}):`Select a table`});let Ze=Math.ceil(e.total/e.limit)||1,Qe=F.size>0,$e=F.size===e.rows.length&&e.rows.length>0;return(0,E.jsxs)(`div`,{ref:Be,tabIndex:0,className:`flex flex-col h-full overflow-hidden outline-none`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1 border-b border-border bg-background shrink-0`,children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-1 flex-1`,children:[(0,E.jsx)(b,{className:`size-3 text-muted-foreground`}),(0,E.jsx)(`input`,{type:`text`,value:P,onChange:e=>fe(e.target.value),placeholder:`Search current page…`,className:`flex-1 text-xs bg-transparent outline-none text-foreground placeholder:text-muted-foreground`}),P&&(0,E.jsx)(`button`,{type:`button`,onClick:()=>fe(``),className:`text-muted-foreground hover:text-foreground`,children:(0,E.jsx)(l,{className:`size-3`})})]}),(0,E.jsxs)(`div`,{className:`relative`,children:[(0,E.jsx)(`button`,{type:`button`,onClick:()=>K(!Se),className:`p-0.5 rounded transition-colors ${Se?`text-primary`:`text-muted-foreground hover:text-foreground`}`,title:`Jump to column ( / )`,children:(0,E.jsx)(te,{className:`size-3.5`})}),Se&&(0,E.jsx)(se,{columns:e.columns,onSelect:Xe,onClose:()=>K(!1)})]}),Qe&&(0,E.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,E.jsxs)(`span`,{className:`text-muted-foreground`,children:[F.size,` selected`]}),S&&q&&(he?(0,E.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,E.jsxs)(`button`,{type:`button`,onClick:Re,className:`text-destructive text-[10px] font-medium hover:underline`,children:[`Delete `,F.size,`?`]}),(0,E.jsx)(`button`,{type:`button`,onClick:()=>V(!1),className:`text-muted-foreground text-[10px] hover:underline`,children:`Cancel`})]}):(0,E.jsx)(`button`,{type:`button`,onClick:()=>V(!0),className:`p-0.5 text-muted-foreground hover:text-destructive`,children:(0,E.jsx)(m,{className:`size-3`})})),(0,E.jsx)(re,{columns:e.columns,rows:Array.from(F).map(t=>e.rows[t]).filter(Boolean),filename:`${O??`db`}-selected`})]}),C&&(0,E.jsx)(`button`,{type:`button`,onClick:()=>{L(!0),z({}),B(null)},className:`p-0.5 rounded text-muted-foreground hover:text-primary transition-colors`,title:`Insert row`,children:(0,E.jsx)(o,{className:`size-3.5`})})]}),pe&&(0,E.jsxs)(`div`,{className:`px-2 py-1.5 border-b border-border bg-muted/30 text-xs space-y-1`,children:[(0,E.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:t.filter(e=>!e.pk).map(e=>(0,E.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,E.jsx)(`label`,{className:`text-muted-foreground text-[10px] w-16 truncate`,title:e.name,children:e.name}),(0,E.jsx)(`input`,{value:R[e.name]??``,onChange:t=>z(n=>({...n,[e.name]:t.target.value})),placeholder:e.defaultValue??(e.nullable?`NULL`:``),className:`h-5 w-24 text-[11px] px-1 rounded border border-border bg-background outline-none focus:border-primary`})]},e.name))}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`button`,{type:`button`,onClick:ze,className:`text-[10px] px-2 py-0.5 rounded bg-primary text-primary-foreground hover:bg-primary/90`,children:`Save`}),(0,E.jsx)(`button`,{type:`button`,onClick:()=>L(!1),className:`text-[10px] text-muted-foreground hover:underline`,children:`Cancel`}),me&&(0,E.jsx)(`span`,{className:`text-[10px] text-destructive`,children:me})]})]}),(0,E.jsxs)(`div`,{ref:Ce,className:`flex-1 overflow-auto relative min-h-0`,children:[n&&(0,E.jsx)(`div`,{className:`absolute inset-0 z-30 flex items-center justify-center bg-background/60`,children:(0,E.jsx)(v,{className:`size-5 animate-spin text-primary`})}),(0,E.jsxs)(`table`,{className:`w-full text-xs`,style:{borderCollapse:`separate`,borderSpacing:0},children:[(0,E.jsx)(`thead`,{ref:Ve,className:`sticky top-0 z-20 bg-muted`,children:(0,E.jsxs)(`tr`,{children:[q&&(0,E.jsx)(`th`,{"data-col":`_cb`,className:`px-2 py-1.5 text-left font-medium text-muted-foreground border-b border-border w-10 bg-muted`,style:{position:`sticky`,left:0,zIndex:30},children:(0,E.jsx)(`input`,{type:`checkbox`,checked:$e,onChange:Le,className:`size-3 accent-primary`})}),X.map(e=>{let n=t.find(t=>t.name===e)?.pk,r=p===e,a=W.has(e),o=!!k[e],c=be===e,u=Q.get(e);return(0,E.jsxs)(`th`,{"data-col":e,className:`group/th px-2 py-1.5 text-left font-medium text-muted-foreground border-b border-border whitespace-nowrap bg-muted ${a?`border-r border-r-primary/20`:``}`,style:u==null?void 0:{position:`sticky`,left:u,zIndex:25},children:[(0,E.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,E.jsxs)(`button`,{type:`button`,onClick:()=>y(e),className:`flex items-center gap-0.5 ${n?`font-bold`:``} hover:text-foreground transition-colors`,children:[e,r&&g===`ASC`&&(0,E.jsx)(i,{className:`size-3`}),r&&g===`DESC`&&(0,E.jsx)(s,{className:`size-3`})]}),A&&(0,E.jsx)(`button`,{type:`button`,title:`Filter column`,onClick:()=>xe(c?null:e),className:`p-0.5 rounded transition-colors ${o||c?`text-primary`:`text-muted-foreground/40 md:opacity-0 md:group-hover/th:opacity-100 hover:text-foreground`}`,children:(0,E.jsx)(ne,{className:`size-2.5`})}),(0,E.jsx)(`button`,{type:`button`,title:a?`Unpin column`:`Pin column`,onClick:()=>Ne(e),className:`p-0.5 rounded transition-colors ${a?`text-primary`:`text-muted-foreground/40 md:opacity-0 md:group-hover/th:opacity-100 hover:text-foreground`}`,children:a?(0,E.jsx)(ee,{className:`size-2.5`}):(0,E.jsx)(_,{className:`size-2.5`})})]}),c&&(0,E.jsxs)(`div`,{className:`mt-1 flex items-center gap-1`,children:[(0,E.jsx)(`input`,{autoFocus:!0,type:`text`,value:k[e]??``,placeholder:`ILIKE filter…`,onChange:t=>Fe(e,t.target.value),onKeyDown:e=>{e.key===`Escape`&&xe(null)},className:`w-full h-5 text-[10px] px-1 rounded border border-border bg-background outline-none focus:border-primary`}),o&&(0,E.jsx)(`button`,{type:`button`,onClick:()=>Fe(e,``),className:`text-muted-foreground hover:text-foreground`,children:(0,E.jsx)(l,{className:`size-2.5`})})]})]},e)}),f&&q&&(0,E.jsx)(`th`,{className:`px-2 py-1.5 border-b border-border w-14 bg-muted`})]})}),(0,E.jsxs)(`tbody`,{children:[$.map(({idx:e,row:t})=>(0,E.jsx)(ce,{row:t,rowIdx:e,columns:X,selected:F.has(e),onToggleSelect:Ie,pkCol:q,editingCell:j,editValue:M,onStartEdit:ke,onCommitEdit:Ae,onCancelEdit:je,onSetEditValue:ue,showDelete:!!f,confirmingDelete:N===e,onDelete:Me,onConfirmDelete:de,onViewCell:_e,onViewRow:we,pinned:!0,onTogglePin:Pe,pinnedCols:W,pinnedColOffsets:Q,stickyTop:Ye.get(e)??He,trRef:t=>Je(e,t)},`pin-${e}`)),Y.map((e,t)=>G.has(t)?null:(0,E.jsx)(ce,{row:e,rowIdx:t,columns:X,selected:F.has(t),onToggleSelect:Ie,pkCol:q,editingCell:j,editValue:M,onStartEdit:ke,onCommitEdit:Ae,onCancelEdit:je,onSetEditValue:ue,showDelete:!!f,confirmingDelete:N===t,onDelete:Me,onConfirmDelete:de,onViewCell:_e,onViewRow:we,pinned:!1,onTogglePin:Pe,pinnedCols:W,pinnedColOffsets:Q},t)),Y.length===0&&(0,E.jsx)(`tr`,{children:(0,E.jsx)(`td`,{colSpan:X.length+2,className:`px-2 py-8 text-center text-muted-foreground`,children:`No data`})})]})]})]}),H&&(0,E.jsx)(oe,{data:H,onClose:()=>U(null),onOpenInTab:Te}),(0,E.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-1.5 border-t border-border bg-background shrink-0 text-xs text-muted-foreground`,children:[(0,E.jsxs)(`span`,{children:[e.total.toLocaleString(),` rows`]}),(0,E.jsxs)(`div`,{className:`hidden md:flex items-center gap-2 text-[10px] text-muted-foreground/50`,children:[(0,E.jsxs)(`span`,{children:[(0,E.jsx)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:`/`}),` columns`]}),(0,E.jsxs)(`span`,{children:[(0,E.jsxs)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:[`⌘`,`A`]}),` select all`]}),(0,E.jsxs)(`span`,{children:[(0,E.jsxs)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:[`⌘`,`C`]}),` copy`]})]}),(0,E.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,E.jsx)(`button`,{type:`button`,disabled:r<=1,onClick:()=>a(r-1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,E.jsx)(u,{className:`size-3.5`})}),(0,E.jsxs)(`span`,{children:[r,` / `,Ze]}),(0,E.jsx)(`button`,{type:`button`,disabled:r>=Ze,onClick:()=>a(r+1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,E.jsx)(d,{className:`size-3.5`})})]})]})]})}function O(e){return e==null?`NULL`:typeof e==`object`?JSON.stringify(e):String(e)}var k=200;function A(e){if(e==null)return!1;if(typeof e==`object`)return!0;let t=String(e);if(t.length>=k)return!0;let n=t.trimStart();return!!((n[0]===`{`||n[0]===`[`)&&(n.endsWith(`}`)||n.endsWith(`]`))||n.startsWith(`<?xml`)||n.startsWith(`<`)&&n.endsWith(`>`))}function ae(e){let t=e.trimStart();if(t[0]===`{`||t[0]===`[`)try{return JSON.parse(t),`json`}catch{}return t.startsWith(`<?xml`)||t.startsWith(`<`)&&/<\/\w+>/.test(t)?`xml`:t.startsWith(`---`)||/^\w+:\s/m.test(t)?`yaml`:`plaintext`}function oe({data:e,onClose:t,onOpenInTab:n}){let r=C(),[i,a]=(0,T.useState)(!0),[o,s]=(0,T.useState)(e.content),[u,d]=(0,T.useState)(!1),m=e.language===`json`||e.language===`xml`,h=(0,T.useRef)(e.title);h.current!==e.title&&(h.current=e.title,s(e.content),d(!1));let _=(0,T.useCallback)(()=>{if(u)s(e.content),d(!1);else if(e.language===`json`)try{s(JSON.stringify(JSON.parse(e.content.trim()),null,2)),d(!0)}catch{}else if(e.language===`xml`){let t=0;s(e.content.trim().replace(/>\s*</g,`>
|
|
3
|
+
<`).split(`
|
|
4
|
+
`).map(e=>{let n=e.trim();n.startsWith(`</`)&&(t=Math.max(0,t-1));let r=` `.repeat(t)+n;return n.startsWith(`<`)&&!n.startsWith(`</`)&&!n.endsWith(`/>`)&&!n.startsWith(`<?`)&&t++,r}).join(`
|
|
5
|
+
`)),d(!0)}},[u,e.content,e.language]),[b,ee]=(0,T.useState)(200),x=(0,T.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=b,r=e=>ee(Math.max(80,n+(t-e.clientY))),i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[b]);return(0,E.jsxs)(`div`,{className:`shrink-0 border-t border-border flex flex-col`,style:{height:b},children:[(0,E.jsx)(`div`,{onMouseDown:x,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,E.jsx)(y,{className:`size-3 text-muted-foreground/50`})}),(0,E.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1 bg-muted/50 border-b border-border shrink-0`,children:[(0,E.jsx)(c,{className:`size-3 text-muted-foreground`}),(0,E.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate flex-1`,children:e.title}),m&&(0,E.jsx)(`button`,{type:`button`,onClick:_,title:u?`Raw`:`Beautify`,className:`p-0.5 rounded transition-colors ${u?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,E.jsx)(f,{className:`size-3`})}),(0,E.jsx)(`button`,{type:`button`,onClick:()=>a(!i),title:i?`No wrap`:`Word wrap`,className:`p-0.5 rounded transition-colors ${i?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,E.jsx)(p,{className:`size-3`})}),(0,E.jsxs)(`button`,{type:`button`,onClick:n,title:`Open in new tab`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,E.jsx)(g,{className:`size-3`}),(0,E.jsx)(`span`,{className:`hidden sm:inline`,children:`Open in Tab`})]}),(0,E.jsx)(`button`,{type:`button`,onClick:t,title:`Close preview (Esc)`,className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,E.jsx)(l,{className:`size-3`})})]}),(0,E.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,E.jsx)(S,{height:`100%`,language:e.language===`plaintext`?void 0:e.language,value:o,theme:r,options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:i?`on`:`off`,lineNumbers:`on`,fontSize:12,folding:!0,bracketPairColorization:{enabled:!0},domReadOnly:!0,contextmenu:!1,overviewRulerLanes:0},loading:(0,E.jsx)(v,{className:`size-4 animate-spin text-muted-foreground`})})})]})}function se({columns:e,onSelect:t,onClose:n}){let[r,i]=(0,T.useState)(``),[a,o]=(0,T.useState)(0),s=(0,T.useMemo)(()=>{if(!r)return e;let t=r.toLowerCase();return e.filter(e=>e.toLowerCase().includes(t))},[e,r]),c=(0,T.useRef)(null);return(0,T.useEffect)(()=>{c.current?.scrollIntoView({block:`nearest`})},[a]),(0,E.jsxs)(`div`,{className:`absolute top-full right-0 mt-1 z-50 w-52 max-h-56 bg-popover border border-border rounded-md shadow-lg overflow-hidden flex flex-col`,children:[(0,E.jsx)(`input`,{autoFocus:!0,type:`text`,value:r,onChange:e=>{i(e.target.value),o(0)},onKeyDown:e=>{e.key===`Escape`?n():e.key===`ArrowDown`?(e.preventDefault(),o(e=>Math.min(e+1,s.length-1))):e.key===`ArrowUp`?(e.preventDefault(),o(e=>Math.max(e-1,0))):e.key===`Enter`&&s[a]&&t(s[a])},placeholder:`Search columns…`,className:`px-2 py-1.5 text-xs bg-transparent outline-none border-b border-border text-foreground placeholder:text-muted-foreground`}),(0,E.jsx)(`div`,{className:`overflow-auto flex-1`,children:s.map((e,n)=>(0,E.jsx)(`button`,{type:`button`,onClick:()=>t(e),ref:n===a?c:void 0,className:`w-full text-left px-2 py-1 text-xs truncate ${n===a?`bg-primary/10 text-primary`:`text-foreground hover:bg-muted`}`,children:e},e))})]})}var ce=(0,T.memo)(function({row:e,rowIdx:t,columns:n,selected:r,onToggleSelect:i,pkCol:a,editingCell:o,editValue:s,onStartEdit:l,onCommitEdit:u,onCancelEdit:d,onSetEditValue:f,showDelete:p,confirmingDelete:h,onDelete:g,onConfirmDelete:v,onViewCell:y,onViewRow:b,pinned:x,onTogglePin:S,pinnedCols:C,pinnedColOffsets:w,stickyTop:te,trRef:ne}){let T=x?`bg-muted`:r?`bg-primary/5`:`bg-background`;return(0,E.jsxs)(`tr`,{ref:ne,className:`group ${x?``:`hover:bg-muted/30`}`,style:x?{position:`sticky`,top:te,zIndex:15}:void 0,children:[a&&(0,E.jsx)(`td`,{className:`px-2 py-1 border-b border-border/50 ${T}`,style:{position:`sticky`,left:0,zIndex:12},children:(0,E.jsxs)(`span`,{className:`flex items-center gap-0.5`,children:[(0,E.jsx)(`input`,{type:`checkbox`,checked:r,onChange:()=>i(t),className:`size-3 accent-primary`}),(0,E.jsx)(`button`,{type:`button`,title:`View row as JSON`,onClick:()=>b(e),className:`p-0.5 rounded transition-colors text-muted-foreground/30 md:opacity-0 md:group-hover:opacity-100 hover:text-foreground`,children:(0,E.jsx)(c,{className:`size-2.5`})}),(0,E.jsx)(`button`,{type:`button`,title:x?`Unpin row`:`Pin row`,onClick:()=>S(t),className:`p-0.5 rounded transition-colors ${x?`text-primary`:`text-muted-foreground/30 md:opacity-0 md:group-hover:opacity-100 hover:text-foreground`}`,children:x?(0,E.jsx)(ee,{className:`size-2.5`}):(0,E.jsx)(_,{className:`size-2.5`})})]})}),n.map(n=>{let r=o?.rowIdx===t&&o?.col===n,i=e[n],p=!r&&A(i),m=C.has(n),h=w.get(n);return(0,E.jsx)(`td`,{className:`px-2 py-1 max-w-[300px] border-b border-border/50 ${m?`border-r border-r-primary/20`:``} ${m||x?T:``}`,style:h==null?void 0:{position:`sticky`,left:h,zIndex:10},children:r?(0,E.jsx)(`input`,{autoFocus:!0,className:`w-full bg-transparent border border-primary/50 rounded px-1 py-0 text-xs outline-none`,value:s,onChange:e=>f(e.target.value),onBlur:u,onKeyDown:e=>{e.key===`Enter`&&u(),e.key===`Escape`&&d()}}):(0,E.jsxs)(`span`,{className:`flex items-center gap-0.5`,children:[(0,E.jsx)(`span`,{className:`cursor-pointer truncate flex-1 ${i==null?`text-muted-foreground/40 italic`:``}`,onDoubleClick:()=>a&&l(t,n,i),title:O(i),children:O(i)}),p&&(0,E.jsx)(`button`,{type:`button`,title:`View full content`,onClick:()=>y({col:n,value:O(i),pkVal:a?String(e[a]??t):String(t)}),className:`shrink-0 p-0.5 rounded text-muted-foreground/50 hover:text-foreground transition-colors`,children:(0,E.jsx)(c,{className:`size-3`})})]})},n)}),p&&a&&(0,E.jsx)(`td`,{className:`px-2 py-1 border-b border-border/50 ${x?T:``}`,children:h?(0,E.jsxs)(`span`,{className:`flex items-center gap-1 whitespace-nowrap`,children:[(0,E.jsx)(`button`,{type:`button`,onClick:()=>g(t),className:`text-destructive text-[10px] font-medium hover:underline`,children:`Confirm`}),(0,E.jsx)(`button`,{type:`button`,onClick:()=>v(null),className:`text-muted-foreground text-[10px] hover:underline`,children:`Cancel`})]}):(0,E.jsx)(`button`,{type:`button`,onClick:()=>v(t),className:`p-0.5 rounded md:opacity-0 md:group-hover:opacity-100 hover:bg-destructive/10 hover:text-destructive transition-opacity`,title:`Delete row`,children:(0,E.jsx)(m,{className:`size-3`})})})]})});export{re as n,ie as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-BjHrJDVb.js";var t=e(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]),n=e(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]);export{t as n,n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{t as r}from"./database-DOWH9-Vv.js";import{n as i,t as a}from"./data-grid-nZfSIop5.js";import{t as o}from"./refresh-cw-CSFrDtiu.js";import{t as s}from"./api-client-Dvzcc_EO.js";import"./settings-store-BHBb62gq.js";import"./vendor-mermaid-CMiurk2b.js";import"./tab-store-0rGchMXr.js";import{G as c,K as l}from"./index-CoMWx5VS.js";import"./use-monaco-theme-CP-vyTF8.js";import{t as u}from"./sql-query-editor-CMQpaOjA.js";var d=e(n(),1);function f(e,t,n,r){return`ppm-db-${e}-${n}.${t}-p${r}`}function p(e,t,n,r){try{let i=sessionStorage.getItem(f(e,t,n,r));return i?JSON.parse(i):null}catch{return null}}function m(e,t,n,r,i,a){try{sessionStorage.setItem(f(e,t,n,r),JSON.stringify({data:i,cols:a}))}catch{}}function h(e){let t=`/api/db/connections/${e}`,[n,r]=(0,d.useState)(null),[i,a]=(0,d.useState)(`public`),[o,c]=(0,d.useState)(null),[l,u]=(0,d.useState)([]),[f,h]=(0,d.useState)(!1),[g,_]=(0,d.useState)(null),[v,y]=(0,d.useState)(1),[b,x]=(0,d.useState)(null),[S,C]=(0,d.useState)(null),[w,T]=(0,d.useState)(!1),[E,D]=(0,d.useState)(null),[O,k]=(0,d.useState)(`ASC`),A=(0,d.useCallback)(async(r,a,o,l,d)=>{let f=r??n,p=a??i;if(!f)return;h(!0);let g=l===void 0?E:l,y=d??O;try{let n=g?`&orderBy=${encodeURIComponent(g)}&orderDir=${y}`:``,[r,i]=await Promise.all([s.get(`${t}/data?table=${encodeURIComponent(f)}&schema=${p}&page=${o??v}&limit=100${n}`),s.get(`${t}/schema?table=${encodeURIComponent(f)}&schema=${p}`)]);c(r),u(i),m(e,f,p,o??v,r,i)}catch(e){_(e.message)}finally{h(!1)}},[t,e,n,i,v,E,O]),j=(0,d.useCallback)((t,n=`public`)=>{r(t),a(n),y(1),x(null);let i=p(e,t,n,1);i?(c(i.data),u(i.cols),h(!1),A(t,n,1)):A(t,n,1)},[e,A]),M=(0,d.useCallback)(e=>{y(e),A(void 0,void 0,e)},[A]),N=(0,d.useCallback)(async e=>{T(!0),C(null);try{let r=await s.post(`${t}/query`,{sql:e});x(r),r.changeType===`modify`&&A(n??void 0,i)}catch(e){C(e.message)}finally{T(!1)}},[t,n,i,A]),P=(0,d.useCallback)(async(e,r,a,o)=>{if(!n)return;let c=n,l=i;try{await s.put(`${t}/cell`,{table:c,schema:l,pkColumn:e,pkValue:r,column:a,value:o}),A(c,l)}catch(e){_(e.message)}},[t,n,i,A]),F=(0,d.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await s.del(`${t}/row`,{table:a,schema:o,pkColumn:e,pkValue:r}),A(a,o)}catch(e){_(e.message)}},[t,n,i,A]);return{selectedTable:n,selectedSchema:i,selectTable:j,tableData:o,schema:l,loading:f,error:g,page:v,setPage:M,orderBy:E,orderDir:O,toggleSort:(0,d.useCallback)(e=>{let t,n=`ASC`;E===e?O===`ASC`?(t=e,n=`DESC`):(t=null,n=`ASC`):(t=e,n=`ASC`),D(t),k(n),y(1),A(void 0,void 0,1,t,n)},[E,O,A]),queryResult:b,queryError:S,queryLoading:w,executeQuery:N,updateCell:P,deleteRow:F,bulkDelete:(0,d.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await s.post(`${t}/rows/delete`,{table:a,schema:o,pkColumn:e,pkValues:r}),A(a,o)}catch(e){_(e.message)}},[t,n,i,A]),insertRow:(0,d.useCallback)(async e=>{if(!n)return;let r=n,a=i;try{await s.post(`${t}/row`,{table:r,schema:a,values:e}),A(r,a)}catch(e){throw _(e.message),e}},[t,n,i,A]),refreshData:A,queryAsTable:(0,d.useCallback)(async e=>{h(!0);try{let n=await s.post(`${t}/query`,{sql:e});n.changeType===`select`&&c({columns:n.columns,rows:n.rows,total:n.rows.length,page:1,limit:n.rows.length})}catch(e){_(e.message)}finally{h(!1)}},[t])}}var g=t();function _(e){let t={},n=/"(\w+)"\s+ILIKE\s+'%([^']*?)%'/gi,r;for(;(r=n.exec(e))!==null;)t[r[1]]=r[2].replace(/''/g,`'`);return t}function v({metadata:e}){let t=e?.connectionId,n=e?.connectionName,c=e?.tableName,f=e?.schemaName??`public`,p=e?.initialSql,m=h(t),[v,y]=(0,d.useState)([]),[x,S]=(0,d.useState)(180),C=(0,d.useRef)(null),[w,T]=(0,d.useState)({}),E=(0,d.useMemo)(()=>{if(p&&!m.selectedTable)return p;if(m.selectedTable){let e=`SELECT * FROM "${m.selectedTable}"`,t=Object.entries(w).filter(([,e])=>e.trim()).map(([e,t])=>`"${e}" ILIKE '%${t.replace(/'/g,`''`)}%'`);t.length>0&&(e+=` WHERE ${t.join(` AND `)}`),m.orderBy&&(e+=` ORDER BY "${m.orderBy}" ${m.orderDir}`);let n=(m.page-1)*100;return e+=` LIMIT 100`,n>0&&(e+=` OFFSET ${n}`),e}return`SELECT * FROM `},[p,m.selectedTable,m.orderBy,m.orderDir,m.page,w]),D=(0,d.useCallback)(e=>{T(e)},[]),O=(0,d.useRef)(void 0);(0,d.useEffect)(()=>{if(!(!m.selectedTable||Object.keys(w).length===0))return clearTimeout(O.current),O.current=setTimeout(()=>{m.queryAsTable(E)},500),()=>clearTimeout(O.current)},[w]);let k=(0,d.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=x,r=e=>{let r=e.clientY-t;S(Math.max(80,Math.min(n+r,(C.current?.clientHeight??600)-100)))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[x]);(0,d.useEffect)(()=>{s.get(`/api/db/connections/${t}/tables?cached=1`).then(e=>y(e.map(e=>({name:e.name,schema:e.schema})))).catch(()=>{})},[t]);let A=(0,d.useMemo)(()=>{if(v.length!==0)return{tables:v,getColumns:async(e,n)=>await s.get(`/api/db/connections/${t}/schema?table=${encodeURIComponent(e)}${n?`&schema=${encodeURIComponent(n)}`:``}`)}},[t,v]),j=(0,d.useRef)(!1);(0,d.useEffect)(()=>{j.current||(j.current=!0,p?m.executeQuery(p):c&&m.selectTable(c,f))},[c,f,p]);let[M,N]=(0,d.useState)(!!p),P=(0,d.useCallback)(e=>{let t=e.trim();if(m.selectedTable&&RegExp(`^SELECT\\s+\\*\\s+FROM\\s+"?${m.selectedTable.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}"?\\b`,`i`).test(t)){T(_(t)),m.queryAsTable(t);return}N(!0),m.executeQuery(e)},[m.executeQuery,m.queryAsTable,m.selectedTable]),F=(0,d.useCallback)(e=>{N(!1),m.toggleSort(e)},[m.toggleSort]),I=(0,d.useCallback)(e=>{N(!1),m.setPage(e)},[m.setPage]),L=m.queryResult,R=M&&!!(L||m.queryError),z=m.selectedTable&&!R;return(0,g.jsx)(`div`,{ref:C,className:`flex h-full w-full overflow-hidden`,children:(0,g.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,g.jsx)(r,{className:`size-3.5 text-muted-foreground`}),(0,g.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:n??`Database`}),m.selectedTable&&(0,g.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`/ `,m.selectedTable]}),(0,g.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[m.tableData&&(0,g.jsx)(i,{columns:m.tableData.columns,rows:m.tableData.rows,filename:n?`${n}-${m.selectedTable??`data`}`:m.selectedTable??`data`,exportAllUrl:m.selectedTable?`/api/db/connections/${t}/export?table=${encodeURIComponent(m.selectedTable)}&schema=${m.selectedSchema}`:void 0}),(0,g.jsx)(`button`,{type:`button`,onClick:()=>m.refreshData(),title:`Reload data`,className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,g.jsx)(o,{className:`size-3 ${m.loading?`animate-spin`:``}`})})]})]}),(0,g.jsx)(`div`,{className:`shrink-0 border-b border-border`,style:{height:x},children:(0,g.jsx)(u,{onExecute:P,loading:m.queryLoading,defaultValue:E,schemaInfo:A})}),(0,g.jsx)(`div`,{onMouseDown:k,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,g.jsx)(l,{className:`size-3 text-muted-foreground/50`})}),(0,g.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[z&&(0,g.jsx)(a,{tableData:m.tableData,schema:m.schema,loading:m.loading,page:m.page,onPageChange:I,onCellUpdate:m.updateCell,onRowDelete:m.deleteRow,orderBy:m.orderBy,orderDir:m.orderDir,onToggleSort:F,onBulkDelete:m.bulkDelete,onInsertRow:m.insertRow,connectionId:t,selectedTable:m.selectedTable,selectedSchema:m.selectedSchema,connectionName:n,columnFilters:w,onColumnFilter:D}),R&&(0,g.jsx)(b,{result:L,error:m.queryError,loading:m.queryLoading,schema:m.schema,connectionName:n})]})]})})}var y=()=>{};function b({result:e,error:t,loading:n,schema:r,connectionName:i}){let o=(0,d.useMemo)(()=>e?.changeType===`select`&&e.rows.length>0?{columns:e.columns,rows:e.rows,total:e.rows.length,limit:e.rows.length}:null,[e]),s=(0,d.useMemo)(()=>r?.length?r:(e?.columns??[]).map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null})),[r,e?.columns]);return(0,g.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden text-xs`,children:[t&&(0,g.jsx)(`div`,{className:`px-3 py-2 text-destructive bg-destructive/5 shrink-0`,children:t}),e?.changeType===`modify`&&(0,g.jsxs)(`div`,{className:`px-3 py-2 text-green-500 shrink-0`,children:[e.rowsAffected,` row(s) affected`,e.executionTimeMs!=null&&(0,g.jsxs)(`span`,{className:`text-muted-foreground ml-2`,children:[e.executionTimeMs,`ms`]})]}),o&&(0,g.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[(0,g.jsx)(a,{tableData:o,schema:s,loading:!!n,page:1,onPageChange:y,onCellUpdate:y,orderBy:null,orderDir:`ASC`,onToggleSort:y,connectionName:i}),e?.executionTimeMs!=null&&(0,g.jsxs)(`div`,{className:`px-3 py-0.5 border-t border-border text-[10px] text-muted-foreground shrink-0`,children:[e.rows.length,` rows · `,e.executionTimeMs,`ms`]})]}),e?.changeType===`select`&&e.rows.length===0&&(0,g.jsxs)(`div`,{className:`px-3 py-2 text-muted-foreground shrink-0`,children:[`No results`,e.executionTimeMs!=null&&(0,g.jsxs)(`span`,{className:`ml-2 text-muted-foreground/60`,children:[e.executionTimeMs,`ms`]})]}),!e&&!t&&(0,g.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:n?(0,g.jsx)(c,{className:`size-4 animate-spin`}):`Run a query to see results`})]})}export{v as DatabaseViewer};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{t as r}from"./createLucideIcon-BjHrJDVb.js";import{t as i}from"./text-wrap-Cn6BNQfq.js";import{i as a,t as o}from"./api-client-Dvzcc_EO.js";import{n as s}from"./settings-store-BHBb62gq.js";import"./vendor-mermaid-CMiurk2b.js";import{G as c,H as l,Z as u,h as d,tt as f}from"./index-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{t as r}from"./createLucideIcon-BjHrJDVb.js";import{t as i}from"./text-wrap-Cn6BNQfq.js";import{i as a,t as o}from"./api-client-Dvzcc_EO.js";import{n as s}from"./settings-store-BHBb62gq.js";import"./vendor-mermaid-CMiurk2b.js";import{G as c,H as l,Z as u,h as d,tt as f}from"./index-CoMWx5VS.js";import{r as p,t as m}from"./use-monaco-theme-CP-vyTF8.js";var h=r(`panel-right-open`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M15 3v18`,key:`14nvp0`}],[`path`,{d:`m10 15-3-3 3-3`,key:`1pgupc`}]]),g=e(n(),1),_=t();function v(e){return{js:`javascript`,jsx:`javascript`,ts:`typescript`,tsx:`typescript`,py:`python`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,mdx:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,bash:`shell`}[e.split(`.`).pop()?.toLowerCase()??``]??`plaintext`}function y({metadata:e}){let t=e?.filePath,n=e?.projectName,r=e?.ref1,y=e?.ref2,x=e?.file1,S=e?.file2,C=e?.original,w=e?.modified,T=C!=null||w!=null,E=!!(x&&S),[D,O]=(0,g.useState)(null),[k,A]=(0,g.useState)(null),[j,M]=(0,g.useState)(null),[N,P]=(0,g.useState)(!T),[F,I]=(0,g.useState)(null),[L,R]=(0,g.useState)(`both`),{wordWrap:z,toggleWordWrap:B}=s(d(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap}))),V=m(),H=(0,g.useRef)(null),[U,W]=(0,g.useState)();(0,g.useEffect)(()=>{let e=H.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&W(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[N,F]),(0,g.useEffect)(()=>{if(T||!n)return;if(P(!0),I(null),M(null),A(null),O(null),x&&S){let e=new URLSearchParams({file1:x,file2:S});o.get(`${a(n)}/files/compare?${e}`).then(e=>{A(e),P(!1)}).catch(e=>{I(e instanceof Error?e.message:`Failed to compare files`),P(!1)});return}if(t){let e=new URLSearchParams({file:t});r&&e.set(`ref`,r),o.get(`${a(n)}/git/file-full-diff?${e}`).then(e=>{M(e),P(!1)}).catch(e=>{I(e instanceof Error?e.message:`Failed to load diff`),P(!1)});return}let e;if(r||y){let t=new URLSearchParams;r&&t.set(`ref1`,r),y&&t.set(`ref2`,y),e=`${a(n)}/git/diff?${t}`}else e=`${a(n)}/git/diff`;o.get(e).then(e=>{O(e.diff),P(!1)}).catch(e=>{I(e instanceof Error?e.message:`Failed to load diff`),P(!1)})},[t,n,r,y,x,S,T]);let{original:G,modified:K}=(0,g.useMemo)(()=>T?{original:C??``,modified:w??``}:E&&k?k:j||(D?b(D):{original:``,modified:``}),[D,T,C,w,E,k,j]),q=(0,g.useMemo)(()=>{let e=t??S??x;return e?v(e):`plaintext`},[t,x,S]),J=typeof window<`u`&&window.innerWidth<768,Y=!J&&L===`both`;return!n&&!T?(0,_.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`}):N?(0,_.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,_.jsx)(c,{className:`size-5 animate-spin`}),(0,_.jsx)(`span`,{className:`text-sm`,children:`Loading diff...`})]}):F?(0,_.jsx)(`div`,{className:`flex items-center justify-center h-full text-destructive text-sm`,children:F}):!T&&!E&&!j&&!G&&!K?(0,_.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,_.jsx)(u,{className:`size-8`}),(0,_.jsx)(`p`,{className:`text-sm`,children:`No content changes`}),t&&(0,_.jsx)(`p`,{className:`text-xs font-mono`,children:t})]}):(0,_.jsxs)(`div`,{className:`flex flex-col h-full`,children:[!J&&(0,_.jsxs)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:[(0,_.jsx)(`button`,{type:`button`,onClick:()=>R(L===`left`?`both`:`left`),className:`p-1 rounded hover:bg-muted transition-colors ${L===`left`?`bg-muted text-foreground`:``}`,title:`Expand original`,children:(0,_.jsx)(l,{className:`size-3.5`})}),(0,_.jsx)(`button`,{type:`button`,onClick:()=>R(`both`),className:`p-1 rounded hover:bg-muted transition-colors ${L===`both`?`bg-muted text-foreground`:``}`,title:`Side by side`,children:(0,_.jsx)(f,{className:`size-3.5`})}),(0,_.jsx)(`button`,{type:`button`,onClick:()=>R(L===`right`?`both`:`right`),className:`p-1 rounded hover:bg-muted transition-colors ${L===`right`?`bg-muted text-foreground`:``}`,title:`Expand modified`,children:(0,_.jsx)(h,{className:`size-3.5`})}),(0,_.jsx)(`div`,{className:`w-px h-3.5 bg-border mx-0.5 shrink-0`}),(0,_.jsx)(`button`,{type:`button`,onClick:B,title:`Toggle word wrap`,className:`p-1 rounded hover:bg-muted transition-colors ${z?`bg-muted text-foreground`:``}`,children:(0,_.jsx)(i,{className:`size-3.5`})})]}),(0,_.jsx)(`div`,{ref:H,className:`flex-1 overflow-hidden`,children:U&&U>0?(0,_.jsx)(p,{height:U,language:q,original:G,modified:K,theme:V,options:{fontSize:J?11:13,fontFamily:`Menlo, Monaco, Consolas, monospace`,wordWrap:J||z?`on`:`off`,renderSideBySide:Y,readOnly:!0,automaticLayout:!0,scrollBeyondLastLine:!1},loading:(0,_.jsx)(c,{className:`size-5 animate-spin text-muted-foreground`})}):(0,_.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,_.jsx)(c,{className:`size-5 animate-spin text-muted-foreground`})})})]})}function b(e){let t=e.split(`
|
|
2
2
|
`),n=[],r=[],i=!1;for(let e of t)if(!(e.startsWith(`diff --git`)||e.startsWith(`diff --no-index`)||e.startsWith(`index `)||e.startsWith(`new file`)||e.startsWith(`deleted file`)||e.startsWith(`old mode`)||e.startsWith(`new mode`)||e.startsWith(`---`)||e.startsWith(`+++`)||e.startsWith(`Binary files`)||e.startsWith(`\\ No newline`))){if(e.startsWith(`@@`)){i=!0;continue}if(i)if(e.startsWith(`-`))n.push(e.slice(1));else if(e.startsWith(`+`))r.push(e.slice(1));else{let t=e.startsWith(` `)?e.slice(1):e;n.push(t),r.push(t)}}return{original:n.join(`
|
|
3
3
|
`),modified:r.join(`
|
|
4
4
|
`)}}export{y as DiffViewer};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{r}from"./api-client-Dvzcc_EO.js";import{G as i,b as a}from"./index-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{r}from"./api-client-Dvzcc_EO.js";import{G as i,b as a}from"./index-CoMWx5VS.js";var o=e(n(),1),s=t(),c=`<script>
|
|
2
2
|
function acquireVsCodeApi(){return{postMessage:function(m){window.parent.postMessage(m,"*")},getState:function(){try{return JSON.parse(sessionStorage.getItem("vscode-state")||"null")}catch{return null}},setState:function(s){sessionStorage.setItem("vscode-state",JSON.stringify(s));return s}}}
|
|
3
3
|
<\/script>`;function l(e){if(!e)return e;let t=e.indexOf(`<head>`);return t===-1?c+e:e.slice(0,t+6)+c+e.slice(t+6)}function u({metadata:e}){let t=e?.panelId,n=e?.viewType,c=e?.projectName||void 0,[u,d]=(0,o.useState)(!1),f=a(e=>e.contributions!==null),p=a(e=>{if(t&&e.webviewPanels[t])return e.webviewPanels[t];if(n){let t=n.includes(`.`)?n:`${n}.view`;return Object.values(e.webviewPanels).find(e=>e.viewType===n||e.viewType===t)}}),m=p?.id??t,h=(0,o.useRef)(null),g=p?.html??``,_=l(g),v=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(p||!n||!f||c&&c===v.current)return;c&&(v.current=c);let e=n.includes(`.`)?n:`${n}.view`,t=!1;async function i(){let n=[];if(c)try{let e=r(),t=(await(await fetch(`/api/projects`,e?{headers:{Authorization:`Bearer ${e}`}}:{})).json()).data?.find(e=>e.name===c);t&&(n=[t.path])}catch{}t||window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:n}}))}return i(),()=>{t=!0}},[p,n,c,f]);let y=e?.extensionId,b=a(e=>{if(y&&e.activationErrors[y])return e.activationErrors[y];if(n){for(let[t,r]of Object.entries(e.activationErrors))if(t===`ext-${n}`)return r}}),x=(0,o.useCallback)(()=>{if(d(!1),!n)return;let e=n.includes(`.`)?n:`${n}.view`;(async()=>{try{let t=r(),n=(await(await fetch(`/api/projects`,t?{headers:{Authorization:`Bearer ${t}`}}:{})).json()).data?.find(e=>e.name===c),i=n?[n.path]:[];window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:i}}))}catch{}})()},[n,c]),S=(0,o.useRef)(null),C=(0,o.useRef)(n);return(0,o.useEffect)(()=>{S.current=m??null},[m]),(0,o.useEffect)(()=>{C.current=n},[n]),(0,o.useEffect)(()=>()=>{let e=S.current;if(e){let t=C.current;a.getState().removeWebviewPanel(e),window.dispatchEvent(new CustomEvent(`ext:webview:close`,{detail:{panelId:e,viewType:t}}))}},[]),(0,o.useEffect)(()=>{if(p){d(!1);return}if(!f||!n)return;let e=0,t=setInterval(()=>{if(e++,e>3){clearInterval(t),d(!0);return}x()},2e3);return()=>clearInterval(t)},[p,f,n,x]),(0,o.useEffect)(()=>{if(!m)return;let e=e=>{h.current&&e.source===h.current.contentWindow&&window.dispatchEvent(new CustomEvent(`ext:webview:send`,{detail:{panelId:m,message:e.data}}))};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[m]),(0,o.useEffect)(()=>{if(!m)return;let e=e=>{let{panelId:t,message:n}=e.detail;t===m&&h.current?.contentWindow?.postMessage(n,`*`)};return window.addEventListener(`ext:webview:message`,e),()=>window.removeEventListener(`ext:webview:message`,e)},[m]),!p||!g?(0,s.jsx)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-sm text-text-subtle`,children:u?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(`span`,{className:`text-destructive font-medium`,children:`Extension failed to load`}),b&&(0,s.jsx)(`span`,{className:`text-xs text-muted-foreground max-w-md text-center`,children:b}),(0,s.jsx)(`button`,{onClick:x,className:`text-xs text-primary hover:underline`,children:`Retry`})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i,{className:`size-5 animate-spin`}),(0,s.jsx)(`span`,{children:`Loading extension...`})]})}):(0,s.jsx)(`div`,{className:`h-full w-full relative`,children:(0,s.jsx)(`iframe`,{ref:h,srcDoc:_,sandbox:`allow-scripts`,className:`w-full h-full border-0 bg-white dark:bg-zinc-900`,title:p.title},m)})}export{u as ExtensionWebview};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as e}from"./vendor-markdown-0Mxgxy0L.js";import{t}from"./file-exclamation-point-Baz81y5z.js";import"./api-client-Dvzcc_EO.js";import{G as n}from"./index-
|
|
1
|
+
import{b as e}from"./vendor-markdown-0Mxgxy0L.js";import{t}from"./file-exclamation-point-Baz81y5z.js";import"./api-client-Dvzcc_EO.js";import{G as n}from"./index-CoMWx5VS.js";import{t as r}from"./use-blob-url-Hn6n1730.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};
|