@hienlh/ppm 0.17.24 → 0.17.26
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 +11 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/{ai-resource-editor-CwZAAlN5.js → ai-resource-editor-qnr1gXKX.js} +1 -1
- package/dist/web/assets/{audio-preview-C8ePPqYM.js → audio-preview-IJyTkZhv.js} +1 -1
- package/dist/web/assets/{chat-tab-ByfGBWbW.js → chat-tab-Bf7bP_mH.js} +2 -2
- package/dist/web/assets/{code-editor-BLUWMpZn.js → code-editor-DbgRk7IQ.js} +2 -2
- package/dist/web/assets/{conflict-editor-B1oxNu29.js → conflict-editor-7379QQTo.js} +1 -1
- package/dist/web/assets/{csv-preview-CrGymnn9.js → csv-preview-CkZtgJJd.js} +1 -1
- package/dist/web/assets/{database-viewer-BTofJwov.js → database-viewer-BOWXg1eU.js} +1 -1
- package/dist/web/assets/{diff-viewer-Bsp25uLy.js → diff-viewer-3q8WtMhX.js} +1 -1
- package/dist/web/assets/{docx-preview-BULrDLso.js → docx-preview-uAcT8IrY.js} +1 -1
- package/dist/web/assets/{extension-webview-gByeDwuJ.js → extension-webview-C9B286ef.js} +1 -1
- package/dist/web/assets/{git-log-panel-BjB3uGkM.js → git-log-panel-CWfaQmIt.js} +1 -1
- package/dist/web/assets/{glide-data-grid-BmofPEFh.js → glide-data-grid-BTbN5x8y.js} +1 -1
- package/dist/web/assets/{group-chat-tab-DczxC8y0.js → group-chat-tab-CD1tHFCt.js} +1 -1
- package/dist/web/assets/{image-preview-C2JNJTTR.js → image-preview-D35tUSfv.js} +1 -1
- package/dist/web/assets/index-DMEso_fH.js +50 -0
- package/dist/web/assets/{keybindings-store-DWwuOAWb.js → keybindings-store-C56hagRp.js} +1 -1
- package/dist/web/assets/{markdown-renderer-BGumVkCU.js → markdown-renderer-CaVoLF6f.js} +1 -1
- package/dist/web/assets/{markdown-renderer-CvQmV_TU.js → markdown-renderer-w7cIJc1V.js} +1 -1
- package/dist/web/assets/{notification-store-OaYhYp1C.js → notification-store-CijmEBze.js} +1 -1
- package/dist/web/assets/{pdf-preview-DjWTE3jF.js → pdf-preview-URqY4tEa.js} +1 -1
- package/dist/web/assets/{postgres-viewer-K6ZyFyso.js → postgres-viewer-D3iSQpJq.js} +1 -1
- package/dist/web/assets/settings-store-UwT_fNhg.js +2 -0
- package/dist/web/assets/{settings-tab-DcUZ7ln3.js → settings-tab-BMAlaxBD.js} +1 -1
- package/dist/web/assets/{sql-query-editor-D9pM_Dys.js → sql-query-editor-Qrom7wG2.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-zudsiPxP.js → sqlite-viewer-CPzA2RA4.js} +1 -1
- package/dist/web/assets/{system-monitor-tab-C7VZxGbH.js → system-monitor-tab-DEXXqZIz.js} +1 -1
- package/dist/web/assets/{terminal-tab-xiwZMQLE.js → terminal-tab-Cn1szPMh.js} +1 -1
- package/dist/web/assets/{tool-cards-C4DU4njU.js → tool-cards-DNftJX5Y.js} +2 -2
- package/dist/web/assets/{use-monaco-theme-D6Z2faTR.js → use-monaco-theme-XO5ZyYBW.js} +1 -1
- package/dist/web/assets/{video-preview-BL-sWnxi.js → video-preview-U2aMrCxv.js} +1 -1
- package/dist/web/index.html +2 -2
- package/dist/web/sw.js +1 -1
- package/package.json +1 -1
- package/src/cli/commands/status.ts +21 -2
- package/src/server/routes/settings.ts +11 -0
- package/src/services/autostart-generator.ts +5 -0
- package/src/services/supervisor.ts +61 -28
- package/src/web/components/database/connection-list.tsx +50 -28
- package/src/web/components/database/use-db-tree-expansion.ts +74 -0
- package/src/web/stores/settings-store.ts +43 -0
- package/dist/web/assets/index-D6qn4rtk.js +0 -50
- package/dist/web/assets/settings-store-C7VeYnhf.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import{ot as r}from"./vendor-ui-DMRGWRuc.js";import{bn as i,xn as a}from"./index-D6qn4rtk.js";import{n as o,t as s}from"./csv-parser-BOlh-1bz.js";import{i as c,n as l,r as u,t as d}from"./lib-CvYn0SaB.js";var f=e(r(),1),p=e(t(),1);function m(e,t,n){let r=Array(e);return new Proxy(r,{get(r,i,a){if(typeof i==`string`){let a=i.charCodeAt(0);if(a>=48&&a<=57){let a=+i;if(Number.isInteger(a)&&a>=0&&a<e){let e=r[a];if(!e){let i=t[a*2];e=r[a]={index:a,key:n(a),start:i,size:t[a*2+1],end:i+t[a*2+1],lane:0}}return e}}if(i===`length`)return e}return Reflect.get(r,i,a)}})}function h(e,t,n){let r=n.initialDeps??[],i,a=!0;function o(){let o=e();return o.length!==r.length||o.some((e,t)=>r[t]!==e)?(r=o,i=t(...o),n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i):i}return o.updateDeps=e=>{r=e},o}function g(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var _=(e,t)=>Math.abs(e-t)<1.01,v=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},y,b=()=>{if(y!==void 0)return y;if(typeof navigator>`u`)return y=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return y=!0;let e=navigator.maxTouchPoints;return y=navigator.platform===`MacIntel`&&e!==void 0&&e>0},x=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},S=e=>e,C=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e<n;e++)r[e]=t+e;return r},w=(e,t)=>{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(x(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(x(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},T={passive:!0},E=typeof window>`u`?!0:`onscrollend`in window,D=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&E,o=0,s=a?null:v(i,()=>t(o,!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,T),a&&r.addEventListener(`scrollend`,u,T),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u)}},O=(e,t)=>D(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),k=(e,t,n)=>{if(n.options.useCachedMeasurements){let t=n.indexFromElement(e),r=n.options.getItemKey(t);return n.itemSizeCache.get(r)??n.options.estimateSize(t)}if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}if(!t){let t=n.indexFromElement(e),r=n.options.getItemKey(t),i=n.itemSizeCache.get(r);if(i!==void 0)return i}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},A=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})},j=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(!t.isConnected){this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}return}this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:S,rangeExtractor:C,onChange:()=>{},measureElement:k,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,anchorTo:`start`,followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`,useCachedMeasurements:!1};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}let n=this.options,r=null,i=null,a=!1;if(n!==void 0&&n.enabled&&t.enabled&&t.anchorTo===`end`&&this.scrollElement!==null){let e=n.count,o=t.count,s=this.getMeasurements(),c=e>0?s[0]?.key??n.getItemKey(0):null,l=e>0?s[e-1]?.key??n.getItemKey(e-1):null;if(o!==e||e>0&&o>0&&(t.getItemKey(0)!==c||t.getItemKey(o-1)!==l)){a=!0;let c=e>0?this.getVirtualItemForOffset(this.getScrollOffset())??s[0]:null;c&&(r=[c.key,this.getScrollOffset()-c.start]);let u=t.followOnAppend===!0?`auto`:t.followOnAppend||null;u&&o>e&&this.isAtEnd(n.scrollEndThreshold)&&(e===0||t.getItemKey(o-1)!==l)&&(i=u)}}this.options=t,a&&(this.pendingMin=0,this.itemSizeCacheVersion++);let o=!1,s=0;if(r&&this.scrollOffset!==null){let[e,t]=r,n=this.getMeasurements(),{count:i,getItemKey:a}=this.options,c=0;for(;c<i&&a(c)!==e;)c++;if(c<i){let e=n[c];if(e){let n=e.start+t;n!==this.scrollOffset&&(s=n-this.scrollOffset,this.scrollOffset=n,o=!0)}}}(o||i)&&(this.pendingScrollAnchor=[o?r[0]:null,o?r[1]:0,i,s])},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=h(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&`ownerDocument`in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{if(t&&this._intendedScrollOffset===null&&e===this.scrollOffset)return;this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0;let n=this.getScrollOffset();this.scrollDirection=t?n===e?this.scrollDirection:n<e?`forward`:`backward`:null,this.scrollOffset=e,this.isScrolling=t,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),`addEventListener`in this.scrollElement){let e=this.scrollElement,t=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!b()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,T),e.addEventListener(`touchend`,n,T),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}let t=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,t&&this.scrollElement&&this.options.enabled){let[e,n,r,i]=t;e!==null&&!r&&(b()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?i!==0&&(this._iosDeferredAdjustment+=i):this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),r&&this.scrollToEnd({behavior:r})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let n=new Map,r=new Map;for(let i=t-1;i>=0;i--){let t=e[i];if(n.has(t.lane))continue;let a=r.get(t.lane);if(a==null||t.end>a.end?r.set(t.lane,t):t.end<a.end&&n.set(t.lane,!0),n.size===this.options.lanes)break}return r.size===this.options.lanes?Array.from(r.values()).sort((e,t)=>e.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=h(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,r,i,a,o)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o}),{key:!1}),this.getMeasurements=h(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o},s)=>{let c=this.itemSizeCache;if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let l=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=this.options.gap,a=e*2,o=this._flatMeasurements;if(!o||o.length<a){let e=new Float64Array(a);o&&l>0&&e.set(o.subarray(0,l*2)),o=e,this._flatMeasurements=o}let s;if(l===0)s=t+n;else{let e=l-1;s=o[e*2]+o[e*2+1]+i}for(let t=l;t<e;t++){let e=r(t),n=c.get(e),a=typeof n==`number`?n:this.options.estimateSize(t);o[t*2]=s,o[t*2+1]=a,s+=a+i}let u=m(e,o,r);return this.measurementsCache=u,u}let u=this.measurementsCache.slice(0,l),d=Array(a).fill(void 0);for(let e=0;e<l;e++){let t=u[e];t&&(d[t.lane]=e)}for(let i=l;i<e;i++){let e=r(i),a=this.laneAssignments.get(i),s,l,f=o===`estimate`||c.has(e);if(a!==void 0&&this.options.lanes>1){s=a;let e=d[s],r=e===void 0?void 0:u[e];l=r?r.end+this.options.gap:t+n}else{let e=this.options.lanes===1?u[i-1]:this.getFurthestMeasurement(u,i);l=e?e.end+this.options.gap:t+n,s=e?e.lane:i%this.options.lanes,this.options.lanes>1&&f&&this.laneAssignments.set(i,s)}let p=c.get(e),m=typeof p==`number`?p:this.options.estimateSize(i),h=l+m;u[i]={index:i,start:l,size:m,end:h,key:e,lane:s},d[s]=i}return this.measurementsCache=u,u},{key:!1,debug:()=>this.options.debug}),this.calculateRange=h(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>e.length===0||t===0?(this.range=null,null):(this.range=P(e,t,n,r,r===1&&this._flatMeasurements!=null?this._flatMeasurements:null),this.range),{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=h(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e),n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(e<0||e>=this.options.count)return;let n,r,i,a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=t-(this.itemSizeCache.get(i)??n);if(o!==0){let a=this.options.anchorTo===`end`&&this.scrollState?.behavior!==`smooth`&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,s=a?this.getTotalSize():0,c=this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?r<this.getScrollOffset()+this.scrollAdjustments&&(!this.itemSizeCache.has(i)||this.scrollDirection!==`backward`):this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[e]??{index:e,key:i,start:r,size:n,end:r+n,lane:0},o,this));(this.pendingMin===null||e<this.pendingMin)&&(this.pendingMin=e),this.itemSizeCache.set(i,t),this.itemSizeCacheVersion++,a?this.applyScrollAdjustment(this.getTotalSize()-s):c&&this.applyScrollAdjustment(o),this.notify(!1)}},this.getVirtualItems=h(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;r<i;r++){let i=t[e[r]];n.push(i)}return n},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._flatMeasurements,r=this.options.lanes===1&&n!=null;return g(t[M(0,t.length-1,r?e=>n[e*2]:e=>g(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(e=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=e,this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`)if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t];if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{let r=this.getOffsetForAlignment(e,t);this.scrollState={index:null,align:t,behavior:n,startedAt:this.now(),lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e;this.scrollState={index:null,align:`start`,behavior:t,startedAt:this.now(),lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:e=`auto`}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:`end`,behavior:e});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:e})},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._flatMeasurements;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}applyScrollAdjustment(e,t){e!==0&&(b()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=e:(this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=e,behavior:t}),this.scrollOffset!==null&&(this.scrollOffset+=this.scrollAdjustments,this.scrollAdjustments=0)))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&_(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},M=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(a<r)e=i+1;else if(a>r)t=i-1;else return i}return e>0?e-1:0};function N(e,t,n){let r=0;for(;r<=t;){let i=(r+t)/2|0,a=e[i*2];if(a<n)r=i+1;else if(a>n)t=i-1;else return i}return r>0?r-1:0}function P(e,t,n,r,i){let a=e.length-1;if(e.length<=r)return{startIndex:0,endIndex:a};if(r===1&&i!==null){let e=N(i,a,n),r=e,o=n+t;for(;r<a&&i[r*2]+i[r*2+1]<o;)r++;return{startIndex:e,endIndex:r}}let o=M(0,a,t=>e[t].start,n),s=o;if(r===1)for(;s<a&&e[s].end<n+t;)s++;else if(r>1){let i=Array(r).fill(0);for(;s<a&&i.some(e=>e<n+t);){let t=e[s];i[t.lane]=t.end,s++}let c=Array(r).fill(n+t);for(;o>=0&&c.some(e=>e>=n);){let t=e[o];c[t.lane]=t.start,o--}o=Math.max(0,o-o%r),s=Math.min(a,s+(r-1-s%r))}return{startIndex:o,endIndex:s}}var F=typeof document<`u`?p.useLayoutEffect:p.useEffect;function I({useFlushSync:e=!0,directDomUpdates:t=!1,directDomUpdatesMode:n=`transform`,...r}){let i=p.useReducer(e=>e+1,0)[1],a=p.useRef({enabled:t,mode:n,container:null,lastSize:null,lastPositions:new WeakMap,prevRange:null});a.current.enabled=t,a.current.mode=n;let o=e=>{let t=a.current;if(!t.enabled||!t.container)return;let n=e.getTotalSize();if(n!==t.lastSize){t.lastSize=n;let r=e.options.horizontal?`width`:`height`;t.container.style[r]=`${n}px`}let r=!!e.options.horizontal,i=t.mode===`transform`,o=r?`left`:`top`,s=e.options.scrollMargin,c=e.getVirtualItems();for(let n of c){let a=n.start-s,c=e.elementsCache.get(n.key);c&&t.lastPositions.get(c)!==a&&(t.lastPositions.set(c,a),i?c.style.transform=r?`translate3d(${a}px, 0, 0)`:`translate3d(0, ${a}px, 0)`:c.style[o]=`${a}px`)}},s={...r,onChange:(t,n)=>{var s;let c=a.current,l=!0;if(c.enabled){o(t);let e=t.range,n=c.prevRange;l=!n||n.isScrolling!==t.isScrolling||n.startIndex!==e?.startIndex||n.endIndex!==e?.endIndex,l&&(c.prevRange=e?{startIndex:e.startIndex,endIndex:e.endIndex,isScrolling:t.isScrolling}:null)}l&&(e&&n?(0,f.flushSync)(i):i()),(s=r.onChange)==null||s.call(r,t,n)}},[c]=p.useState(()=>{let e=new j(s);return Object.assign(e,{containerRef:t=>{let n=a.current;if(n.container=t,n.lastSize=null,t&&n.enabled){let r=e.getTotalSize();n.lastSize=r;let i=e.options.horizontal?`width`:`height`;t.style[i]=`${r}px`}}})});return c.setOptions(s),F(()=>c._didMount(),[]),F(()=>c._willUpdate()),F(()=>{o(c)}),c}function L(e){return I({observeElementRect:w,observeElementOffset:O,scrollToFn:A,...e})}var R=n();function z({content:e,onContentChange:t,wordWrap:n}){let r=(0,p.useMemo)(()=>s(e),[e]),[f,m]=(0,p.useState)(()=>r.rows),[h,g]=(0,p.useState)([]),_=(0,p.useRef)(null),v=(0,p.useRef)(!1);(0,p.useEffect)(()=>{if(v.current){v.current=!1;return}m(r.rows)},[r.rows]);let y=r.headers,b=(0,p.useCallback)((e,n,r)=>{m(i=>{let a=i.map((t,n)=>n===e?[...t]:t);return a[e][n]=r,v.current=!0,t(o(y,a)),a})},[y,t]),x=l({data:f,columns:(0,p.useMemo)(()=>y.map((e,t)=>({id:`col-${t}`,header:e||`Column ${t+1}`,accessorFn:e=>e[t]??``,cell:({row:e,getValue:r})=>(0,R.jsx)(B,{value:r(),onSave:n=>b(e.index,t,n),wordWrap:n}),size:150,minSize:80})),[y,b,n]),state:{sorting:h},onSortingChange:g,getCoreRowModel:u(),getSortedRowModel:c(),enableColumnResizing:!0,columnResizeMode:`onChange`}),{rows:S}=x.getRowModel(),C=L({count:S.length,getScrollElement:()=>_.current,estimateSize:()=>32,overscan:20});return y.length===0?(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`Empty CSV file`}):(0,R.jsx)(`div`,{ref:_,className:`flex-1 overflow-auto`,children:(0,R.jsxs)(`table`,{className:`w-full text-xs font-mono border-collapse`,children:[(0,R.jsx)(`thead`,{className:`sticky top-0 bg-background z-10 border-b border-border block`,children:x.getHeaderGroups().map(e=>(0,R.jsx)(`tr`,{className:`flex w-full`,children:e.headers.map(e=>(0,R.jsxs)(`th`,{className:`relative text-left px-2 py-1.5 font-medium text-muted-foreground select-none cursor-pointer hover:bg-muted/50 border-r border-border last:border-r-0`,style:{width:e.getSize(),minWidth:e.getSize()},onClick:e.column.getToggleSortingHandler(),children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,R.jsx)(`span`,{className:`truncate`,children:d(e.column.columnDef.header,e.getContext())}),e.column.getIsSorted()===`asc`&&(0,R.jsx)(i,{className:`size-3 shrink-0`}),e.column.getIsSorted()===`desc`&&(0,R.jsx)(a,{className:`size-3 shrink-0`})]}),(0,R.jsx)(`div`,{onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),onClick:e=>e.stopPropagation(),className:`absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-primary/50 active:bg-primary`})]},e.id))},e.id))}),(0,R.jsx)(`tbody`,{style:{height:C.getTotalSize(),position:`relative`,display:`block`},children:C.getVirtualItems().map(e=>{let t=S[e.index];return(0,R.jsx)(`tr`,{"data-index":e.index,ref:e=>C.measureElement(e),style:{position:`absolute`,top:0,left:0,width:`100%`,transform:`translateY(${e.start}px)`,display:`flex`},children:t.getVisibleCells().map(e=>(0,R.jsx)(`td`,{className:`px-2 py-1 border-b border-border/50 border-r border-r-border/30 last:border-r-0 ${n?`whitespace-pre-wrap break-words`:`truncate`}`,style:{width:e.column.getSize(),minWidth:e.column.getSize()},children:d(e.column.columnDef.cell,e.getContext())},e.id))},t.id)})})]})})}function B({value:e,onSave:t,wordWrap:n}){let[r,i]=(0,p.useState)(!1),[a,o]=(0,p.useState)(e),s=(0,p.useRef)(null),c=(0,p.useCallback)(e=>{e&&(e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`)},[]);return(0,p.useEffect)(()=>{r&&s.current&&(s.current.focus(),c(s.current))},[r,c]),r?(0,R.jsx)(`textarea`,{ref:s,className:`w-full bg-transparent outline-none border border-primary/50 rounded text-xs font-mono resize-none p-0.5`,style:{minHeight:a.includes(`
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import{ot as r}from"./vendor-ui-DMRGWRuc.js";import{bn as i,xn as a}from"./index-DMEso_fH.js";import{n as o,t as s}from"./csv-parser-BOlh-1bz.js";import{i as c,n as l,r as u,t as d}from"./lib-CvYn0SaB.js";var f=e(r(),1),p=e(t(),1);function m(e,t,n){let r=Array(e);return new Proxy(r,{get(r,i,a){if(typeof i==`string`){let a=i.charCodeAt(0);if(a>=48&&a<=57){let a=+i;if(Number.isInteger(a)&&a>=0&&a<e){let e=r[a];if(!e){let i=t[a*2];e=r[a]={index:a,key:n(a),start:i,size:t[a*2+1],end:i+t[a*2+1],lane:0}}return e}}if(i===`length`)return e}return Reflect.get(r,i,a)}})}function h(e,t,n){let r=n.initialDeps??[],i,a=!0;function o(){let o=e();return o.length!==r.length||o.some((e,t)=>r[t]!==e)?(r=o,i=t(...o),n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i):i}return o.updateDeps=e=>{r=e},o}function g(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var _=(e,t)=>Math.abs(e-t)<1.01,v=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},y,b=()=>{if(y!==void 0)return y;if(typeof navigator>`u`)return y=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return y=!0;let e=navigator.maxTouchPoints;return y=navigator.platform===`MacIntel`&&e!==void 0&&e>0},x=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},S=e=>e,C=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e<n;e++)r[e]=t+e;return r},w=(e,t)=>{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(x(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(x(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},T={passive:!0},E=typeof window>`u`?!0:`onscrollend`in window,D=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&E,o=0,s=a?null:v(i,()=>t(o,!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,T),a&&r.addEventListener(`scrollend`,u,T),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u)}},O=(e,t)=>D(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),k=(e,t,n)=>{if(n.options.useCachedMeasurements){let t=n.indexFromElement(e),r=n.options.getItemKey(t);return n.itemSizeCache.get(r)??n.options.estimateSize(t)}if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}if(!t){let t=n.indexFromElement(e),r=n.options.getItemKey(t),i=n.itemSizeCache.get(r);if(i!==void 0)return i}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},A=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})},j=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.pendingScrollAnchor=null,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(!t.isConnected){this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}return}this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:S,rangeExtractor:C,onChange:()=>{},measureElement:k,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,anchorTo:`start`,followOnAppend:!1,scrollEndThreshold:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`,useCachedMeasurements:!1};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}let n=this.options,r=null,i=null,a=!1;if(n!==void 0&&n.enabled&&t.enabled&&t.anchorTo===`end`&&this.scrollElement!==null){let e=n.count,o=t.count,s=this.getMeasurements(),c=e>0?s[0]?.key??n.getItemKey(0):null,l=e>0?s[e-1]?.key??n.getItemKey(e-1):null;if(o!==e||e>0&&o>0&&(t.getItemKey(0)!==c||t.getItemKey(o-1)!==l)){a=!0;let c=e>0?this.getVirtualItemForOffset(this.getScrollOffset())??s[0]:null;c&&(r=[c.key,this.getScrollOffset()-c.start]);let u=t.followOnAppend===!0?`auto`:t.followOnAppend||null;u&&o>e&&this.isAtEnd(n.scrollEndThreshold)&&(e===0||t.getItemKey(o-1)!==l)&&(i=u)}}this.options=t,a&&(this.pendingMin=0,this.itemSizeCacheVersion++);let o=!1,s=0;if(r&&this.scrollOffset!==null){let[e,t]=r,n=this.getMeasurements(),{count:i,getItemKey:a}=this.options,c=0;for(;c<i&&a(c)!==e;)c++;if(c<i){let e=n[c];if(e){let n=e.start+t;n!==this.scrollOffset&&(s=n-this.scrollOffset,this.scrollOffset=n,o=!0)}}}(o||i)&&(this.pendingScrollAnchor=[o?r[0]:null,o?r[1]:0,i,s])},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=h(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&`ownerDocument`in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{if(t&&this._intendedScrollOffset===null&&e===this.scrollOffset)return;this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0;let n=this.getScrollOffset();this.scrollDirection=t?n===e?this.scrollDirection:n<e?`forward`:`backward`:null,this.scrollOffset=e,this.isScrolling=t,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),`addEventListener`in this.scrollElement){let e=this.scrollElement,t=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!b()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,T),e.addEventListener(`touchend`,n,T),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}let t=this.pendingScrollAnchor;if(this.pendingScrollAnchor=null,t&&this.scrollElement&&this.options.enabled){let[e,n,r,i]=t;e!==null&&!r&&(b()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?i!==0&&(this._iosDeferredAdjustment+=i):this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})),r&&this.scrollToEnd({behavior:r})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let n=new Map,r=new Map;for(let i=t-1;i>=0;i--){let t=e[i];if(n.has(t.lane))continue;let a=r.get(t.lane);if(a==null||t.end>a.end?r.set(t.lane,t):t.end<a.end&&n.set(t.lane,!0),n.size===this.options.lanes)break}return r.size===this.options.lanes?Array.from(r.values()).sort((e,t)=>e.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=h(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,r,i,a,o)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o}),{key:!1}),this.getMeasurements=h(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o},s)=>{let c=this.itemSizeCache;if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let l=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=this.options.gap,a=e*2,o=this._flatMeasurements;if(!o||o.length<a){let e=new Float64Array(a);o&&l>0&&e.set(o.subarray(0,l*2)),o=e,this._flatMeasurements=o}let s;if(l===0)s=t+n;else{let e=l-1;s=o[e*2]+o[e*2+1]+i}for(let t=l;t<e;t++){let e=r(t),n=c.get(e),a=typeof n==`number`?n:this.options.estimateSize(t);o[t*2]=s,o[t*2+1]=a,s+=a+i}let u=m(e,o,r);return this.measurementsCache=u,u}let u=this.measurementsCache.slice(0,l),d=Array(a).fill(void 0);for(let e=0;e<l;e++){let t=u[e];t&&(d[t.lane]=e)}for(let i=l;i<e;i++){let e=r(i),a=this.laneAssignments.get(i),s,l,f=o===`estimate`||c.has(e);if(a!==void 0&&this.options.lanes>1){s=a;let e=d[s],r=e===void 0?void 0:u[e];l=r?r.end+this.options.gap:t+n}else{let e=this.options.lanes===1?u[i-1]:this.getFurthestMeasurement(u,i);l=e?e.end+this.options.gap:t+n,s=e?e.lane:i%this.options.lanes,this.options.lanes>1&&f&&this.laneAssignments.set(i,s)}let p=c.get(e),m=typeof p==`number`?p:this.options.estimateSize(i),h=l+m;u[i]={index:i,start:l,size:m,end:h,key:e,lane:s},d[s]=i}return this.measurementsCache=u,u},{key:!1,debug:()=>this.options.debug}),this.calculateRange=h(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>e.length===0||t===0?(this.range=null,null):(this.range=P(e,t,n,r,r===1&&this._flatMeasurements!=null?this._flatMeasurements:null),this.range),{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=h(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e),n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(e<0||e>=this.options.count)return;let n,r,i,a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=t-(this.itemSizeCache.get(i)??n);if(o!==0){let a=this.options.anchorTo===`end`&&this.scrollState?.behavior!==`smooth`&&this.getVirtualDistanceFromEnd()<=this.options.scrollEndThreshold,s=a?this.getTotalSize():0,c=this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?r<this.getScrollOffset()+this.scrollAdjustments&&(!this.itemSizeCache.has(i)||this.scrollDirection!==`backward`):this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[e]??{index:e,key:i,start:r,size:n,end:r+n,lane:0},o,this));(this.pendingMin===null||e<this.pendingMin)&&(this.pendingMin=e),this.itemSizeCache.set(i,t),this.itemSizeCacheVersion++,a?this.applyScrollAdjustment(this.getTotalSize()-s):c&&this.applyScrollAdjustment(o),this.notify(!1)}},this.getVirtualItems=h(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;r<i;r++){let i=t[e[r]];n.push(i)}return n},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._flatMeasurements,r=this.options.lanes===1&&n!=null;return g(t[M(0,t.length-1,r?e=>n[e*2]:e=>g(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getVirtualDistanceFromEnd=()=>Math.max(this.getTotalSize()-this.getSize()-this.getScrollOffset(),0),this.getDistanceFromEnd=()=>Math.max(this.getMaxScrollOffset()-this.getScrollOffset(),0),this.isAtEnd=(e=this.options.scrollEndThreshold)=>this.getDistanceFromEnd()<=e,this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`)if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t];if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{let r=this.getOffsetForAlignment(e,t);this.scrollState={index:null,align:t,behavior:n,startedAt:this.now(),lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e;this.scrollState={index:null,align:`start`,behavior:t,startedAt:this.now(),lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.scrollToEnd=({behavior:e=`auto`}={})=>{if(this.options.count>0){this.scrollToIndex(this.options.count-1,{align:`end`,behavior:e});return}this.scrollToOffset(Math.max(this.getTotalSize()-this.getSize(),0),{behavior:e})},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._flatMeasurements;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}applyScrollAdjustment(e,t){e!==0&&(b()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=e:(this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=e,behavior:t}),this.scrollOffset!==null&&(this.scrollOffset+=this.scrollAdjustments,this.scrollAdjustments=0)))}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&_(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},M=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(a<r)e=i+1;else if(a>r)t=i-1;else return i}return e>0?e-1:0};function N(e,t,n){let r=0;for(;r<=t;){let i=(r+t)/2|0,a=e[i*2];if(a<n)r=i+1;else if(a>n)t=i-1;else return i}return r>0?r-1:0}function P(e,t,n,r,i){let a=e.length-1;if(e.length<=r)return{startIndex:0,endIndex:a};if(r===1&&i!==null){let e=N(i,a,n),r=e,o=n+t;for(;r<a&&i[r*2]+i[r*2+1]<o;)r++;return{startIndex:e,endIndex:r}}let o=M(0,a,t=>e[t].start,n),s=o;if(r===1)for(;s<a&&e[s].end<n+t;)s++;else if(r>1){let i=Array(r).fill(0);for(;s<a&&i.some(e=>e<n+t);){let t=e[s];i[t.lane]=t.end,s++}let c=Array(r).fill(n+t);for(;o>=0&&c.some(e=>e>=n);){let t=e[o];c[t.lane]=t.start,o--}o=Math.max(0,o-o%r),s=Math.min(a,s+(r-1-s%r))}return{startIndex:o,endIndex:s}}var F=typeof document<`u`?p.useLayoutEffect:p.useEffect;function I({useFlushSync:e=!0,directDomUpdates:t=!1,directDomUpdatesMode:n=`transform`,...r}){let i=p.useReducer(e=>e+1,0)[1],a=p.useRef({enabled:t,mode:n,container:null,lastSize:null,lastPositions:new WeakMap,prevRange:null});a.current.enabled=t,a.current.mode=n;let o=e=>{let t=a.current;if(!t.enabled||!t.container)return;let n=e.getTotalSize();if(n!==t.lastSize){t.lastSize=n;let r=e.options.horizontal?`width`:`height`;t.container.style[r]=`${n}px`}let r=!!e.options.horizontal,i=t.mode===`transform`,o=r?`left`:`top`,s=e.options.scrollMargin,c=e.getVirtualItems();for(let n of c){let a=n.start-s,c=e.elementsCache.get(n.key);c&&t.lastPositions.get(c)!==a&&(t.lastPositions.set(c,a),i?c.style.transform=r?`translate3d(${a}px, 0, 0)`:`translate3d(0, ${a}px, 0)`:c.style[o]=`${a}px`)}},s={...r,onChange:(t,n)=>{var s;let c=a.current,l=!0;if(c.enabled){o(t);let e=t.range,n=c.prevRange;l=!n||n.isScrolling!==t.isScrolling||n.startIndex!==e?.startIndex||n.endIndex!==e?.endIndex,l&&(c.prevRange=e?{startIndex:e.startIndex,endIndex:e.endIndex,isScrolling:t.isScrolling}:null)}l&&(e&&n?(0,f.flushSync)(i):i()),(s=r.onChange)==null||s.call(r,t,n)}},[c]=p.useState(()=>{let e=new j(s);return Object.assign(e,{containerRef:t=>{let n=a.current;if(n.container=t,n.lastSize=null,t&&n.enabled){let r=e.getTotalSize();n.lastSize=r;let i=e.options.horizontal?`width`:`height`;t.style[i]=`${r}px`}}})});return c.setOptions(s),F(()=>c._didMount(),[]),F(()=>c._willUpdate()),F(()=>{o(c)}),c}function L(e){return I({observeElementRect:w,observeElementOffset:O,scrollToFn:A,...e})}var R=n();function z({content:e,onContentChange:t,wordWrap:n}){let r=(0,p.useMemo)(()=>s(e),[e]),[f,m]=(0,p.useState)(()=>r.rows),[h,g]=(0,p.useState)([]),_=(0,p.useRef)(null),v=(0,p.useRef)(!1);(0,p.useEffect)(()=>{if(v.current){v.current=!1;return}m(r.rows)},[r.rows]);let y=r.headers,b=(0,p.useCallback)((e,n,r)=>{m(i=>{let a=i.map((t,n)=>n===e?[...t]:t);return a[e][n]=r,v.current=!0,t(o(y,a)),a})},[y,t]),x=l({data:f,columns:(0,p.useMemo)(()=>y.map((e,t)=>({id:`col-${t}`,header:e||`Column ${t+1}`,accessorFn:e=>e[t]??``,cell:({row:e,getValue:r})=>(0,R.jsx)(B,{value:r(),onSave:n=>b(e.index,t,n),wordWrap:n}),size:150,minSize:80})),[y,b,n]),state:{sorting:h},onSortingChange:g,getCoreRowModel:u(),getSortedRowModel:c(),enableColumnResizing:!0,columnResizeMode:`onChange`}),{rows:S}=x.getRowModel(),C=L({count:S.length,getScrollElement:()=>_.current,estimateSize:()=>32,overscan:20});return y.length===0?(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`Empty CSV file`}):(0,R.jsx)(`div`,{ref:_,className:`flex-1 overflow-auto`,children:(0,R.jsxs)(`table`,{className:`w-full text-xs font-mono border-collapse`,children:[(0,R.jsx)(`thead`,{className:`sticky top-0 bg-background z-10 border-b border-border block`,children:x.getHeaderGroups().map(e=>(0,R.jsx)(`tr`,{className:`flex w-full`,children:e.headers.map(e=>(0,R.jsxs)(`th`,{className:`relative text-left px-2 py-1.5 font-medium text-muted-foreground select-none cursor-pointer hover:bg-muted/50 border-r border-border last:border-r-0`,style:{width:e.getSize(),minWidth:e.getSize()},onClick:e.column.getToggleSortingHandler(),children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,R.jsx)(`span`,{className:`truncate`,children:d(e.column.columnDef.header,e.getContext())}),e.column.getIsSorted()===`asc`&&(0,R.jsx)(i,{className:`size-3 shrink-0`}),e.column.getIsSorted()===`desc`&&(0,R.jsx)(a,{className:`size-3 shrink-0`})]}),(0,R.jsx)(`div`,{onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),onClick:e=>e.stopPropagation(),className:`absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-primary/50 active:bg-primary`})]},e.id))},e.id))}),(0,R.jsx)(`tbody`,{style:{height:C.getTotalSize(),position:`relative`,display:`block`},children:C.getVirtualItems().map(e=>{let t=S[e.index];return(0,R.jsx)(`tr`,{"data-index":e.index,ref:e=>C.measureElement(e),style:{position:`absolute`,top:0,left:0,width:`100%`,transform:`translateY(${e.start}px)`,display:`flex`},children:t.getVisibleCells().map(e=>(0,R.jsx)(`td`,{className:`px-2 py-1 border-b border-border/50 border-r border-r-border/30 last:border-r-0 ${n?`whitespace-pre-wrap break-words`:`truncate`}`,style:{width:e.column.getSize(),minWidth:e.column.getSize()},children:d(e.column.columnDef.cell,e.getContext())},e.id))},t.id)})})]})})}function B({value:e,onSave:t,wordWrap:n}){let[r,i]=(0,p.useState)(!1),[a,o]=(0,p.useState)(e),s=(0,p.useRef)(null),c=(0,p.useCallback)(e=>{e&&(e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`)},[]);return(0,p.useEffect)(()=>{r&&s.current&&(s.current.focus(),c(s.current))},[r,c]),r?(0,R.jsx)(`textarea`,{ref:s,className:`w-full bg-transparent outline-none border border-primary/50 rounded text-xs font-mono resize-none p-0.5`,style:{minHeight:a.includes(`
|
|
2
2
|
`)?48:20},rows:1,value:a,onChange:e=>{o(e.target.value),c(e.target)},onBlur:()=>{i(!1),a!==e&&t(a)},onKeyDown:n=>{n.key===`Enter`&&!n.shiftKey?(n.preventDefault(),i(!1),a!==e&&t(a)):n.key===`Escape`&&(i(!1),o(e))}}):(0,R.jsx)(`span`,{className:`block cursor-text ${n?`whitespace-pre-wrap break-words`:`truncate`}`,onClick:()=>{o(e),i(!0)},children:e||`\xA0`})}export{z as CsvPreview};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t as r}from"./database-COYAMZaw.js";import{n as i,t as a}from"./glide-data-grid-BmofPEFh.js";import{t as o}from"./shield-check-C3qYSU8a.js";import{t as s}from"./shield-off-D5tU7gQT.js";import{o as c,t as l}from"./api-client-DhXpjLdi.js";import"./vendor-mermaid-CYOBtZtD.js";import"./settings-store-C7VeYnhf.js";import"./panel-store-DsDZX8Mi.js";import{t as u}from"./tab-store-ByORqglW.js";import{A as d,Vt as f,Zt as p,en as m}from"./index-D6qn4rtk.js";import"./data-grid-types-BuMHLKXV.js";import"./use-monaco-theme-D6Z2faTR.js";import{t as h}from"./sql-query-editor-D9pM_Dys.js";var g=e(t(),1);function _(e,t,n,r){return`ppm-db-${e}-${n}.${t}-p${r}`}function v(e,t,n,r){try{let i=sessionStorage.getItem(_(e,t,n,r));return i?JSON.parse(i):null}catch{return null}}function y(e,t,n,r,i,a){try{sessionStorage.setItem(_(e,t,n,r),JSON.stringify({data:i,cols:a}))}catch{}}function b(e){let t=`/api/db/connections/${e}`,[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(`public`),[o,s]=(0,g.useState)(null),[u,d]=(0,g.useState)([]),[f,p]=(0,g.useState)(!1),[m,h]=(0,g.useState)(null),[_,b]=(0,g.useState)(1),[x,S]=(0,g.useState)(null),[C,w]=(0,g.useState)(null),[T,E]=(0,g.useState)(!1),[D,O]=(0,g.useState)(null),[k,A]=(0,g.useState)(`ASC`),j=(0,g.useRef)(null),M=(0,g.useCallback)(async(r,a,o,c,u)=>{let f=r??n,m=a??i;if(!f)return;j.current=null,p(!0);let g=c===void 0?D:c,v=u??k;try{let n=g?`&orderBy=${encodeURIComponent(g)}&orderDir=${v}`:``,[r,i]=await Promise.all([l.get(`${t}/data?table=${encodeURIComponent(f)}&schema=${m}&page=${o??_}&limit=100${n}`),l.get(`${t}/schema?table=${encodeURIComponent(f)}&schema=${m}`)]);s(r),d(i),y(e,f,m,o??_,r,i)}catch(e){h(e.message)}finally{p(!1)}},[t,e,n,i,_,D,k]),N=(0,g.useCallback)((t,n=`public`)=>{r(t),a(n),b(1),S(null);let i=v(e,t,n,1);i?(s(i.data),d(i.cols),p(!1),M(t,n,1)):M(t,n,1)},[e,M]),P=(0,g.useCallback)(e=>{b(e),M(void 0,void 0,e)},[M]),F=(0,g.useCallback)(async e=>{j.current={sql:e,mode:`table`},p(!0);try{let n=await l.post(`${t}/query`,{sql:e,source:`filter`});n.changeType===`select`&&s({columns:n.columns,rows:n.rows,total:n.rows.length,page:1,limit:n.rows.length})}catch(e){h(e.message)}finally{p(!1)}},[t]),I=(0,g.useCallback)(async e=>{E(!0),w(null);try{let r=await l.post(`${t}/query`,{sql:e});S(r),r.changeType===`modify`?(j.current=null,M(n??void 0,i)):j.current={sql:e,mode:`query`}}catch(e){w(e.message)}finally{E(!1)}},[t,n,i,M]),L=(0,g.useCallback)((e,t)=>{let n=j.current;if(n?.mode===`table`){F(n.sql);return}M(e,t)},[F,M]),R=(0,g.useCallback)((e,t)=>{let n=t.message;h(n),c.error(`${e} failed`,{description:n})},[]),z=(0,g.useCallback)(async(e,r,a,o)=>{if(!n)return;let s=n,c=i;try{await l.put(`${t}/cell`,{table:s,schema:c,pkColumn:e,pkValue:r,column:a,value:o}),L(s,c)}catch(e){R(`Update cell`,e)}},[t,n,i,L,R]),B=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.del(`${t}/row`,{table:a,schema:o,pkColumn:e,pkValue:r}),L(a,o)}catch(e){R(`Delete row`,e)}},[t,n,i,L,R]);return{selectedTable:n,selectedSchema:i,selectTable:N,tableData:o,schema:u,loading:f,error:m,page:_,setPage:P,orderBy:D,orderDir:k,toggleSort:(0,g.useCallback)(e=>{let t,n=`ASC`;D===e?k===`ASC`?(t=e,n=`DESC`):(t=null,n=`ASC`):(t=e,n=`ASC`),O(t),A(n),b(1),M(void 0,void 0,1,t,n)},[D,k,M]),clearSort:(0,g.useCallback)(()=>{O(null),A(`ASC`),b(1),M(void 0,void 0,1,null,`ASC`)},[M]),queryResult:x,queryError:C,queryLoading:T,executeQuery:I,updateCell:z,deleteRow:B,bulkDelete:(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.post(`${t}/rows/delete`,{table:a,schema:o,pkColumn:e,pkValues:r}),L(a,o)}catch(e){R(`Delete rows`,e)}},[t,n,i,L,R]),insertRow:(0,g.useCallback)(async e=>{if(!n)return;let r=n,a=i;try{await l.post(`${t}/row`,{table:r,schema:a,values:e}),L(r,a)}catch(e){throw R(`Insert row`,e),e}},[t,n,i,L,R]),refreshData:M,queryAsTable:F,reload:(0,g.useCallback)(()=>{let e=j.current;if(e?.mode===`query`){I(e.sql);return}if(e?.mode===`table`){F(e.sql);return}M()},[I,F,M])}}var x=n();function S(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 C({metadata:e,tabId:t}){let n=e?.connectionId,c=e?.connectionName,_=e?.tableName,v=e?.schemaName??`public`,y=e?.initialSql,C=e?.currentSql,w=u(e=>e.updateTab),E=(0,g.useRef)(e);E.current=e;let D=(0,g.useCallback)(e=>{t&&w(t,{metadata:{...E.current,currentSql:e}})},[t,w]),O=b(n),{connections:k,updateConnection:A}=d(),j=(0,g.useMemo)(()=>k.find(e=>e.id===n),[k,n]),[M,N]=(0,g.useState)([]),[P,F]=(0,g.useState)(180),I=(0,g.useRef)(null),[L,R]=(0,g.useState)({}),z=(0,g.useMemo)(()=>{if(y&&!O.selectedTable)return y;if(O.selectedTable){let e=`SELECT * FROM "${O.selectedTable}"`,t=Object.entries(L).filter(([,e])=>e.trim()).map(([e,t])=>`"${e}" ILIKE '%${t.replace(/'/g,`''`)}%'`);t.length>0&&(e+=` WHERE ${t.join(` AND `)}`),O.orderBy&&(e+=` ORDER BY "${O.orderBy}" ${O.orderDir}`);let n=(O.page-1)*100;return e+=` LIMIT 100`,n>0&&(e+=` OFFSET ${n}`),e}return`SELECT * FROM `},[y,O.selectedTable,O.orderBy,O.orderDir,O.page,L]),B=(0,g.useCallback)(e=>{R(e)},[]),V=(0,g.useRef)(void 0),H=(0,g.useRef)(!1);(0,g.useEffect)(()=>{if(!O.selectedTable)return;let e=Object.values(L).some(e=>e.trim());if(!(!e&&!H.current))return H.current=e,clearTimeout(V.current),V.current=setTimeout(()=>{e?O.queryAsTable(z):O.refreshData()},500),()=>clearTimeout(V.current)},[L]);let U=(0,g.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=P,r=e=>{let r=e.clientY-t;F(Math.max(80,Math.min(n+r,(I.current?.clientHeight??600)-100)))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[P]);(0,g.useEffect)(()=>{l.get(`/api/db/connections/${n}/tables?cached=1`).then(e=>N(e.map(e=>({name:e.name,schema:e.schema})))).catch(()=>{})},[n]);let W=(0,g.useMemo)(()=>{if(M.length!==0)return{tables:M,getColumns:async(e,t)=>await l.get(`/api/db/connections/${n}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[n,M]),G=(0,g.useRef)(!1);(0,g.useEffect)(()=>{G.current||(G.current=!0,y?O.executeQuery(y):_&&O.selectTable(_,v))},[_,v,y]);let[K,q]=(0,g.useState)(!!y),J=(0,g.useCallback)(e=>{let t=e.trim();if(O.selectedTable&&RegExp(`^SELECT\\s+\\*\\s+FROM\\s+"?${O.selectedTable.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}"?\\b`,`i`).test(t)){R(S(t)),O.queryAsTable(t);return}q(!0),O.executeQuery(e)},[O.executeQuery,O.queryAsTable,O.selectedTable]),Y=(0,g.useCallback)(e=>{q(!1),O.toggleSort(e)},[O.toggleSort]),X=(0,g.useCallback)(()=>{q(!1),O.clearSort()},[O.clearSort]),ee=(0,g.useCallback)(e=>{q(!1),O.setPage(e)},[O.setPage]),Z=O.queryResult,Q=K&&!!(Z||O.queryError),$=O.selectedTable&&!Q,te=!($&&O.tableData)&&!Q&&(O.loading||O.queryLoading);return(0,x.jsx)(`div`,{ref:I,className:`flex h-full w-full overflow-hidden`,children:(0,x.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,x.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,x.jsx)(r,{className:`size-3.5 text-muted-foreground`}),(0,x.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:c??`Database`}),O.selectedTable&&(0,x.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`/ `,O.selectedTable]}),(0,x.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[O.tableData&&(0,x.jsx)(i,{columns:O.tableData.columns,rows:O.tableData.rows,filename:c?`${c}-${O.selectedTable??`data`}`:O.selectedTable??`data`,exportAllUrl:O.selectedTable?`/api/db/connections/${n}/export?table=${encodeURIComponent(O.selectedTable)}&schema=${O.selectedSchema}`:void 0}),j&&(0,x.jsx)(`button`,{type:`button`,onClick:()=>A(j.id,{readonly:j.readonly?0:1}),className:`flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] transition-colors ${j.readonly?`text-muted-foreground hover:text-foreground`:`bg-destructive/15 text-destructive`}`,title:j.readonly?`Readonly — click to allow writes`:`WRITE mode — click to enable readonly`,children:j.readonly?(0,x.jsx)(o,{className:`size-3`}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{className:`size-3`}),(0,x.jsx)(`span`,{className:`font-medium`,children:`WRITE`})]})}),(0,x.jsx)(`button`,{type:`button`,onClick:()=>O.reload(),title:`Reload data`,className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,x.jsx)(f,{className:`size-3 ${O.loading||O.queryLoading?`animate-spin`:``}`})})]})]}),(0,x.jsx)(`div`,{className:`shrink-0 border-b border-border`,style:{height:P},children:(0,x.jsx)(h,{onExecute:J,loading:O.queryLoading,defaultValue:z,schemaInfo:W,onSqlChange:D,persistedSql:C})}),(0,x.jsx)(`div`,{onMouseDown:U,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,x.jsx)(m,{className:`size-3 text-muted-foreground/50`})}),(0,x.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[$&&O.tableData&&(0,x.jsx)(a,{columns:O.tableData.columns,rows:O.tableData.rows,total:O.tableData.total,limit:O.tableData.limit,schema:O.schema,loading:O.loading,page:O.page,onPageChange:ee,onCellUpdate:O.updateCell,onRowDelete:O.deleteRow,orderBy:O.orderBy,orderDir:O.orderDir,onToggleSort:Y,onClearSort:X,onBulkDelete:O.bulkDelete,onInsertRow:O.insertRow,connectionId:n,selectedTable:O.selectedTable,selectedSchema:O.selectedSchema,connectionName:c,columnFilters:L,onColumnFilter:B}),Q&&(0,x.jsx)(T,{result:Z,error:O.queryError,loading:O.queryLoading,schema:O.schema,connectionName:c}),te&&(0,x.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:(0,x.jsx)(p,{className:`size-4 animate-spin`})})]})]})})}var w=()=>{};function T({result:e,error:t,loading:n,schema:r,connectionName:i}){let o=(0,g.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,g.useMemo)(()=>r?.length?r:(e?.columns??[]).map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null})),[r,e?.columns]);return(0,x.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden text-xs`,children:[t&&(0,x.jsx)(`div`,{className:`px-3 py-2 text-destructive bg-destructive/5 shrink-0`,children:t}),e?.changeType===`modify`&&(0,x.jsxs)(`div`,{className:`px-3 py-2 text-success shrink-0`,children:[e.rowsAffected,` row(s) affected`,e.executionTimeMs!=null&&(0,x.jsxs)(`span`,{className:`text-muted-foreground ml-2`,children:[e.executionTimeMs,`ms`]})]}),o&&(0,x.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[(0,x.jsx)(a,{columns:o.columns,rows:o.rows,total:o.total,limit:o.limit,schema:s,loading:!!n,page:1,onPageChange:w,onCellUpdate:w,orderBy:null,orderDir:`ASC`,onToggleSort:w,connectionName:i}),e?.executionTimeMs!=null&&(0,x.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,x.jsxs)(`div`,{className:`px-3 py-2 text-muted-foreground shrink-0`,children:[`No results`,e.executionTimeMs!=null&&(0,x.jsxs)(`span`,{className:`ml-2 text-muted-foreground/60`,children:[e.executionTimeMs,`ms`]})]}),!e&&!t&&(0,x.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:n?(0,x.jsx)(p,{className:`size-4 animate-spin`}):`Run a query to see results`})]})}export{C as DatabaseViewer};
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t as r}from"./database-COYAMZaw.js";import{n as i,t as a}from"./glide-data-grid-BTbN5x8y.js";import{t as o}from"./shield-check-C3qYSU8a.js";import{t as s}from"./shield-off-D5tU7gQT.js";import{o as c,t as l}from"./api-client-DhXpjLdi.js";import"./vendor-mermaid-CYOBtZtD.js";import"./settings-store-UwT_fNhg.js";import"./panel-store-DsDZX8Mi.js";import{t as u}from"./tab-store-ByORqglW.js";import{A as d,Vt as f,Zt as p,en as m}from"./index-DMEso_fH.js";import"./data-grid-types-BuMHLKXV.js";import"./use-monaco-theme-XO5ZyYBW.js";import{t as h}from"./sql-query-editor-Qrom7wG2.js";var g=e(t(),1);function _(e,t,n,r){return`ppm-db-${e}-${n}.${t}-p${r}`}function v(e,t,n,r){try{let i=sessionStorage.getItem(_(e,t,n,r));return i?JSON.parse(i):null}catch{return null}}function y(e,t,n,r,i,a){try{sessionStorage.setItem(_(e,t,n,r),JSON.stringify({data:i,cols:a}))}catch{}}function b(e){let t=`/api/db/connections/${e}`,[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(`public`),[o,s]=(0,g.useState)(null),[u,d]=(0,g.useState)([]),[f,p]=(0,g.useState)(!1),[m,h]=(0,g.useState)(null),[_,b]=(0,g.useState)(1),[x,S]=(0,g.useState)(null),[C,w]=(0,g.useState)(null),[T,E]=(0,g.useState)(!1),[D,O]=(0,g.useState)(null),[k,A]=(0,g.useState)(`ASC`),j=(0,g.useRef)(null),M=(0,g.useCallback)(async(r,a,o,c,u)=>{let f=r??n,m=a??i;if(!f)return;j.current=null,p(!0);let g=c===void 0?D:c,v=u??k;try{let n=g?`&orderBy=${encodeURIComponent(g)}&orderDir=${v}`:``,[r,i]=await Promise.all([l.get(`${t}/data?table=${encodeURIComponent(f)}&schema=${m}&page=${o??_}&limit=100${n}`),l.get(`${t}/schema?table=${encodeURIComponent(f)}&schema=${m}`)]);s(r),d(i),y(e,f,m,o??_,r,i)}catch(e){h(e.message)}finally{p(!1)}},[t,e,n,i,_,D,k]),N=(0,g.useCallback)((t,n=`public`)=>{r(t),a(n),b(1),S(null);let i=v(e,t,n,1);i?(s(i.data),d(i.cols),p(!1),M(t,n,1)):M(t,n,1)},[e,M]),P=(0,g.useCallback)(e=>{b(e),M(void 0,void 0,e)},[M]),F=(0,g.useCallback)(async e=>{j.current={sql:e,mode:`table`},p(!0);try{let n=await l.post(`${t}/query`,{sql:e,source:`filter`});n.changeType===`select`&&s({columns:n.columns,rows:n.rows,total:n.rows.length,page:1,limit:n.rows.length})}catch(e){h(e.message)}finally{p(!1)}},[t]),I=(0,g.useCallback)(async e=>{E(!0),w(null);try{let r=await l.post(`${t}/query`,{sql:e});S(r),r.changeType===`modify`?(j.current=null,M(n??void 0,i)):j.current={sql:e,mode:`query`}}catch(e){w(e.message)}finally{E(!1)}},[t,n,i,M]),L=(0,g.useCallback)((e,t)=>{let n=j.current;if(n?.mode===`table`){F(n.sql);return}M(e,t)},[F,M]),R=(0,g.useCallback)((e,t)=>{let n=t.message;h(n),c.error(`${e} failed`,{description:n})},[]),z=(0,g.useCallback)(async(e,r,a,o)=>{if(!n)return;let s=n,c=i;try{await l.put(`${t}/cell`,{table:s,schema:c,pkColumn:e,pkValue:r,column:a,value:o}),L(s,c)}catch(e){R(`Update cell`,e)}},[t,n,i,L,R]),B=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.del(`${t}/row`,{table:a,schema:o,pkColumn:e,pkValue:r}),L(a,o)}catch(e){R(`Delete row`,e)}},[t,n,i,L,R]);return{selectedTable:n,selectedSchema:i,selectTable:N,tableData:o,schema:u,loading:f,error:m,page:_,setPage:P,orderBy:D,orderDir:k,toggleSort:(0,g.useCallback)(e=>{let t,n=`ASC`;D===e?k===`ASC`?(t=e,n=`DESC`):(t=null,n=`ASC`):(t=e,n=`ASC`),O(t),A(n),b(1),M(void 0,void 0,1,t,n)},[D,k,M]),clearSort:(0,g.useCallback)(()=>{O(null),A(`ASC`),b(1),M(void 0,void 0,1,null,`ASC`)},[M]),queryResult:x,queryError:C,queryLoading:T,executeQuery:I,updateCell:z,deleteRow:B,bulkDelete:(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.post(`${t}/rows/delete`,{table:a,schema:o,pkColumn:e,pkValues:r}),L(a,o)}catch(e){R(`Delete rows`,e)}},[t,n,i,L,R]),insertRow:(0,g.useCallback)(async e=>{if(!n)return;let r=n,a=i;try{await l.post(`${t}/row`,{table:r,schema:a,values:e}),L(r,a)}catch(e){throw R(`Insert row`,e),e}},[t,n,i,L,R]),refreshData:M,queryAsTable:F,reload:(0,g.useCallback)(()=>{let e=j.current;if(e?.mode===`query`){I(e.sql);return}if(e?.mode===`table`){F(e.sql);return}M()},[I,F,M])}}var x=n();function S(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 C({metadata:e,tabId:t}){let n=e?.connectionId,c=e?.connectionName,_=e?.tableName,v=e?.schemaName??`public`,y=e?.initialSql,C=e?.currentSql,w=u(e=>e.updateTab),E=(0,g.useRef)(e);E.current=e;let D=(0,g.useCallback)(e=>{t&&w(t,{metadata:{...E.current,currentSql:e}})},[t,w]),O=b(n),{connections:k,updateConnection:A}=d(),j=(0,g.useMemo)(()=>k.find(e=>e.id===n),[k,n]),[M,N]=(0,g.useState)([]),[P,F]=(0,g.useState)(180),I=(0,g.useRef)(null),[L,R]=(0,g.useState)({}),z=(0,g.useMemo)(()=>{if(y&&!O.selectedTable)return y;if(O.selectedTable){let e=`SELECT * FROM "${O.selectedTable}"`,t=Object.entries(L).filter(([,e])=>e.trim()).map(([e,t])=>`"${e}" ILIKE '%${t.replace(/'/g,`''`)}%'`);t.length>0&&(e+=` WHERE ${t.join(` AND `)}`),O.orderBy&&(e+=` ORDER BY "${O.orderBy}" ${O.orderDir}`);let n=(O.page-1)*100;return e+=` LIMIT 100`,n>0&&(e+=` OFFSET ${n}`),e}return`SELECT * FROM `},[y,O.selectedTable,O.orderBy,O.orderDir,O.page,L]),B=(0,g.useCallback)(e=>{R(e)},[]),V=(0,g.useRef)(void 0),H=(0,g.useRef)(!1);(0,g.useEffect)(()=>{if(!O.selectedTable)return;let e=Object.values(L).some(e=>e.trim());if(!(!e&&!H.current))return H.current=e,clearTimeout(V.current),V.current=setTimeout(()=>{e?O.queryAsTable(z):O.refreshData()},500),()=>clearTimeout(V.current)},[L]);let U=(0,g.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=P,r=e=>{let r=e.clientY-t;F(Math.max(80,Math.min(n+r,(I.current?.clientHeight??600)-100)))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[P]);(0,g.useEffect)(()=>{l.get(`/api/db/connections/${n}/tables?cached=1`).then(e=>N(e.map(e=>({name:e.name,schema:e.schema})))).catch(()=>{})},[n]);let W=(0,g.useMemo)(()=>{if(M.length!==0)return{tables:M,getColumns:async(e,t)=>await l.get(`/api/db/connections/${n}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[n,M]),G=(0,g.useRef)(!1);(0,g.useEffect)(()=>{G.current||(G.current=!0,y?O.executeQuery(y):_&&O.selectTable(_,v))},[_,v,y]);let[K,q]=(0,g.useState)(!!y),J=(0,g.useCallback)(e=>{let t=e.trim();if(O.selectedTable&&RegExp(`^SELECT\\s+\\*\\s+FROM\\s+"?${O.selectedTable.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}"?\\b`,`i`).test(t)){R(S(t)),O.queryAsTable(t);return}q(!0),O.executeQuery(e)},[O.executeQuery,O.queryAsTable,O.selectedTable]),Y=(0,g.useCallback)(e=>{q(!1),O.toggleSort(e)},[O.toggleSort]),X=(0,g.useCallback)(()=>{q(!1),O.clearSort()},[O.clearSort]),ee=(0,g.useCallback)(e=>{q(!1),O.setPage(e)},[O.setPage]),Z=O.queryResult,Q=K&&!!(Z||O.queryError),$=O.selectedTable&&!Q,te=!($&&O.tableData)&&!Q&&(O.loading||O.queryLoading);return(0,x.jsx)(`div`,{ref:I,className:`flex h-full w-full overflow-hidden`,children:(0,x.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,x.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,x.jsx)(r,{className:`size-3.5 text-muted-foreground`}),(0,x.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:c??`Database`}),O.selectedTable&&(0,x.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`/ `,O.selectedTable]}),(0,x.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[O.tableData&&(0,x.jsx)(i,{columns:O.tableData.columns,rows:O.tableData.rows,filename:c?`${c}-${O.selectedTable??`data`}`:O.selectedTable??`data`,exportAllUrl:O.selectedTable?`/api/db/connections/${n}/export?table=${encodeURIComponent(O.selectedTable)}&schema=${O.selectedSchema}`:void 0}),j&&(0,x.jsx)(`button`,{type:`button`,onClick:()=>A(j.id,{readonly:j.readonly?0:1}),className:`flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] transition-colors ${j.readonly?`text-muted-foreground hover:text-foreground`:`bg-destructive/15 text-destructive`}`,title:j.readonly?`Readonly — click to allow writes`:`WRITE mode — click to enable readonly`,children:j.readonly?(0,x.jsx)(o,{className:`size-3`}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{className:`size-3`}),(0,x.jsx)(`span`,{className:`font-medium`,children:`WRITE`})]})}),(0,x.jsx)(`button`,{type:`button`,onClick:()=>O.reload(),title:`Reload data`,className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,x.jsx)(f,{className:`size-3 ${O.loading||O.queryLoading?`animate-spin`:``}`})})]})]}),(0,x.jsx)(`div`,{className:`shrink-0 border-b border-border`,style:{height:P},children:(0,x.jsx)(h,{onExecute:J,loading:O.queryLoading,defaultValue:z,schemaInfo:W,onSqlChange:D,persistedSql:C})}),(0,x.jsx)(`div`,{onMouseDown:U,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,x.jsx)(m,{className:`size-3 text-muted-foreground/50`})}),(0,x.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[$&&O.tableData&&(0,x.jsx)(a,{columns:O.tableData.columns,rows:O.tableData.rows,total:O.tableData.total,limit:O.tableData.limit,schema:O.schema,loading:O.loading,page:O.page,onPageChange:ee,onCellUpdate:O.updateCell,onRowDelete:O.deleteRow,orderBy:O.orderBy,orderDir:O.orderDir,onToggleSort:Y,onClearSort:X,onBulkDelete:O.bulkDelete,onInsertRow:O.insertRow,connectionId:n,selectedTable:O.selectedTable,selectedSchema:O.selectedSchema,connectionName:c,columnFilters:L,onColumnFilter:B}),Q&&(0,x.jsx)(T,{result:Z,error:O.queryError,loading:O.queryLoading,schema:O.schema,connectionName:c}),te&&(0,x.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:(0,x.jsx)(p,{className:`size-4 animate-spin`})})]})]})})}var w=()=>{};function T({result:e,error:t,loading:n,schema:r,connectionName:i}){let o=(0,g.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,g.useMemo)(()=>r?.length?r:(e?.columns??[]).map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null})),[r,e?.columns]);return(0,x.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden text-xs`,children:[t&&(0,x.jsx)(`div`,{className:`px-3 py-2 text-destructive bg-destructive/5 shrink-0`,children:t}),e?.changeType===`modify`&&(0,x.jsxs)(`div`,{className:`px-3 py-2 text-success shrink-0`,children:[e.rowsAffected,` row(s) affected`,e.executionTimeMs!=null&&(0,x.jsxs)(`span`,{className:`text-muted-foreground ml-2`,children:[e.executionTimeMs,`ms`]})]}),o&&(0,x.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[(0,x.jsx)(a,{columns:o.columns,rows:o.rows,total:o.total,limit:o.limit,schema:s,loading:!!n,page:1,onPageChange:w,onCellUpdate:w,orderBy:null,orderDir:`ASC`,onToggleSort:w,connectionName:i}),e?.executionTimeMs!=null&&(0,x.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,x.jsxs)(`div`,{className:`px-3 py-2 text-muted-foreground shrink-0`,children:[`No results`,e.executionTimeMs!=null&&(0,x.jsxs)(`span`,{className:`ml-2 text-muted-foreground/60`,children:[e.executionTimeMs,`ms`]})]}),!e&&!t&&(0,x.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:n?(0,x.jsx)(p,{className:`size-4 animate-spin`}):`Run a query to see results`})]})}export{C as DatabaseViewer};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{r,t as i}from"./api-client-DhXpjLdi.js";import"./vendor-mermaid-CYOBtZtD.js";import{t as a}from"./settings-store-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{r,t as i}from"./api-client-DhXpjLdi.js";import"./vendor-mermaid-CYOBtZtD.js";import{t as a}from"./settings-store-UwT_fNhg.js";import{J as o,Zt as s,jt as c,on as l,s as u}from"./index-DMEso_fH.js";import{t as d}from"./use-monaco-theme-XO5ZyYBW.js";var f=e(t(),1),p=n();function m(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 h({metadata:e}){let t=e?.filePath,n=e?.projectName,h=e?.ref1,_=e?.ref2,v=e?.file1,y=e?.file2,b=e?.original,x=e?.modified,S=b!=null||x!=null,C=!!(v&&y),[w,T]=(0,f.useState)(null),[E,D]=(0,f.useState)(null),[O,k]=(0,f.useState)(null),[A,j]=(0,f.useState)(!S),[M,N]=(0,f.useState)(null),{wordWrap:P,toggleWordWrap:F}=a(o(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap}))),I=d(),L=(0,f.useRef)(null),R=(0,f.useRef)(null),[z,B]=(0,f.useState)(!1),[V,H]=(0,f.useState)();(0,f.useEffect)(()=>{let e=L.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&H(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[A,M]),(0,f.useEffect)(()=>{if(S||!n)return;if(j(!0),N(null),k(null),D(null),T(null),v&&y){let e=new URLSearchParams({file1:v,file2:y});i.get(`${r(n)}/files/compare?${e}`).then(e=>{D(e),j(!1)}).catch(e=>{N(e instanceof Error?e.message:`Failed to compare files`),j(!1)});return}if(t){let e=new URLSearchParams({file:t});h&&e.set(`ref`,h),_&&e.set(`ref2`,_),i.get(`${r(n)}/git/file-full-diff?${e}`).then(e=>{k(e),j(!1)}).catch(e=>{N(e instanceof Error?e.message:`Failed to load diff`),j(!1)});return}let e;if(h||_){let t=new URLSearchParams;h&&t.set(`ref1`,h),_&&t.set(`ref2`,_),e=`${r(n)}/git/diff?${t}`}else e=`${r(n)}/git/diff`;i.get(e).then(e=>{T(e.diff),j(!1)}).catch(e=>{N(e instanceof Error?e.message:`Failed to load diff`),j(!1)})},[t,n,h,_,v,y,S]);let{original:U,modified:W}=(0,f.useMemo)(()=>S?{original:b??``,modified:x??``}:C&&E?E:O||(w?g(w):{original:``,modified:``}),[w,S,b,x,C,E,O]),G=(0,f.useMemo)(()=>{let e=t??y??v;return e?m(e):`plaintext`},[t,v,y]),K=typeof window<`u`&&window.innerWidth<768,q=!K;return(0,f.useEffect)(()=>{let e=R.current;if(!e)return;let t=K||P?`on`:`off`;e.updateOptions({diffWordWrap:t}),e.getOriginalEditor().updateOptions({wordWrapOverride2:t}),e.getModifiedEditor().updateOptions({wordWrapOverride2:t})},[P,K,z]),!n&&!S?(0,p.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`No project selected.`}):A?(0,p.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,p.jsx)(s,{className:`size-5 animate-spin`}),(0,p.jsx)(`span`,{className:`text-sm`,children:`Loading diff...`})]}):M?(0,p.jsx)(`div`,{className:`flex items-center justify-center h-full text-destructive text-sm`,children:M}):!S&&!C&&!O&&!U&&!W?(0,p.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-2 text-muted-foreground`,children:[(0,p.jsx)(l,{className:`size-8`}),(0,p.jsx)(`p`,{className:`text-sm`,children:`No content changes`}),t&&(0,p.jsx)(`p`,{className:`text-xs font-mono`,children:t})]}):(0,p.jsxs)(`div`,{className:`flex flex-col h-full`,children:[!K&&(0,p.jsx)(`div`,{className:`flex items-center justify-end gap-0.5 px-2 py-0.5 border-b border-border shrink-0`,children:(0,p.jsx)(`button`,{type:`button`,onClick:F,title:`Toggle word wrap`,className:`p-1 rounded hover:bg-muted transition-colors ${P?`bg-muted text-foreground`:``}`,children:(0,p.jsx)(c,{className:`size-3.5`})})}),(0,p.jsx)(`div`,{ref:L,className:`flex-1 overflow-hidden`,children:V&&V>0?(0,p.jsx)(u,{height:V,language:G,original:U,modified:W,theme:I,onMount:e=>{R.current=e,B(!0)},options:{fontSize:K?11:13,fontFamily:`Menlo, Monaco, Consolas, monospace`,diffWordWrap:K||P?`on`:`off`,renderSideBySide:q,useInlineViewWhenSpaceIsLimited:!1,readOnly:!0,automaticLayout:!0,scrollBeyondLastLine:!1},loading:(0,p.jsx)(s,{className:`size-5 animate-spin text-muted-foreground`})}):(0,p.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,p.jsx)(s,{className:`size-5 animate-spin text-muted-foreground`})})})]})}function g(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{h as DiffViewer};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t as r}from"./file-exclamation-point-DBEC-Kst.js";import{r as i,t as a}from"./api-client-DhXpjLdi.js";import{Zt as o}from"./index-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t as r}from"./file-exclamation-point-DBEC-Kst.js";import{r as i,t as a}from"./api-client-DhXpjLdi.js";import{Zt as o}from"./index-DMEso_fH.js";var s=e(t(),1),c=n();function l({filePath:e,projectName:t}){let[n,l]=(0,s.useState)(null),[u,d]=(0,s.useState)(!0),[f,p]=(0,s.useState)(null);return(0,s.useEffect)(()=>{d(!0),p(null);let n=/^(\/|[A-Za-z]:[/\\])/.test(e)?`/api/fs/docx-html?path=${encodeURIComponent(e)}`:`${i(t)}/files/docx-html?path=${encodeURIComponent(e)}`;a.get(n).then(e=>{l(e.html),d(!1)}).catch(e=>{p(e instanceof Error?e.message:`Failed to convert docx`),d(!1)})},[e,t]),(0,s.useEffect)(()=>{let n=n=>{let r=n.detail;if(r.projectName!==t||r.path!==e)return;let o=/^(\/|[A-Za-z]:[/\\])/.test(e)?`/api/fs/docx-html?path=${encodeURIComponent(e)}`:`${i(t)}/files/docx-html?path=${encodeURIComponent(e)}`;a.get(o).then(e=>l(e.html)).catch(()=>{})};return window.addEventListener(`file:changed`,n),()=>window.removeEventListener(`file:changed`,n)},[e,t]),u?(0,c.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-text-secondary`,children:[(0,c.jsx)(o,{className:`size-5 animate-spin`}),(0,c.jsx)(`span`,{className:`text-sm`,children:`Converting document...`})]}):f?(0,c.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,c.jsx)(r,{className:`size-10 text-text-subtle`}),(0,c.jsx)(`p`,{className:`text-sm`,children:`Failed to load document.`}),(0,c.jsx)(`p`,{className:`text-xs text-text-subtle`,children:f})]}):(0,c.jsx)(`div`,{className:`h-full overflow-auto bg-white dark:bg-bg`,children:(0,c.jsx)(`div`,{className:`docx-preview max-w-3xl mx-auto px-6 py-8 text-sm text-foreground leading-relaxed
|
|
2
2
|
[&_table]:border-collapse [&_table]:w-full [&_table]:my-3
|
|
3
3
|
[&_td]:border [&_td]:border-border [&_td]:px-2 [&_td]:py-1
|
|
4
4
|
[&_th]:border [&_th]:border-border [&_th]:px-2 [&_th]:py-1 [&_th]:font-semibold [&_th]:bg-muted/50
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{n as r}from"./api-client-DhXpjLdi.js";import{Zt as i,ot as a}from"./index-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{n as r}from"./api-client-DhXpjLdi.js";import{Zt as i,ot as a}from"./index-DMEso_fH.js";var o=e(t(),1),s=n(),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`,r=Object.values(e.webviewPanels).filter(e=>e.viewType===n||e.viewType===t);return r.find(e=>e.projectName&&e.projectName===c)??r.find(e=>!e.projectName||!c)}}),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,recovery:!0}}))}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,recovery:!0}}))}catch{}})()},[n,c]),S=(0,o.useRef)(null),C=(0,o.useRef)(n),w=(0,o.useRef)(c);return(0,o.useEffect)(()=>{S.current=m??null},[m]),(0,o.useEffect)(()=>{C.current=n},[n]),(0,o.useEffect)(()=>{w.current=c},[c]),(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,projectName:w.current}}))}},[]),(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-bg`,title:p.title},m)})}export{u as ExtensionWebview};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t as r}from"./createLucideIcon-ConhwJnb.js";import{r as i,t as a}from"./api-client-DhXpjLdi.js";import{n as o}from"./utils-E0yyGxXt.js";import{i as s}from"./project-store-C1jInVih.js";import{J as c,Pt as l,Vt as u,Zt as d,bn as f,tn as p,un as m,xn as h}from"./index-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t as r}from"./createLucideIcon-ConhwJnb.js";import{r as i,t as a}from"./api-client-DhXpjLdi.js";import{n as o}from"./utils-E0yyGxXt.js";import{i as s}from"./project-store-C1jInVih.js";import{J as c,Pt as l,Vt as u,Zt as d,bn as f,tn as p,un as m,xn as h}from"./index-DMEso_fH.js";var g=r(`cloud-off`,[[`path`,{d:`M10.94 5.274A7 7 0 0 1 15.71 10h1.79a4.5 4.5 0 0 1 4.222 6.057`,key:`1uxyv8`}],[`path`,{d:`M18.796 18.81A4.5 4.5 0 0 1 17.5 19H9A7 7 0 0 1 5.79 5.78`,key:`99tcn7`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),_=e(t(),1),v=n(),y=[`#2563eb`,`#16a34a`,`#d97706`,`#9333ea`,`#dc2626`,`#0891b2`,`#c026d3`,`#ea580c`];function b(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return y[Math.abs(t)%y.length]}function x({name:e,syncState:t,isHead:n,isTag:r,className:i}){let a=r?`#d97706`:b(e),s=r?l:t===`synced`?m:t===`ahead`?f:t===`behind`?h:t===`remote-only`?m:g,c=r?`Tag: ${e}`:t===`synced`?`${e} — synced with remote`:t===`ahead`?`${e} — ahead of remote`:t===`behind`?`${e} — behind remote`:t===`remote-only`?`${e} — remote only`:`${e} — local only`;return(0,v.jsxs)(`span`,{className:o(`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[11px] font-medium leading-tight max-w-[220px]`,n&&`ring-1 ring-offset-1 ring-offset-background`,t===`remote-only`&&`opacity-70`,i),style:{borderColor:a,backgroundColor:a+`1A`,color:`var(--text)`,...n?{"--tw-ring-color":a}:{}},title:c,children:[(0,v.jsx)(s,{className:`size-3 shrink-0`,style:{color:a}}),(0,v.jsx)(`span`,{className:`truncate`,children:e})]})}function S(e,t,n,r){let i=[],a=e===r;for(let e of t)e.startsWith(`tag: `)&&i.push({name:e.slice(5),syncState:`synced`,isTag:!0});let o=n.filter(t=>t.commitHash===e),s=o.filter(e=>!e.remote),c=o.filter(e=>e.remote);new Set(s.map(e=>e.name));let l=new Set;for(let e of s){let t=`local-only`;e.remotes.length>0&&(t=e.ahead>0&&e.behind===0?`ahead`:e.behind>0&&e.ahead===0?`behind`:`synced`),i.push({name:e.name,syncState:t,isHead:a&&e.current});for(let t of c){let n=t.name.replace(/^remotes\//,``),r=n.indexOf(`/`);r<0||n.slice(r+1)===e.name&&l.add(t.name)}}for(let e of c){if(l.has(e.name))continue;let t=e.name.replace(/^remotes\//,``);i.push({name:t,syncState:`remote-only`})}return i}var C=100;function w({metadata:e}){let t=e?.projectName??s(c(e=>e.activeProject))?.name,[n,r]=(0,_.useState)(null),[o,l]=(0,_.useState)(!1),[f,m]=(0,_.useState)(!0),h=(0,_.useRef)(null),g=(0,_.useCallback)(async(e=0,n=!1)=>{if(t){l(!0);try{let o=await a.get(`${i(t)}/git/graph?max=${C}&skip=${e}`);r(e=>n&&e?{...o,commits:[...e.commits,...o.commits]}:o),m(o.commits.length===C)}catch{}l(!1)}},[t]);(0,_.useEffect)(()=>{g()},[g]);let y=(0,_.useCallback)(()=>{o||!f||!n||g(n.commits.length,!0)},[o,f,n,g]),b=(0,_.useCallback)(e=>{let t=e.currentTarget;t.scrollHeight-t.scrollTop-t.clientHeight<200&&y()},[y]);return t?(0,v.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b border-border shrink-0`,children:[(0,v.jsx)(p,{className:`size-4 text-text-secondary`}),(0,v.jsx)(`span`,{className:`text-xs font-medium text-text-primary`,children:`Git Log`}),(0,v.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:n?`${n.commits.length} commits`:``}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`button`,{onClick:()=>g(),disabled:o,className:`p-1 rounded text-text-subtle hover:text-text-secondary transition-colors`,title:`Refresh`,children:(0,v.jsx)(u,{className:`size-3.5 ${o?`animate-spin`:``}`})})]}),!n&&o?(0,v.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,v.jsx)(d,{className:`size-5 animate-spin text-primary`})}):n&&n.commits.length===0?(0,v.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`No commits yet`}):n?(0,v.jsxs)(`div`,{ref:h,className:`flex-1 overflow-y-auto min-h-0`,onScroll:b,children:[n.commits.map(e=>(0,v.jsx)(T,{commit:e,branches:n.branches,head:n.head},e.hash)),o&&(0,v.jsx)(`div`,{className:`flex items-center justify-center py-3`,children:(0,v.jsx)(d,{className:`size-4 animate-spin text-text-subtle`})}),!f&&n.commits.length>0&&(0,v.jsx)(`div`,{className:`text-center text-[10px] text-text-subtle py-3`,children:`End of history`})]}):null]}):(0,v.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`Select a project to view git log`})}function T({commit:e,branches:t,head:n}){let r=e.hash===n,i=S(e.hash,e.refs,t,n);return(0,v.jsxs)(`div`,{className:`flex items-start gap-2 px-3 py-1.5 border-b border-border/50 hover:bg-surface-elevated transition-colors ${r?`bg-primary/5`:``}`,children:[(0,v.jsx)(`div`,{className:`flex items-center pt-1 shrink-0`,children:(0,v.jsx)(`span`,{className:`size-2.5 rounded-full border-2 ${r?`border-primary bg-primary`:`border-text-subtle bg-transparent`}`})}),(0,v.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[i.length>0&&(0,v.jsx)(`div`,{className:`flex flex-wrap items-center gap-1 mb-0.5`,children:i.map(e=>(0,v.jsx)(x,{...e},`${e.name}-${e.syncState}`))}),(0,v.jsx)(`p`,{className:`text-xs text-text-primary truncate leading-snug`,children:e.subject}),(0,v.jsxs)(`div`,{className:`flex items-center gap-2 mt-0.5`,children:[(0,v.jsx)(`span`,{className:`text-[10px] font-mono text-text-subtle`,children:e.abbreviatedHash}),(0,v.jsx)(`span`,{className:`text-[10px] text-text-subtle truncate`,children:e.authorName}),(0,v.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0`,children:E(e.authorDate)})]})]})]})}function E(e){let t=new Date(e),n=Date.now()-t.getTime(),r=Math.floor(n/6e4);if(r<1)return`now`;if(r<60)return`${r}m`;let i=Math.floor(r/60);if(i<24)return`${i}h`;let a=Math.floor(i/24);return a<30?`${a}d`:t.toLocaleDateString(`en`,{month:`short`,day:`numeric`})}export{w as GitLogPanel};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/data-grid-overlay-editor-Bdc80TJ1.js","assets/rolldown-runtime-FhOqtrmT.js","assets/dist-m_oJqIDk.js","assets/vendor-markdown-CKTlmXbz.js","assets/vendor-ui-DMRGWRuc.js","assets/data-grid-types-BuMHLKXV.js","assets/number-overlay-editor-CunvWJnN.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{o as e,t}from"./rolldown-runtime-FhOqtrmT.js";import{b as n,y as r}from"./vendor-markdown-CKTlmXbz.js";import{ot as i}from"./vendor-ui-DMRGWRuc.js";import{t as a}from"./createLucideIcon-ConhwJnb.js";import{t as o}from"./chevron-right-DeUue2aK.js";import{n as s,r as c,t as l}from"./sparkles-B3DmG8PJ.js";import{n as u,r as d,t as f}from"./plus-DcuJuDC3.js";import{t as p}from"./save-BM4p9_9n.js";import{t as m}from"./x-BsFLg-T8.js";import{M as h,q as g}from"./vendor-mermaid-CYOBtZtD.js";import{t as _}from"./tab-store-ByORqglW.js";import{At as v,J as y,Ot as b,Ut as x,Wt as S,Zt as C,bn as w,cn as T,en as E,gn as D,jt as O,o as k,rt as A,xn as ee}from"./index-
|
|
2
|
+
import{o as e,t}from"./rolldown-runtime-FhOqtrmT.js";import{b as n,y as r}from"./vendor-markdown-CKTlmXbz.js";import{ot as i}from"./vendor-ui-DMRGWRuc.js";import{t as a}from"./createLucideIcon-ConhwJnb.js";import{t as o}from"./chevron-right-DeUue2aK.js";import{n as s,r as c,t as l}from"./sparkles-B3DmG8PJ.js";import{n as u,r as d,t as f}from"./plus-DcuJuDC3.js";import{t as p}from"./save-BM4p9_9n.js";import{t as m}from"./x-BsFLg-T8.js";import{M as h,q as g}from"./vendor-mermaid-CYOBtZtD.js";import{t as _}from"./tab-store-ByORqglW.js";import{At as v,J as y,Ot as b,Ut as x,Wt as S,Zt as C,bn as w,cn as T,en as E,gn as D,jt as O,o as k,rt as A,xn as ee}from"./index-DMEso_fH.js";import{A as j,B as te,C as M,D as ne,E as re,F as ie,G as ae,H as N,I as P,L as F,M as oe,N as se,O as ce,P as I,R as L,S as le,T as ue,U as de,V as fe,W as pe,_ as me,a as he,b as ge,c as _e,d as R,f as ve,g as ye,h as be,i as z,j as xe,k as Se,l as B,m as V,n as H,o as Ce,p as U,r as we,s as Te,t as W,u as G,v as Ee,w as De,x as Oe,y as ke,z as Ae}from"./data-grid-types-BuMHLKXV.js";import{t as je}from"./dist-m_oJqIDk.js";import{t as Me}from"./use-monaco-theme-XO5ZyYBW.js";import{n as Ne}from"./csv-parser-BOlh-1bz.js";var Pe=a(`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`}]]),Fe=`SELECT.FROM.WHERE.INSERT.INTO.VALUES.UPDATE.SET.DELETE.CREATE.TABLE.ALTER.DROP.INDEX.JOIN.LEFT.RIGHT.INNER.OUTER.ON.AND.OR.NOT.NULL.IS.IN.LIKE.BETWEEN.HAVING.LIMIT.OFFSET.AS.DISTINCT.COUNT.SUM.AVG.MIN.MAX.CASE.WHEN.THEN.ELSE.END.EXISTS.UNION.ALL.ASC.DESC.ORDER BY.GROUP BY.LEFT JOIN.RIGHT JOIN.INNER JOIN.CROSS JOIN.FULL OUTER JOIN.IS NULL.IS NOT NULL`.split(`.`),Ie=[`COUNT`,`SUM`,`AVG`,`MIN`,`MAX`],Le=[`=`,`!=`,`<>`,`>`,`<`,`>=`,`<=`,`LIKE`,`ILIKE`,`IN`,`NOT IN`,`BETWEEN`,`IS NULL`,`IS NOT NULL`],Re=[`ASC`,`DESC`];function ze(e,t){let n=e.split(`
|
|
3
3
|
`),r=0;for(let e=0;e<n.length;e++){let i=n[e].trim();e<t-1&&i.endsWith(`;`)&&(r=e+1)}let i=n.length-1;for(let e=t-1;e<n.length;e++)if(n[e].trim().endsWith(`;`)){i=e;break}for(;r<=i;){let e=n[r].trim();if(e&&!e.startsWith(`--`))break;r++}return n.slice(r,i+1).join(`
|
|
4
4
|
`).trim()}var Be=new Map,Ve=new Set(`WHERE.SET.ON.ORDER.GROUP.HAVING.LIMIT.LEFT.RIGHT.INNER.OUTER.CROSS.FULL.JOIN.AND.OR.VALUES.SELECT.FROM.INTO.UPDATE.DELETE.INSERT.CREATE.ALTER.DROP`.split(`.`));function He(e){let t=new Set,n=new Map,r=e.matchAll(/\b(?:FROM|JOIN|UPDATE|INTO)\s+"?(\w+)"?(?:\s+AS\s+(\w+)|\s+(?!(?:FROM|JOIN|UPDATE|INTO|WHERE|SET|ON|ORDER|GROUP|HAVING|LIMIT|LEFT|RIGHT|INNER|OUTER|CROSS|FULL|AND|OR|VALUES|SELECT)\b)(\w+))?/gi);for(let e of r){let r=e[1];t.add(r);let i=e[2]??e[3];i&&!Ve.has(i.toUpperCase())&&n.set(i.toLowerCase(),r)}return{tableRefs:t,aliasMap:n}}function Ue(e,t){return t.get(e.toLowerCase())??e}async function We(e,t){let n=e.toLowerCase(),r=Be.get(n);if(!r)try{r=await t.getColumns(e),Be.set(n,r)}catch{r=[]}return r}async function Ge(e,t,n,r){let i=[],a=new Set;for(let o of e){let e=await We(o,t);for(let t of e){if(a.has(t.name))continue;a.add(t.name);let e=/[A-Z]/.test(t.name);i.push({label:t.name,kind:n.languages.CompletionItemKind.Field,detail:`${o} · ${t.type}`,insertText:e?`"${t.name}"`:t.name,range:r,sortText:`0`+t.name})}}return i}function Ke(e){if(/(\w+)\.\s*$/.test(e))return`dot`;let t=e.match(/\b(?:ORDER|GROUP)\s+BY\s+(?:[\w"]+\s+(?:ASC|DESC)\s*,\s*)*[\w"]+\s+(\w*)$/i);if(t){let e=t[1].toUpperCase();return e===`ASC`||e===`DESC`?`after-direction`:`sort-direction`}return/\b(?:ORDER|GROUP)\s+BY\s+.*(?:ASC|DESC)\s*,\s*\w*$/i.test(e)?`order-by-next-col`:/\b(?:WHERE|AND|OR)\s+[\w"]+\s+\S*$/i.test(e)?`operator`:/\b(?:FROM|JOIN|INTO|UPDATE|TABLE)\s+\w*$/i.test(e)?`table`:/\bINSERT\s+INTO\s+[\w"]+\s*\(\s*(?:[\w"]+\s*,\s*)*\w*$/i.test(e)?`insert-cols`:/\b(?:SELECT|WHERE|ORDER\s+BY|GROUP\s+BY|HAVING|SET|ON|AND|OR)\s+(?:[\w"]+\s*,\s*)*\w*$/i.test(e)?`columns`:/,\s*\w*$/.test(e)?`comma-cols`:`default`}function qe(e,t){return{triggerCharacters:[`.`,`,`],provideCompletionItems:async(n,r)=>{try{let i=n.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:r.lineNumber,endColumn:r.column}),a=n.getWordUntilPosition(r),o={startLineNumber:r.lineNumber,endLineNumber:r.lineNumber,startColumn:a.startColumn,endColumn:a.endColumn},{tableRefs:s,aliasMap:c}=He(ze(n.getValue(),r.lineNumber)),l=[],u=Ke(i);if(u===`dot`){let n=i.match(/(\w+)\.\s*$/);if(n){let r=n[1],i=await We(Ue(r,c),t);for(let t of i){let n=/[A-Z]/.test(t.name);l.push({label:t.name,kind:e.languages.CompletionItemKind.Field,detail:t.type,insertText:n?`"${t.name}"`:t.name,range:o})}}return{suggestions:l}}if(u===`sort-direction`){for(let t of Re)l.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:o,sortText:`0`+t});return{suggestions:l}}if(u===`after-direction`)return{suggestions:[]};if(u===`order-by-next-col`)return l.push(...await Ge(s,t,e,o)),{suggestions:l};if(u===`operator`){for(let t of Le)l.push({label:t,kind:e.languages.CompletionItemKind.Operator,insertText:t,range:o,sortText:`0`+t});return{suggestions:l}}if(u===`table`){for(let n of t.tables)l.push({label:n.name,kind:e.languages.CompletionItemKind.Struct,detail:n.schema,insertText:n.name,range:o,sortText:`0`+n.name});return{suggestions:l}}if(u===`insert-cols`)return l.push(...await Ge(s,t,e,o)),{suggestions:l};if(u===`columns`){if(l.push(...await Ge(s,t,e,o)),/\bSELECT\s+/i.test(i)){l.push({label:`*`,kind:e.languages.CompletionItemKind.Value,insertText:`*`,range:o,sortText:`00*`});for(let t of Ie)l.push({label:`${t}()`,kind:e.languages.CompletionItemKind.Function,insertText:`${t}($0)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,range:o,sortText:`1`+t})}for(let t of Fe)l.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:o,sortText:`3`+t});return{suggestions:l}}if(u===`comma-cols`&&s.size>0)return l.push(...await Ge(s,t,e,o)),{suggestions:l};for(let t of Fe)l.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:o,sortText:`2`+t});for(let n of t.tables)l.push({label:n.name,kind:e.languages.CompletionItemKind.Struct,detail:n.schema,insertText:n.name,range:o,sortText:`1`+n.name});return{suggestions:l}}catch{return{suggestions:[]}}}}}function Je(){Be.clear()}var K=e(n(),1),Ye=e(i(),1),q=r();function Xe(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 Ze({columns:e,rows:t,filename:n=`export`,exportAllUrl:r}){let[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(!1),c=(0,K.useRef)(null),l=(0,K.useRef)(null);(0,K.useEffect)(()=>{if(!i)return;let e=e=>{l.current&&!l.current.contains(e.target)&&c.current&&!c.current.contains(e.target)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[i]);let u=(0,K.useCallback)(()=>a(e=>!e),[]),f=()=>{let r=Ne(e,t.map(t=>e.map(e=>String(t[e]??``))));Xe(`${n}.csv`,r,`text/csv`),a(!1)},p=()=>{let e=JSON.stringify(t,null,2);Xe(`${n}.json`,e,`application/json`),a(!1)},m=async()=>{let n=e.join(` `),r=t.map(t=>e.map(e=>String(t[e]??``)).join(` `)).join(`
|
|
5
5
|
`);await navigator.clipboard.writeText(n+`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t as r}from"./createLucideIcon-ConhwJnb.js";import{g as i,p as a,t as o}from"./mobile-bottom-sheet-BwPBKZON.js";import{t as s}from"./use-is-mobile-CE6AamG6.js";import{t as c}from"./chevron-right-DeUue2aK.js";import{n as l,t as u}from"./tool-cards-C4DU4njU.js";import{a as d,c as f,n as p,o as m,t as h}from"./dialog-HHdNInEH.js";import"./api-client-DhXpjLdi.js";import"./vendor-mermaid-CYOBtZtD.js";import"./settings-store-C7VeYnhf.js";import{n as g}from"./utils-E0yyGxXt.js";import"./panel-store-DsDZX8Mi.js";import{i as _}from"./project-store-C1jInVih.js";import"./tab-store-ByORqglW.js";import{At as v,C as y,Et as b,Ft as x,G as S,Ht as C,J as w,K as T,Rt as E,S as D,W as O,Zt as k,_ as A,b as j,g as ee,h as M,m as te,p as N,q as P,v as ne,x as F,y as I,zt as re}from"./index-D6qn4rtk.js";import{t as L}from"./markdown-renderer-BGumVkCU.js";var R=r(`scroll-text`,[[`path`,{d:`M15 12h-5`,key:`r7krc0`}],[`path`,{d:`M15 8h-5`,key:`1khuty`}],[`path`,{d:`M19 17V5a2 2 0 0 0-2-2H4`,key:`zz82l3`}],[`path`,{d:`M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3`,key:`1ph1d7`}]]),z=r(`user-plus`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]),B=e(t(),1),V=8e3;function ie(e,t){let[n,r]=(0,B.useState)([]),[i,a]=(0,B.useState)([]),[o,s]=(0,B.useState)(`idle`),[c,u]=(0,B.useState)({}),[d,f]=(0,B.useState)(!1),[p,m]=(0,B.useState)(!1),[h,g]=(0,B.useState)(!1),[_,v]=(0,B.useState)(null),y=(0,B.useRef)(new Map),b=(0,B.useCallback)(e=>{u(t=>{if(!t[e])return t;let n={...t};return delete n[e],n})},[]),x=(0,B.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}switch(t.type){case`ping`:return;case`group_state`:m(!0),s(t.status),a(t.members),g(t.status===`active`);return;case`group_message`:b(t.message.fromMember),r(e=>e.some(e=>e.id===t.message.id)?e:[...e,t.message]);return;case`member_status`:a(e=>e.map(e=>e.id===t.memberId?{...e,status:t.status}:e));return;case`typing`:{u(e=>({...e,[t.member]:!0}));let e=y.current,n=e.get(t.member);n&&clearTimeout(n),e.set(t.member,setTimeout(()=>b(t.member),V));return}case`turn_done`:return;case`group_done`:g(!1),s(`idle`),u({});return;case`error`:v(t.message),g(!1);return}},[b]),{send:S}=l({url:e&&t?`/ws/project/${encodeURIComponent(t)}/group/${encodeURIComponent(e)}`:``,onMessage:x,autoConnect:!!e&&!!t});return(0,B.useEffect)(()=>{let t=!1;r([]),a([]),u({}),s(`idle`),g(!1),v(null),m(!1);for(let e of y.current.values())clearTimeout(e);if(y.current.clear(),e)return f(!0),M(e,{limit:200}).then(e=>{t||r(t=>{let n=new Set(e.messages.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));return[...e.messages,...r]})}).catch(e=>{t||v(e instanceof Error?e.message:`Failed to load feed`)}).finally(()=>{t||f(!1)}),()=>{t=!0}},[e]),{messages:n,members:i,status:o,typing:c,loading:d,isConnected:p,isRunning:h,error:_,sendMessage:(0,B.useCallback)(t=>{let n=t.trim();!n||!e||(v(null),g(!0),p?S(JSON.stringify({type:`message`,content:n})):j(e,n).catch(e=>{v(e instanceof Error?e.message:`Failed to send message`),g(!1)}))},[e,p,S]),stop:(0,B.useCallback)(()=>{e&&(p?S(JSON.stringify({type:`stop`})):F(e).catch(()=>{}),s(`paused`),g(!1))},[e,p,S]),resume:(0,B.useCallback)(()=>{e&&I(e).then(()=>{s(`active`),g(!0)}).catch(e=>v(e instanceof Error?e.message:`Failed to resume`))},[e])}}var H=n();function U(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function W(e){try{let t=e<0xe8d4a51000?e*1e3:e;return new Date(t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}catch{return``}}function G(e,t){return e.split(/(@[\p{L}\p{N}_]+)/gu).map((e,n)=>{if(e.startsWith(`@`)&&e.length>1){let r=t(e.slice(1));return(0,H.jsx)(`span`,{className:g(`font-semibold`,!r&&`text-primary`),style:r?{color:r}:void 0,children:e},n)}return e})}var ae=(0,B.memo)(function({message:e,colorFor:t,isLeader:n,onViewFull:r}){let i=e.fromMember===`user`,a=i?`You`:e.fromMember,o=i?`var(--color-primary)`:t(e.fromMember)??`var(--accent)`,s=!i&&n(e.fromMember),c=e.summary??``,l=e.toMember&&e.toMember!==`all`?e.toMember:null,u=(0,H.jsxs)(`div`,{className:g(`group relative flex gap-2.5 px-3 py-2 transition-colors hover:bg-surface-elevated/50`,i&&`bg-primary/5`),style:{boxShadow:`inset 3px 0 0 0 ${o}`},children:[e.fullSessionRef&&(0,H.jsx)(`button`,{type:`button`,onClick:()=>r(e),title:`View full transcript (AI's raw thinking / debug)`,"aria-label":`View full transcript`,className:`absolute right-1.5 top-1.5 hidden items-center rounded p-1 text-text-subtle/60 hover:bg-surface-elevated hover:text-text-secondary can-hover:group-hover:inline-flex`,children:(0,H.jsx)(R,{className:`size-3.5`})}),(0,H.jsx)(`div`,{className:`mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-full text-[11px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:o},"aria-hidden":!0,children:U(a)}),(0,H.jsxs)(`div`,{className:`min-w-0 flex-1 can-hover:pr-6`,children:[(0,H.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,H.jsx)(`span`,{className:`text-sm font-semibold`,style:{color:i?`var(--color-foreground)`:o},children:a}),s&&(0,H.jsx)(`span`,{className:`rounded bg-surface-elevated px-1.5 py-px text-[10px] font-medium text-text-secondary`,children:`leader`}),l&&(0,H.jsxs)(`span`,{className:`text-[11px] text-text-subtle`,children:[`→ `,l]}),(0,H.jsx)(`span`,{className:`text-[11px] text-text-subtle`,children:W(e.createdAt)})]}),(0,H.jsx)(`div`,{className:`mt-0.5 whitespace-pre-wrap break-words text-sm leading-relaxed text-text-secondary`,children:G(c,t)})]})]});return e.fullSessionRef?(0,H.jsxs)(O,{children:[(0,H.jsx)(P,{asChild:!0,children:u}),(0,H.jsx)(S,{children:(0,H.jsxs)(T,{onClick:()=>r(e),children:[(0,H.jsx)(R,{className:`size-4`}),` View full transcript`]})})]}):u}),K={idle:`bg-text-subtle`,working:`bg-primary animate-pulse`,done:`bg-emerald-500`,error:`bg-destructive`},q={idle:`Idle`,working:`Working`,done:`Done`,error:`Error`},J=(0,B.memo)(function({members:e,liveStatus:t,typing:n,busy:r,onAdd:i,onEdit:o,onRemove:s}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-0.5 p-2`,children:[e.map(e=>{let i=n[e.name],c=t.get(e.id)??e.status;return(0,H.jsxs)(`div`,{className:`group flex items-center gap-2 rounded-md px-2 py-1.5`,children:[(0,H.jsx)(`span`,{className:`flex size-6 shrink-0 items-center justify-center rounded-full text-[10px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:e.color??`var(--accent)`},"aria-hidden":!0,children:e.name.slice(0,1).toUpperCase()}),(0,H.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,H.jsx)(`span`,{className:`truncate text-xs font-medium`,style:{color:e.color??`var(--color-foreground)`},children:e.name}),e.role===`leader`&&(0,H.jsx)(`span`,{className:`rounded-sm bg-accent-wash px-1 text-[9px] font-semibold uppercase text-primary`,children:`lead`})]}),(0,H.jsx)(`span`,{className:`block truncate text-[10px] text-text-subtle`,children:i?`typing…`:e.persona||q[c]})]}),(0,H.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 can-hover:opacity-0 can-hover:group-hover:opacity-100`,children:[(0,H.jsx)(`button`,{type:`button`,onClick:()=>o(e),disabled:r,"aria-label":`Edit ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground active:bg-surface-elevated disabled:opacity-40`,children:(0,H.jsx)(a,{className:`size-3.5`})}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>s(e),disabled:r,"aria-label":`Remove ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-destructive active:bg-surface-elevated disabled:opacity-40`,children:(0,H.jsx)(v,{className:`size-3.5`})})]}),(0,H.jsx)(`span`,{className:g(`size-2 shrink-0 rounded-full`,K[c]),title:q[c],"aria-hidden":!0})]},e.id)}),(0,H.jsxs)(`button`,{type:`button`,onClick:i,disabled:r,className:`mt-1 flex items-center gap-2 rounded-md px-2 py-2 text-xs font-medium text-primary hover:bg-surface-elevated active:bg-surface-elevated disabled:opacity-40`,children:[(0,H.jsx)(z,{className:`size-4`}),` Add member`]})]})}),Y=`w-full min-h-[40px] rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`;function oe({open:e,member:t,projectName:n,providerId:r=`claude`,onSubmit:i,onClose:a}){let c=s(),[l,u]=(0,B.useState)(t?.name??``),[g,_]=(0,B.useState)(t?.persona??``),[v,y]=(0,B.useState)(t?.model??null),[b,x]=(0,B.useState)(t?.role===`leader`),[S,C]=(0,B.useState)(!1),[w,T]=(0,B.useState)(null),E=(0,B.useCallback)(async()=>{let e=l.trim();if(!e){T(`Name is required`);return}C(!0),T(null);try{await i({name:e,persona:g.trim()||null,model:v,role:b?`leader`:`member`}),a()}catch(e){T(e instanceof Error?e.message:`Failed to save member`),C(!1)}},[l,g,v,b,i,a]),D=t?.role===`leader`,O=(0,H.jsxs)(`div`,{className:`flex flex-col gap-3 px-1 py-1`,children:[(0,H.jsx)(`input`,{className:Y,value:l,onChange:e=>u(e.target.value),placeholder:`Member name`,autoFocus:!0}),(0,H.jsx)(`input`,{className:Y,value:g,onChange:e=>_(e.target.value),placeholder:`Persona (optional)`}),(0,H.jsx)(N,{value:v,onChange:y,projectName:n,providerId:r}),(0,H.jsxs)(`label`,{className:X(D),children:[(0,H.jsx)(`input`,{type:`checkbox`,className:`size-4 accent-[var(--color-primary)]`,checked:b,disabled:D,onChange:e=>x(e.target.checked)}),(0,H.jsx)(`span`,{children:D?`Leader (reassign from another member)`:`Set as leader`})]}),w&&(0,H.jsx)(`p`,{className:`text-xs text-destructive`,children:w}),(0,H.jsxs)(`div`,{className:`flex justify-end gap-2 pt-1`,children:[(0,H.jsx)(f,{variant:`outline`,onClick:a,disabled:S,children:`Cancel`}),(0,H.jsxs)(f,{onClick:E,disabled:S,children:[S&&(0,H.jsx)(k,{className:`mr-1.5 size-4 animate-spin`}),t?`Save`:`Add member`]})]})]});if(!e)return null;let A=t?`Edit member`:`Add member`;return c?(0,H.jsx)(o,{open:!0,onClose:a,className:`flex max-h-[90vh] flex-col`,children:(0,H.jsxs)(`div`,{className:`flex min-h-0 flex-col px-4 pb-2`,children:[(0,H.jsx)(`h2`,{className:`mb-2 text-base font-semibold text-foreground`,children:A}),O]})}):(0,H.jsx)(h,{open:!0,onOpenChange:e=>{e||a()},children:(0,H.jsxs)(p,{className:`flex flex-col sm:max-w-md`,children:[(0,H.jsx)(d,{children:(0,H.jsx)(m,{children:A})}),O]})})}function X(e){return`flex items-center gap-2 text-sm text-text-secondary ${e?`opacity-60`:``}`}function se({messages:e,config:t,projectName:n}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[t&&(0,H.jsx)(Z,{config:t}),e.map(e=>(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e.role===`user`?`User`:e.role===`assistant`?`Assistant`:e.role}),(0,H.jsx)(ce,{message:e,projectName:n})]},e.id)),e.length===0&&(0,H.jsx)(`p`,{className:`py-6 text-center text-sm text-text-subtle`,children:`Transcript is empty.`})]})}function ce({message:e,projectName:t}){let n=e.events??[];if(n.length===0)return e.content.trim()?(0,H.jsx)(L,{content:e.content}):null;let r=new Map;for(let e of n)e.type===`tool_result`&&e.toolUseId&&r.set(e.toolUseId,e);return(0,H.jsx)(`div`,{className:`flex flex-col gap-2`,children:n.map((e,n)=>{if(e.type===`text`)return e.content.trim()?(0,H.jsx)(L,{content:e.content},n):null;if(e.type===`thinking`)return(0,H.jsx)(le,{content:e.content},n);if(e.type===`tool_use`){let i=e.toolUseId?r.get(e.toolUseId):void 0;return(0,H.jsx)(u,{tool:e,result:i,completed:!!i,projectName:t},n)}return null})})}function le({content:e}){let[t,n]=(0,B.useState)(!1);return(0,H.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs text-text-subtle hover:text-text-secondary`,children:[(0,H.jsx)(c,{className:g(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,H.jsx)(i,{className:`size-3.5`}),(0,H.jsx)(`span`,{children:`Thinking`})]}),t&&(0,H.jsx)(`div`,{className:`border-t border-border px-3 py-2 text-xs leading-relaxed text-text-secondary`,children:(0,H.jsx)(L,{content:e})})]})}function Z({config:e}){let[t,n]=(0,B.useState)(!1),r=[[`Model`,e.model],[`Permission`,e.permissionMode],[`CWD`,e.cwd],[`Git branch`,e.gitBranch],[`CLI version`,e.version]].filter(([,e])=>e);return r.length===0?null:(0,H.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-secondary hover:text-foreground`,children:[(0,H.jsx)(c,{className:g(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,H.jsx)(E,{className:`size-3.5`}),(0,H.jsx)(`span`,{children:`Input config`})]}),t&&(0,H.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 border-t border-border px-3 py-2 text-xs`,children:r.map(([e,t])=>(0,H.jsxs)(`div`,{className:`contents`,children:[(0,H.jsx)(`dt`,{className:`text-text-subtle`,children:e}),(0,H.jsx)(`dd`,{className:`break-all font-mono text-text-secondary`,children:t})]},e))})]})}function ue({groupId:e,message:t,onClose:n}){let r=s(),[i,a]=(0,B.useState)(null),[c,l]=(0,B.useState)(!1),[u,f]=(0,B.useState)(null),g=t?.fullSessionRef??null;if((0,B.useEffect)(()=>{if(!t||!g)return;let n=!1;return a(null),f(null),l(!0),A(e,g).then(e=>{n||a(e)}).catch(e=>{n||f(e instanceof Error?e.message:`Failed to load transcript`)}).finally(()=>{n||l(!1)}),()=>{n=!0}},[e,g,t]),!t)return null;let _=(0,H.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[c&&(0,H.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,H.jsx)(k,{className:`size-5 animate-spin text-primary`})}),u&&(0,H.jsxs)(`div`,{className:`px-1 py-4 text-sm text-text-secondary`,children:[(0,H.jsx)(`p`,{className:`mb-2 font-medium text-foreground`,children:`Full transcript unavailable`}),(0,H.jsx)(`p`,{className:`text-xs text-text-subtle`,children:u}),t.summary&&(0,H.jsx)(`pre`,{className:`mt-4 whitespace-pre-wrap break-words rounded-md bg-surface-elevated p-3 text-xs leading-relaxed text-text-secondary`,children:t.summary})]}),!c&&!u&&i!=null&&(0,H.jsx)(`div`,{className:`px-1 py-1`,children:(0,H.jsx)(se,{messages:i.messages,config:i.config})})]}),v=`${t.fromMember} — full transcript`;return r?(0,H.jsx)(o,{open:!0,onClose:n,className:`max-h-[85vh] flex flex-col`,children:(0,H.jsxs)(`div`,{className:`flex flex-col min-h-0 px-4 pb-2`,children:[(0,H.jsx)(`h2`,{className:`mb-2 text-sm font-semibold text-foreground`,children:v}),_]})}):(0,H.jsx)(h,{open:!0,onOpenChange:e=>{e||n()},children:(0,H.jsxs)(p,{className:`flex max-h-[80vh] flex-col sm:max-w-2xl`,children:[(0,H.jsx)(d,{children:(0,H.jsx)(m,{className:`text-sm`,children:v})}),_]})})}function Q({metadata:e}){let t=e?.groupId??null,{activeProject:n}=_(w(e=>({activeProject:e.activeProject}))),r=e?.projectName??n?.name??``,i=s(),{messages:a,members:c,status:l,typing:u,loading:d,isRunning:p,error:m,sendMessage:h,stop:v,resume:S}=ie(t,r),[T,E]=(0,B.useState)(``),[O,A]=(0,B.useState)(null),[j,M]=(0,B.useState)(!1),N=(0,B.useRef)(null),[P,F]=(0,B.useState)([]),[I,L]=(0,B.useState)(null),[R,z]=(0,B.useState)(!1),[V,U]=(0,B.useState)(null),[W,G]=(0,B.useState)(null),K=(0,B.useCallback)(async()=>{if(t)try{let e=await ee(t);F(e.members),L(e.maxTurns)}catch{}},[t]),q=(0,B.useCallback)(async e=>{if(!t)return;let n=Math.max(1,Math.min(50,Math.floor(e)||1));L(n);try{await y(t,{maxTurns:n})}catch{K()}},[t,K]);(0,B.useEffect)(()=>{F([]),K()},[t,K]),(0,B.useEffect)(()=>{N.current?.scrollIntoView({block:`end`})},[a.length,u]);let Y=(0,B.useMemo)(()=>new Map(c.map(e=>[e.id,e.status])),[c]),X=P.length?P:c,se=(0,B.useMemo)(()=>{let e=new Map(X.map(e=>[e.name,e.color]));return t=>e.get(t)??null},[X]),ce=(0,B.useMemo)(()=>{let e=new Set(X.filter(e=>e.role===`leader`).map(e=>e.name));return t=>e.has(t)},[X]),le=(0,B.useCallback)(async e=>{t&&(W?.member?await D(t,W.member.id,e):await te(t,e),await K())},[t,W,K]),Z=(0,B.useCallback)(async e=>{if(t){z(!0),U(null);try{await ne(t,e.id),await K()}catch(e){U(e instanceof Error?e.message:`Failed to remove member`)}finally{z(!1)}}},[t,K]),Q=(0,B.useCallback)(()=>{let e=T.trim();e&&(h(e),E(``))},[T,h]),$=Object.keys(u).filter(e=>u[e]);return t?(0,H.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[(0,H.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,H.jsxs)(`div`,{className:`flex h-11 shrink-0 items-center justify-between border-b border-border px-3`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,H.jsx)(`span`,{className:g(`size-2 rounded-full`,l===`active`?`bg-primary animate-pulse`:l===`paused`?`bg-amber-500`:`bg-text-subtle`)}),(0,H.jsx)(`span`,{className:`capitalize`,children:l})]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[p?(0,H.jsxs)(f,{size:`sm`,variant:`outline`,onClick:v,className:`h-8`,children:[(0,H.jsx)(x,{className:`mr-1 size-3.5`}),` Stop`]}):l===`paused`?(0,H.jsxs)(f,{size:`sm`,variant:`outline`,onClick:S,className:`h-8`,children:[(0,H.jsx)(C,{className:`mr-1 size-3.5`}),` Resume`]}):null,(0,H.jsx)(`button`,{type:`button`,onClick:()=>M(e=>!e),className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground`,"aria-label":`Toggle roster`,children:(0,H.jsx)(b,{className:`size-4`})})]})]}),(0,H.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:d?(0,H.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,H.jsx)(k,{className:`size-5 animate-spin text-primary`})}):a.length===0?(0,H.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-sm text-text-subtle`,children:`Send a message to start the group.`}):(0,H.jsxs)(`div`,{className:`flex flex-col py-2`,children:[a.map(e=>(0,H.jsx)(ae,{message:e,colorFor:se,isLeader:ce,onViewFull:A},e.id)),$.length>0&&(0,H.jsxs)(`div`,{className:`px-3 py-1.5 text-xs italic text-text-subtle`,children:[$.join(`, `),` `,$.length===1?`is`:`are`,` typing…`]}),(0,H.jsx)(`div`,{ref:N})]})}),m&&(0,H.jsx)(`div`,{className:`shrink-0 border-t border-border bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:m}),(0,H.jsx)(`div`,{className:`shrink-0 border-t border-border p-2`,children:(0,H.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,H.jsx)(`textarea`,{value:T,onChange:e=>E(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!i&&(e.preventDefault(),Q())},rows:1,placeholder:`Message the group…`,className:`max-h-32 min-h-[44px] flex-1 resize-none rounded-md border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`}),(0,H.jsx)(f,{onClick:Q,disabled:!T.trim(),className:`size-11 shrink-0 p-0`,"aria-label":`Send`,children:(0,H.jsx)(re,{className:`size-4`})})]})})]}),i?(0,H.jsxs)(o,{open:j,onClose:()=>M(!1),className:`flex max-h-[72vh] flex-col`,children:[(0,H.jsx)(`div`,{className:`flex h-11 shrink-0 items-center px-4 text-sm font-medium text-foreground`,children:`Members`}),(0,H.jsxs)(`div`,{className:`min-h-0 overflow-y-auto`,children:[I!==null&&(0,H.jsxs)(`label`,{className:`flex items-center gap-2 px-4 py-2 text-xs text-text-secondary`,children:[(0,H.jsx)(`span`,{children:`Reply cap`}),(0,H.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>q(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,H.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),V&&(0,H.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:V}),(0,H.jsx)(J,{members:P,liveStatus:Y,typing:u,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Z})]})]}):j&&(0,H.jsxs)(`div`,{className:`flex w-60 shrink-0 flex-col border-l border-border bg-panel`,children:[(0,H.jsx)(`div`,{className:`flex h-11 shrink-0 items-center border-b border-border px-3 text-sm font-medium text-foreground`,children:`Members`}),(0,H.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[I!==null&&(0,H.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-2 text-xs text-text-secondary`,children:[(0,H.jsx)(`span`,{children:`Reply cap`}),(0,H.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>q(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,H.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),V&&(0,H.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:V}),(0,H.jsx)(J,{members:P,liveStatus:Y,typing:u,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Z})]})]}),W&&(0,H.jsx)(oe,{open:!0,member:W.member,projectName:r,onSubmit:le,onClose:()=>G(null)},W.member?.id??`add`),(0,H.jsx)(ue,{groupId:t,message:O,onClose:()=>A(null)})]}):(0,H.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-sm text-text-subtle`,children:`No group selected.`})}export{Q as GroupChatTab};
|
|
1
|
+
import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,y as n}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t as r}from"./createLucideIcon-ConhwJnb.js";import{g as i,p as a,t as o}from"./mobile-bottom-sheet-BwPBKZON.js";import{t as s}from"./use-is-mobile-CE6AamG6.js";import{t as c}from"./chevron-right-DeUue2aK.js";import{n as l,t as u}from"./tool-cards-DNftJX5Y.js";import{a as d,c as f,n as p,o as m,t as h}from"./dialog-HHdNInEH.js";import"./api-client-DhXpjLdi.js";import"./vendor-mermaid-CYOBtZtD.js";import"./settings-store-UwT_fNhg.js";import{n as g}from"./utils-E0yyGxXt.js";import"./panel-store-DsDZX8Mi.js";import{i as _}from"./project-store-C1jInVih.js";import"./tab-store-ByORqglW.js";import{At as v,C as y,Et as b,Ft as x,G as S,Ht as C,J as w,K as T,Rt as E,S as D,W as O,Zt as k,_ as A,b as j,g as ee,h as M,m as te,p as N,q as P,v as ne,x as F,y as I,zt as re}from"./index-DMEso_fH.js";import{t as L}from"./markdown-renderer-CaVoLF6f.js";var R=r(`scroll-text`,[[`path`,{d:`M15 12h-5`,key:`r7krc0`}],[`path`,{d:`M15 8h-5`,key:`1khuty`}],[`path`,{d:`M19 17V5a2 2 0 0 0-2-2H4`,key:`zz82l3`}],[`path`,{d:`M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3`,key:`1ph1d7`}]]),z=r(`user-plus`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}],[`line`,{x1:`19`,x2:`19`,y1:`8`,y2:`14`,key:`1bvyxn`}],[`line`,{x1:`22`,x2:`16`,y1:`11`,y2:`11`,key:`1shjgl`}]]),B=e(t(),1),V=8e3;function ie(e,t){let[n,r]=(0,B.useState)([]),[i,a]=(0,B.useState)([]),[o,s]=(0,B.useState)(`idle`),[c,u]=(0,B.useState)({}),[d,f]=(0,B.useState)(!1),[p,m]=(0,B.useState)(!1),[h,g]=(0,B.useState)(!1),[_,v]=(0,B.useState)(null),y=(0,B.useRef)(new Map),b=(0,B.useCallback)(e=>{u(t=>{if(!t[e])return t;let n={...t};return delete n[e],n})},[]),x=(0,B.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}switch(t.type){case`ping`:return;case`group_state`:m(!0),s(t.status),a(t.members),g(t.status===`active`);return;case`group_message`:b(t.message.fromMember),r(e=>e.some(e=>e.id===t.message.id)?e:[...e,t.message]);return;case`member_status`:a(e=>e.map(e=>e.id===t.memberId?{...e,status:t.status}:e));return;case`typing`:{u(e=>({...e,[t.member]:!0}));let e=y.current,n=e.get(t.member);n&&clearTimeout(n),e.set(t.member,setTimeout(()=>b(t.member),V));return}case`turn_done`:return;case`group_done`:g(!1),s(`idle`),u({});return;case`error`:v(t.message),g(!1);return}},[b]),{send:S}=l({url:e&&t?`/ws/project/${encodeURIComponent(t)}/group/${encodeURIComponent(e)}`:``,onMessage:x,autoConnect:!!e&&!!t});return(0,B.useEffect)(()=>{let t=!1;r([]),a([]),u({}),s(`idle`),g(!1),v(null),m(!1);for(let e of y.current.values())clearTimeout(e);if(y.current.clear(),e)return f(!0),M(e,{limit:200}).then(e=>{t||r(t=>{let n=new Set(e.messages.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));return[...e.messages,...r]})}).catch(e=>{t||v(e instanceof Error?e.message:`Failed to load feed`)}).finally(()=>{t||f(!1)}),()=>{t=!0}},[e]),{messages:n,members:i,status:o,typing:c,loading:d,isConnected:p,isRunning:h,error:_,sendMessage:(0,B.useCallback)(t=>{let n=t.trim();!n||!e||(v(null),g(!0),p?S(JSON.stringify({type:`message`,content:n})):j(e,n).catch(e=>{v(e instanceof Error?e.message:`Failed to send message`),g(!1)}))},[e,p,S]),stop:(0,B.useCallback)(()=>{e&&(p?S(JSON.stringify({type:`stop`})):F(e).catch(()=>{}),s(`paused`),g(!1))},[e,p,S]),resume:(0,B.useCallback)(()=>{e&&I(e).then(()=>{s(`active`),g(!0)}).catch(e=>v(e instanceof Error?e.message:`Failed to resume`))},[e])}}var H=n();function U(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function W(e){try{let t=e<0xe8d4a51000?e*1e3:e;return new Date(t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}catch{return``}}function G(e,t){return e.split(/(@[\p{L}\p{N}_]+)/gu).map((e,n)=>{if(e.startsWith(`@`)&&e.length>1){let r=t(e.slice(1));return(0,H.jsx)(`span`,{className:g(`font-semibold`,!r&&`text-primary`),style:r?{color:r}:void 0,children:e},n)}return e})}var ae=(0,B.memo)(function({message:e,colorFor:t,isLeader:n,onViewFull:r}){let i=e.fromMember===`user`,a=i?`You`:e.fromMember,o=i?`var(--color-primary)`:t(e.fromMember)??`var(--accent)`,s=!i&&n(e.fromMember),c=e.summary??``,l=e.toMember&&e.toMember!==`all`?e.toMember:null,u=(0,H.jsxs)(`div`,{className:g(`group relative flex gap-2.5 px-3 py-2 transition-colors hover:bg-surface-elevated/50`,i&&`bg-primary/5`),style:{boxShadow:`inset 3px 0 0 0 ${o}`},children:[e.fullSessionRef&&(0,H.jsx)(`button`,{type:`button`,onClick:()=>r(e),title:`View full transcript (AI's raw thinking / debug)`,"aria-label":`View full transcript`,className:`absolute right-1.5 top-1.5 hidden items-center rounded p-1 text-text-subtle/60 hover:bg-surface-elevated hover:text-text-secondary can-hover:group-hover:inline-flex`,children:(0,H.jsx)(R,{className:`size-3.5`})}),(0,H.jsx)(`div`,{className:`mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-full text-[11px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:o},"aria-hidden":!0,children:U(a)}),(0,H.jsxs)(`div`,{className:`min-w-0 flex-1 can-hover:pr-6`,children:[(0,H.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,H.jsx)(`span`,{className:`text-sm font-semibold`,style:{color:i?`var(--color-foreground)`:o},children:a}),s&&(0,H.jsx)(`span`,{className:`rounded bg-surface-elevated px-1.5 py-px text-[10px] font-medium text-text-secondary`,children:`leader`}),l&&(0,H.jsxs)(`span`,{className:`text-[11px] text-text-subtle`,children:[`→ `,l]}),(0,H.jsx)(`span`,{className:`text-[11px] text-text-subtle`,children:W(e.createdAt)})]}),(0,H.jsx)(`div`,{className:`mt-0.5 whitespace-pre-wrap break-words text-sm leading-relaxed text-text-secondary`,children:G(c,t)})]})]});return e.fullSessionRef?(0,H.jsxs)(O,{children:[(0,H.jsx)(P,{asChild:!0,children:u}),(0,H.jsx)(S,{children:(0,H.jsxs)(T,{onClick:()=>r(e),children:[(0,H.jsx)(R,{className:`size-4`}),` View full transcript`]})})]}):u}),K={idle:`bg-text-subtle`,working:`bg-primary animate-pulse`,done:`bg-emerald-500`,error:`bg-destructive`},q={idle:`Idle`,working:`Working`,done:`Done`,error:`Error`},J=(0,B.memo)(function({members:e,liveStatus:t,typing:n,busy:r,onAdd:i,onEdit:o,onRemove:s}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-0.5 p-2`,children:[e.map(e=>{let i=n[e.name],c=t.get(e.id)??e.status;return(0,H.jsxs)(`div`,{className:`group flex items-center gap-2 rounded-md px-2 py-1.5`,children:[(0,H.jsx)(`span`,{className:`flex size-6 shrink-0 items-center justify-center rounded-full text-[10px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:e.color??`var(--accent)`},"aria-hidden":!0,children:e.name.slice(0,1).toUpperCase()}),(0,H.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,H.jsx)(`span`,{className:`truncate text-xs font-medium`,style:{color:e.color??`var(--color-foreground)`},children:e.name}),e.role===`leader`&&(0,H.jsx)(`span`,{className:`rounded-sm bg-accent-wash px-1 text-[9px] font-semibold uppercase text-primary`,children:`lead`})]}),(0,H.jsx)(`span`,{className:`block truncate text-[10px] text-text-subtle`,children:i?`typing…`:e.persona||q[c]})]}),(0,H.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 can-hover:opacity-0 can-hover:group-hover:opacity-100`,children:[(0,H.jsx)(`button`,{type:`button`,onClick:()=>o(e),disabled:r,"aria-label":`Edit ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground active:bg-surface-elevated disabled:opacity-40`,children:(0,H.jsx)(a,{className:`size-3.5`})}),(0,H.jsx)(`button`,{type:`button`,onClick:()=>s(e),disabled:r,"aria-label":`Remove ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-destructive active:bg-surface-elevated disabled:opacity-40`,children:(0,H.jsx)(v,{className:`size-3.5`})})]}),(0,H.jsx)(`span`,{className:g(`size-2 shrink-0 rounded-full`,K[c]),title:q[c],"aria-hidden":!0})]},e.id)}),(0,H.jsxs)(`button`,{type:`button`,onClick:i,disabled:r,className:`mt-1 flex items-center gap-2 rounded-md px-2 py-2 text-xs font-medium text-primary hover:bg-surface-elevated active:bg-surface-elevated disabled:opacity-40`,children:[(0,H.jsx)(z,{className:`size-4`}),` Add member`]})]})}),Y=`w-full min-h-[40px] rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`;function oe({open:e,member:t,projectName:n,providerId:r=`claude`,onSubmit:i,onClose:a}){let c=s(),[l,u]=(0,B.useState)(t?.name??``),[g,_]=(0,B.useState)(t?.persona??``),[v,y]=(0,B.useState)(t?.model??null),[b,x]=(0,B.useState)(t?.role===`leader`),[S,C]=(0,B.useState)(!1),[w,T]=(0,B.useState)(null),E=(0,B.useCallback)(async()=>{let e=l.trim();if(!e){T(`Name is required`);return}C(!0),T(null);try{await i({name:e,persona:g.trim()||null,model:v,role:b?`leader`:`member`}),a()}catch(e){T(e instanceof Error?e.message:`Failed to save member`),C(!1)}},[l,g,v,b,i,a]),D=t?.role===`leader`,O=(0,H.jsxs)(`div`,{className:`flex flex-col gap-3 px-1 py-1`,children:[(0,H.jsx)(`input`,{className:Y,value:l,onChange:e=>u(e.target.value),placeholder:`Member name`,autoFocus:!0}),(0,H.jsx)(`input`,{className:Y,value:g,onChange:e=>_(e.target.value),placeholder:`Persona (optional)`}),(0,H.jsx)(N,{value:v,onChange:y,projectName:n,providerId:r}),(0,H.jsxs)(`label`,{className:X(D),children:[(0,H.jsx)(`input`,{type:`checkbox`,className:`size-4 accent-[var(--color-primary)]`,checked:b,disabled:D,onChange:e=>x(e.target.checked)}),(0,H.jsx)(`span`,{children:D?`Leader (reassign from another member)`:`Set as leader`})]}),w&&(0,H.jsx)(`p`,{className:`text-xs text-destructive`,children:w}),(0,H.jsxs)(`div`,{className:`flex justify-end gap-2 pt-1`,children:[(0,H.jsx)(f,{variant:`outline`,onClick:a,disabled:S,children:`Cancel`}),(0,H.jsxs)(f,{onClick:E,disabled:S,children:[S&&(0,H.jsx)(k,{className:`mr-1.5 size-4 animate-spin`}),t?`Save`:`Add member`]})]})]});if(!e)return null;let A=t?`Edit member`:`Add member`;return c?(0,H.jsx)(o,{open:!0,onClose:a,className:`flex max-h-[90vh] flex-col`,children:(0,H.jsxs)(`div`,{className:`flex min-h-0 flex-col px-4 pb-2`,children:[(0,H.jsx)(`h2`,{className:`mb-2 text-base font-semibold text-foreground`,children:A}),O]})}):(0,H.jsx)(h,{open:!0,onOpenChange:e=>{e||a()},children:(0,H.jsxs)(p,{className:`flex flex-col sm:max-w-md`,children:[(0,H.jsx)(d,{children:(0,H.jsx)(m,{children:A})}),O]})})}function X(e){return`flex items-center gap-2 text-sm text-text-secondary ${e?`opacity-60`:``}`}function se({messages:e,config:t,projectName:n}){return(0,H.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[t&&(0,H.jsx)(Z,{config:t}),e.map(e=>(0,H.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,H.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e.role===`user`?`User`:e.role===`assistant`?`Assistant`:e.role}),(0,H.jsx)(ce,{message:e,projectName:n})]},e.id)),e.length===0&&(0,H.jsx)(`p`,{className:`py-6 text-center text-sm text-text-subtle`,children:`Transcript is empty.`})]})}function ce({message:e,projectName:t}){let n=e.events??[];if(n.length===0)return e.content.trim()?(0,H.jsx)(L,{content:e.content}):null;let r=new Map;for(let e of n)e.type===`tool_result`&&e.toolUseId&&r.set(e.toolUseId,e);return(0,H.jsx)(`div`,{className:`flex flex-col gap-2`,children:n.map((e,n)=>{if(e.type===`text`)return e.content.trim()?(0,H.jsx)(L,{content:e.content},n):null;if(e.type===`thinking`)return(0,H.jsx)(le,{content:e.content},n);if(e.type===`tool_use`){let i=e.toolUseId?r.get(e.toolUseId):void 0;return(0,H.jsx)(u,{tool:e,result:i,completed:!!i,projectName:t},n)}return null})})}function le({content:e}){let[t,n]=(0,B.useState)(!1);return(0,H.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs text-text-subtle hover:text-text-secondary`,children:[(0,H.jsx)(c,{className:g(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,H.jsx)(i,{className:`size-3.5`}),(0,H.jsx)(`span`,{children:`Thinking`})]}),t&&(0,H.jsx)(`div`,{className:`border-t border-border px-3 py-2 text-xs leading-relaxed text-text-secondary`,children:(0,H.jsx)(L,{content:e})})]})}function Z({config:e}){let[t,n]=(0,B.useState)(!1),r=[[`Model`,e.model],[`Permission`,e.permissionMode],[`CWD`,e.cwd],[`Git branch`,e.gitBranch],[`CLI version`,e.version]].filter(([,e])=>e);return r.length===0?null:(0,H.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,H.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-secondary hover:text-foreground`,children:[(0,H.jsx)(c,{className:g(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,H.jsx)(E,{className:`size-3.5`}),(0,H.jsx)(`span`,{children:`Input config`})]}),t&&(0,H.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 border-t border-border px-3 py-2 text-xs`,children:r.map(([e,t])=>(0,H.jsxs)(`div`,{className:`contents`,children:[(0,H.jsx)(`dt`,{className:`text-text-subtle`,children:e}),(0,H.jsx)(`dd`,{className:`break-all font-mono text-text-secondary`,children:t})]},e))})]})}function ue({groupId:e,message:t,onClose:n}){let r=s(),[i,a]=(0,B.useState)(null),[c,l]=(0,B.useState)(!1),[u,f]=(0,B.useState)(null),g=t?.fullSessionRef??null;if((0,B.useEffect)(()=>{if(!t||!g)return;let n=!1;return a(null),f(null),l(!0),A(e,g).then(e=>{n||a(e)}).catch(e=>{n||f(e instanceof Error?e.message:`Failed to load transcript`)}).finally(()=>{n||l(!1)}),()=>{n=!0}},[e,g,t]),!t)return null;let _=(0,H.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[c&&(0,H.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,H.jsx)(k,{className:`size-5 animate-spin text-primary`})}),u&&(0,H.jsxs)(`div`,{className:`px-1 py-4 text-sm text-text-secondary`,children:[(0,H.jsx)(`p`,{className:`mb-2 font-medium text-foreground`,children:`Full transcript unavailable`}),(0,H.jsx)(`p`,{className:`text-xs text-text-subtle`,children:u}),t.summary&&(0,H.jsx)(`pre`,{className:`mt-4 whitespace-pre-wrap break-words rounded-md bg-surface-elevated p-3 text-xs leading-relaxed text-text-secondary`,children:t.summary})]}),!c&&!u&&i!=null&&(0,H.jsx)(`div`,{className:`px-1 py-1`,children:(0,H.jsx)(se,{messages:i.messages,config:i.config})})]}),v=`${t.fromMember} — full transcript`;return r?(0,H.jsx)(o,{open:!0,onClose:n,className:`max-h-[85vh] flex flex-col`,children:(0,H.jsxs)(`div`,{className:`flex flex-col min-h-0 px-4 pb-2`,children:[(0,H.jsx)(`h2`,{className:`mb-2 text-sm font-semibold text-foreground`,children:v}),_]})}):(0,H.jsx)(h,{open:!0,onOpenChange:e=>{e||n()},children:(0,H.jsxs)(p,{className:`flex max-h-[80vh] flex-col sm:max-w-2xl`,children:[(0,H.jsx)(d,{children:(0,H.jsx)(m,{className:`text-sm`,children:v})}),_]})})}function Q({metadata:e}){let t=e?.groupId??null,{activeProject:n}=_(w(e=>({activeProject:e.activeProject}))),r=e?.projectName??n?.name??``,i=s(),{messages:a,members:c,status:l,typing:u,loading:d,isRunning:p,error:m,sendMessage:h,stop:v,resume:S}=ie(t,r),[T,E]=(0,B.useState)(``),[O,A]=(0,B.useState)(null),[j,M]=(0,B.useState)(!1),N=(0,B.useRef)(null),[P,F]=(0,B.useState)([]),[I,L]=(0,B.useState)(null),[R,z]=(0,B.useState)(!1),[V,U]=(0,B.useState)(null),[W,G]=(0,B.useState)(null),K=(0,B.useCallback)(async()=>{if(t)try{let e=await ee(t);F(e.members),L(e.maxTurns)}catch{}},[t]),q=(0,B.useCallback)(async e=>{if(!t)return;let n=Math.max(1,Math.min(50,Math.floor(e)||1));L(n);try{await y(t,{maxTurns:n})}catch{K()}},[t,K]);(0,B.useEffect)(()=>{F([]),K()},[t,K]),(0,B.useEffect)(()=>{N.current?.scrollIntoView({block:`end`})},[a.length,u]);let Y=(0,B.useMemo)(()=>new Map(c.map(e=>[e.id,e.status])),[c]),X=P.length?P:c,se=(0,B.useMemo)(()=>{let e=new Map(X.map(e=>[e.name,e.color]));return t=>e.get(t)??null},[X]),ce=(0,B.useMemo)(()=>{let e=new Set(X.filter(e=>e.role===`leader`).map(e=>e.name));return t=>e.has(t)},[X]),le=(0,B.useCallback)(async e=>{t&&(W?.member?await D(t,W.member.id,e):await te(t,e),await K())},[t,W,K]),Z=(0,B.useCallback)(async e=>{if(t){z(!0),U(null);try{await ne(t,e.id),await K()}catch(e){U(e instanceof Error?e.message:`Failed to remove member`)}finally{z(!1)}}},[t,K]),Q=(0,B.useCallback)(()=>{let e=T.trim();e&&(h(e),E(``))},[T,h]),$=Object.keys(u).filter(e=>u[e]);return t?(0,H.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[(0,H.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,H.jsxs)(`div`,{className:`flex h-11 shrink-0 items-center justify-between border-b border-border px-3`,children:[(0,H.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,H.jsx)(`span`,{className:g(`size-2 rounded-full`,l===`active`?`bg-primary animate-pulse`:l===`paused`?`bg-amber-500`:`bg-text-subtle`)}),(0,H.jsx)(`span`,{className:`capitalize`,children:l})]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[p?(0,H.jsxs)(f,{size:`sm`,variant:`outline`,onClick:v,className:`h-8`,children:[(0,H.jsx)(x,{className:`mr-1 size-3.5`}),` Stop`]}):l===`paused`?(0,H.jsxs)(f,{size:`sm`,variant:`outline`,onClick:S,className:`h-8`,children:[(0,H.jsx)(C,{className:`mr-1 size-3.5`}),` Resume`]}):null,(0,H.jsx)(`button`,{type:`button`,onClick:()=>M(e=>!e),className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground`,"aria-label":`Toggle roster`,children:(0,H.jsx)(b,{className:`size-4`})})]})]}),(0,H.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:d?(0,H.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,H.jsx)(k,{className:`size-5 animate-spin text-primary`})}):a.length===0?(0,H.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-sm text-text-subtle`,children:`Send a message to start the group.`}):(0,H.jsxs)(`div`,{className:`flex flex-col py-2`,children:[a.map(e=>(0,H.jsx)(ae,{message:e,colorFor:se,isLeader:ce,onViewFull:A},e.id)),$.length>0&&(0,H.jsxs)(`div`,{className:`px-3 py-1.5 text-xs italic text-text-subtle`,children:[$.join(`, `),` `,$.length===1?`is`:`are`,` typing…`]}),(0,H.jsx)(`div`,{ref:N})]})}),m&&(0,H.jsx)(`div`,{className:`shrink-0 border-t border-border bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:m}),(0,H.jsx)(`div`,{className:`shrink-0 border-t border-border p-2`,children:(0,H.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,H.jsx)(`textarea`,{value:T,onChange:e=>E(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!i&&(e.preventDefault(),Q())},rows:1,placeholder:`Message the group…`,className:`max-h-32 min-h-[44px] flex-1 resize-none rounded-md border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`}),(0,H.jsx)(f,{onClick:Q,disabled:!T.trim(),className:`size-11 shrink-0 p-0`,"aria-label":`Send`,children:(0,H.jsx)(re,{className:`size-4`})})]})})]}),i?(0,H.jsxs)(o,{open:j,onClose:()=>M(!1),className:`flex max-h-[72vh] flex-col`,children:[(0,H.jsx)(`div`,{className:`flex h-11 shrink-0 items-center px-4 text-sm font-medium text-foreground`,children:`Members`}),(0,H.jsxs)(`div`,{className:`min-h-0 overflow-y-auto`,children:[I!==null&&(0,H.jsxs)(`label`,{className:`flex items-center gap-2 px-4 py-2 text-xs text-text-secondary`,children:[(0,H.jsx)(`span`,{children:`Reply cap`}),(0,H.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>q(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,H.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),V&&(0,H.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:V}),(0,H.jsx)(J,{members:P,liveStatus:Y,typing:u,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Z})]})]}):j&&(0,H.jsxs)(`div`,{className:`flex w-60 shrink-0 flex-col border-l border-border bg-panel`,children:[(0,H.jsx)(`div`,{className:`flex h-11 shrink-0 items-center border-b border-border px-3 text-sm font-medium text-foreground`,children:`Members`}),(0,H.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[I!==null&&(0,H.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-2 text-xs text-text-secondary`,children:[(0,H.jsx)(`span`,{children:`Reply cap`}),(0,H.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>q(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,H.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),V&&(0,H.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:V}),(0,H.jsx)(J,{members:P,liveStatus:Y,typing:u,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Z})]})]}),W&&(0,H.jsx)(oe,{open:!0,member:W.member,projectName:r,onSubmit:le,onClose:()=>G(null)},W.member?.id??`add`),(0,H.jsx)(ue,{groupId:t,message:O,onClose:()=>A(null)})]}):(0,H.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-sm text-text-subtle`,children:`No group selected.`})}export{Q as GroupChatTab};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{y as e}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t}from"./file-exclamation-point-DBEC-Kst.js";import"./api-client-DhXpjLdi.js";import{Zt as n}from"./index-
|
|
1
|
+
import{y as e}from"./vendor-markdown-CKTlmXbz.js";import"./vendor-ui-DMRGWRuc.js";import{t}from"./file-exclamation-point-DBEC-Kst.js";import"./api-client-DhXpjLdi.js";import{Zt as n}from"./index-DMEso_fH.js";import{t as r}from"./use-blob-url-BMZ0zo_4.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};
|